Пример #1
0
static size_t
ifreader_read (ifreader *reader, size_t size)
{
  size_t bytesread = 0, bytesrem = 0;

  ASSERT(reader);
  bytesrem = (size_t) reader->endptr - (size_t) reader->cursor;
  if (size > reader->max) {
    if (__verbose)
      MESG("\nExtending buffer (%ld bytes)...\n", size);
    reader->buf = RENEW(reader->buf, size+1, unsigned char);
    reader->max = size;
  }
  if (reader->unread > 0 && bytesrem < size) {
    bytesread = MIN(reader->max - bytesrem, reader->unread);
    memmove(reader->buf, reader->cursor, bytesrem);
    reader->cursor = reader->buf;
    reader->endptr = reader->buf + bytesrem;
    if (fread(reader->endptr, 1, bytesread, reader->fp) != bytesread)
      ERROR("Reading file failed.");
    reader->endptr += bytesread;
    reader->unread -= bytesread;
    if (__verbose)
      MESG("Reading more %ld bytes (%ld bytes remains in buffer)...\n", bytesread, bytesrem);
  }

  *reader->endptr = 0;

  return bytesread + bytesrem;
}
Пример #2
0
static void
CIDFont_dofont (CIDFont *font)
{
  if (!font || !font->indirect)
    return;

  if (__verbose)
    MESG(":%s", font->ident);
  if (__verbose > 1) {
    if (font->fontname)
      MESG("[%s]", font->fontname);
  }

  switch (font->subtype) {
  case CIDFONT_TYPE0:
    if(__verbose)
      MESG("[CIDFontType0]");
    if (CIDFont_get_flag(font, CIDFONT_FLAG_TYPE1))
      CIDFont_type0_t1dofont(font);
    else if (CIDFont_get_flag(font, CIDFONT_FLAG_TYPE1C))
      CIDFont_type0_t1cdofont(font);
    else
      CIDFont_type0_dofont(font);
    break;
  case CIDFONT_TYPE2:
    if(__verbose)
      MESG("[CIDFontType2]");
    CIDFont_type2_dofont(font);
    break;
  default:
    ERROR("%s: Unknown CIDFontType %d.", CIDFONT_DEBUG_STR, font->subtype);
    break;
  }
}
Пример #3
0
void
texpdf_dump (const char *start, const char *end)
{
  const char *p = start;

#define DUMP_LIMIT 50
  MESG("\nCurrent input buffer is -->");
  while (p < end && p < start + DUMP_LIMIT)
    MESG("%c", *(p++));
  if (p == start+DUMP_LIMIT)
    MESG("...");
  MESG("<--\n");
}
Пример #4
0
/*
 * test file access by communicator besides COMM_WORLD.
 * Split COMM_WORLD into two, one (even_comm) contains the original
 * processes of even ranks.  The other (odd_comm) contains the original
 * processes of odd ranks.  Processes in even_comm creates a file, then
 * cloose it, using even_comm.  Processes in old_comm just do a barrier
 * using odd_comm.  Then they all do a barrier using COMM_WORLD.
 * If the file creation and cloose does not do correct collective action
 * according to the communicator argument, the processes will freeze up
 * sooner or later due to barrier mixed up.
 */
void
test_split_comm_access(char filenames[][PATH_MAX])
{
    MPI_Comm comm;
    MPI_Info info = MPI_INFO_NULL;
    int color, mrc;
    int newrank, newprocs;
    hid_t fid;			/* file IDs */
    hid_t acc_tpl;		/* File access properties */
    herr_t ret;			/* generic return value */

    if (verbose)
	printf("Independent write test on file %s %s\n",
	    filenames[0], filenames[1]);

    color = mpi_rank%2;
    mrc = MPI_Comm_split (MPI_COMM_WORLD, color, mpi_rank, &comm);
    assert(mrc==MPI_SUCCESS);
    MPI_Comm_size(comm,&newprocs);
    MPI_Comm_rank(comm,&newrank);

    if (color){
	/* odd-rank processes */
	mrc = MPI_Barrier(comm);
	assert(mrc==MPI_SUCCESS);
    }else{
	/* even-rank processes */
	/* setup file access template */
	acc_tpl = H5Pcreate (H5P_FILE_ACCESS);
	assert(acc_tpl != FAIL);

	/* set Parallel access with communicator */
	ret = H5Pset_fapl_mpio(acc_tpl, comm, info);
	assert(ret != FAIL);

	/* create the file collectively */
	fid=H5Fcreate(filenames[color],H5F_ACC_TRUNC,H5P_DEFAULT,acc_tpl);
	assert(fid != FAIL);
	MESG("H5Fcreate succeed");

	/* Release file-access template */
	ret=H5Pclose(acc_tpl);
	assert(ret != FAIL);

	ret=H5Fclose(fid);
	assert(ret != FAIL);
    }
    if (mpi_rank == 0){
	mrc = MPI_File_delete(filenames[color], info);
	assert(mrc==MPI_SUCCESS);
    }
}
Пример #5
0
/* Scan for subfont IDs */
static int
scan_sfd_file (struct sfd_file_ *sfd, FILE *fp)
{
  char  *id;
  char  *q, *p;
  int    n, lpos = 0;

  ASSERT( sfd && fp );

  if (dpx_conf.verbose_level > 3) {
    MESG("\nsubfont>> Scanning SFD file \"%s\"...\n", sfd->ident);
  }

  rewind(fp);
  sfd->max_subfonts = sfd->num_subfonts = 0;
  while ((p = readline(line_buf, LINE_BUF_SIZE, fp)) != NULL) {
    lpos++;
    for ( ; *p && isspace((unsigned char)*p); p++);
    if (*p == 0)
      continue; /* empty */

    /* Saw non-wsp here */
    for (n = 0, q = p; *p && !isspace((unsigned char)*p); p++, n++);
    id = NEW(n + 1, char);
    memcpy(id, q, n); id[n] = '\0';
    if (sfd->num_subfonts >= sfd->max_subfonts) {
      sfd->max_subfonts += 16;
      sfd->sub_id = RENEW(sfd->sub_id, sfd->max_subfonts, char *);
    }

    if (dpx_conf.verbose_level > 3) {
      MESG("subfont>>   id=\"%s\" at line=\"%d\"\n", id, lpos);
    }
    sfd->sub_id[sfd->num_subfonts] = id;
    sfd->num_subfonts++;
  }
Пример #6
0
static uint8_t wid_game_map_key_event (widp w, const SDL_KEYSYM *key)
{
    int action = PLAYER_ACTION_USE;
    int change_selection_only = false;

    if (wid_menu_visible) {
        return (false);
    }

    tpp tp;

    if (!player) {
        wid_player_info_hide(true /* fast */);
        wid_player_inventory_hide(true /* fast */);
        return (true);
    }

    int redraw_action_bar = 0;
    int action_bar_index = thing_stats_get_action_bar_index(player);

    if (key->mod & KMOD_SHIFT) {
        int weapon_switch_delta = 0;

        switch (key->sym) {
        case SDLK_LEFT:
            weapon_switch_delta = -1;
            break;
        case SDLK_RIGHT:
            weapon_switch_delta = 1;
            break;
        default:
            break;
        }

        /*
         * Weapon switch?
         */
        if (!weapon_switch_delta) {
            return (true);
        }

        /*
         * Only switch between weapons
         */
        int tries = THING_ACTION_BAR_MAX;

        while (tries-- > 0) {
            action_bar_index += weapon_switch_delta;
            if (action_bar_index < 0) {
                action_bar_index = THING_ACTION_BAR_MAX - 1;
            }

            if (action_bar_index >= THING_ACTION_BAR_MAX) {
                action_bar_index = 0;
            }

            uint32_t id = player->stats.action_bar[action_bar_index].id;
            if (!id) {
                continue;
            }

            tp = id_to_tp(id);
            if (!tp) {
                continue;
            }

            /*
             * Found a weapon, switch to it.
             */
            change_selection_only = true;
            break;
        }

        if (tries <= 0) {
            return (true);
        }

        redraw_action_bar = 1;
    } else {
        switch (key->sym) {
        case SDLK_1:
            action_bar_index = 0; 
            redraw_action_bar = 1;
            break;
        case SDLK_2:
            action_bar_index = 1; 
            redraw_action_bar = 1;
            break;
        case SDLK_3:
            action_bar_index = 2; 
            redraw_action_bar = 1;
            break;
        case SDLK_4:
            action_bar_index = 3; 
            redraw_action_bar = 1;
            break;
        case SDLK_5:
            action_bar_index = 4; 
            redraw_action_bar = 1;
            break;
        case SDLK_6:
            action_bar_index = 5; 
            redraw_action_bar = 1;
            break;
        case SDLK_7:
            action_bar_index = 6; 
            redraw_action_bar = 1;
            break;
        case SDLK_8:
            action_bar_index = 7; 
            redraw_action_bar = 1;
            break;
        case SDLK_9:
            action_bar_index = 8; 
            redraw_action_bar = 1;
            break;
        case SDLK_0:
            action_bar_index = 9; 
            redraw_action_bar = 1;
            break;
        case 'z':
            debug = !debug;
            CON("debug %d", debug);
            return (true);
        case 'd':
            action = PLAYER_ACTION_DROP;
            break;
        case 'p':
            action = PLAYER_ACTION_PAY;
            break;

        case '\t': {
            /*
             * Show the inventory.
             */
            thing_statsp s;

            s = &player->stats;

            if (!wid_player_info_is_visible()) {
                /*
                 * Show stats window.
                 */
                wid_player_stats_visible(s);
                wid_player_info_visible(s, false /* fast */);
                wid_player_inventory_visible(s, false /* fast */);

                socket_tx_player_action(client_joined_server, player, 
                                        PLAYER_ACTION_PAUSE_GAME,
                                        0 /* action_bar_index */,
                                        false /* change_selection_only */);
            } else {
                /*
                 * Hide stats window.
                 */
                wid_player_stats_hide(s);
                wid_player_info_hide(false /* fast */);
                wid_player_inventory_hide(false /* fast */);

                socket_tx_player_action(client_joined_server, player, 
                                        PLAYER_ACTION_RESUME_GAME,
                                        0 /* action_bar_index */,
                                        false /* change_selection_only */);
            }
            return (true);
        }
        case 's':
            wid_choose_stats_visible();

            socket_tx_player_action(client_joined_server, player, 
                                    PLAYER_ACTION_PAUSE_GAME,
                                    0 /* action_bar_index */,
                                    false /* change_selection_only */);
            return (true);

        case 'q':
            if (client_level->is_test_level) {
                wid_game_map_go_back_to_editor();
                return (true);
            }

            wid_game_quit_visible();
            return (true);

        case SDLK_RETURN:
        case ' ':
            return (false);

        default:
            return (false);
        }
    }

    uint32_t id = player->stats.action_bar[action_bar_index].id;
    if (!id) {
        MESG(WARNING, "Nothing in that slot");
        return (true);
    }

    tp = id_to_tp(id);
    if (!tp) {
        MESG(WARNING, "No carried item is using that key");
        return (true);
    }

    if (!client_joined_server) {
        MESG(WARNING, "Not connected to server");
        return (true);
    }

    if (redraw_action_bar) {
        /*
         * Assume the server will accept the change and update locally else it 
         * looks laggy.
         */
        player_action_bar_changed_at = time_get_time_ms();

        thing_stats_set_action_bar_index(player, action_bar_index);

        wid_player_action_hide(true /* fast */, false /* player quit */);
        wid_player_action_visible(&player->stats, true /* fast */);

        wid_player_stats_redraw(true /* fast */);
    }

    socket_tx_player_action(client_joined_server, player, 
                            action,
                            action_bar_index,
                            change_selection_only);

    return (true);
}
Пример #7
0
void
phdf5readAll(char *filename)
{
    hid_t fid1;			/* HDF5 file IDs */
    hid_t acc_tpl1;		/* File access templates */
    hid_t xfer_plist;		/* Dataset transfer properties list */
    hid_t file_dataspace;	/* File dataspace ID */
    hid_t mem_dataspace;	/* memory dataspace ID */
    hid_t dataset1, dataset2;	/* Dataset ID */
    DATATYPE data_array1[SPACE1_DIM1][SPACE1_DIM2];	/* data buffer */
    DATATYPE data_origin1[SPACE1_DIM1][SPACE1_DIM2];	/* expected data buffer */

    hsize_t start[SPACE1_RANK];			/* for hyperslab setting */
    hsize_t count[SPACE1_RANK], stride[SPACE1_RANK];	/* for hyperslab setting */

    herr_t ret;         	/* Generic return value */

    MPI_Comm comm = MPI_COMM_WORLD;
    MPI_Info info = MPI_INFO_NULL;

    if (verbose)
			printf("Collective read test on file %s\n", filename);

    /* -------------------
     * OPEN AN HDF5 FILE
     * -------------------*/
    /* setup file access template with parallel IO access. */
    acc_tpl1 = H5Pcreate (H5P_FILE_ACCESS);
    assert(acc_tpl1 != FAIL);
    MESG("H5Pcreate access succeed");
    /* set Parallel access with communicator */
    ret = H5Pset_fapl_mpio(acc_tpl1, comm, info);
    assert(ret != FAIL);
    MESG("H5Pset_fapl_mpio succeed");

    /* open the file collectively */
    fid1=H5Fopen(filename,H5F_ACC_RDWR,acc_tpl1);
    assert(fid1 != FAIL);
    MESG("H5Fopen succeed");

    /* Release file-access template */
    ret=H5Pclose(acc_tpl1);
    assert(ret != FAIL);


    /* --------------------------
     * Open the datasets in it
     * ------------------------- */
    /* open the dataset1 collectively */
    dataset1 = H5Dopen2(fid1, DATASETNAME1, H5P_DEFAULT);
    assert(dataset1 != FAIL);
    MESG("H5Dopen2 succeed");

    /* open another dataset collectively */
    dataset2 = H5Dopen2(fid1, DATASETNAME2, H5P_DEFAULT);
    assert(dataset2 != FAIL);
    MESG("H5Dopen2 2 succeed");

    /*
     * Set up dimensions of the slab this process accesses.
     */

    /* Dataset1: each process takes a block of columns. */
    slab_set(start, count, stride, BYCOL);
if (verbose)
    printf("start[]=(%lu,%lu), count[]=(%lu,%lu), total datapoints=%lu\n",
	(unsigned long)start[0], (unsigned long)start[1],
        (unsigned long)count[0], (unsigned long)count[1],
        (unsigned long)(count[0]*count[1]));

    /* create a file dataspace independently */
    file_dataspace = H5Dget_space (dataset1);
    assert(file_dataspace != FAIL);
    MESG("H5Dget_space succeed");
    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride,
	    count, NULL);
    assert(ret != FAIL);
    MESG("H5Sset_hyperslab succeed");

    /* create a memory dataspace independently */
    mem_dataspace = H5Screate_simple (SPACE1_RANK, count, NULL);
    assert (mem_dataspace != FAIL);

    /* fill dataset with test data */
    dataset_fill(start, count, stride, &data_origin1[0][0]);
    MESG("data_array initialized");
    if (verbose){
	MESG("data_array created");
	dataset_print(start, count, stride, &data_array1[0][0]);
    }

    /* set up the collective transfer properties list */
    xfer_plist = H5Pcreate (H5P_DATASET_XFER);
    assert(xfer_plist != FAIL);
    ret=H5Pset_dxpl_mpio(xfer_plist, H5FD_MPIO_COLLECTIVE);
    assert(ret != FAIL);
    MESG("H5Pcreate xfer succeed");

    /* read data collectively */
    ret = H5Dread(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
	    xfer_plist, data_array1);
    assert(ret != FAIL);
    MESG("H5Dread succeed");

    /* verify the read data with original expected data */
    ret = dataset_vrfy(start, count, stride, &data_array1[0][0], &data_origin1[0][0]);
    assert(ret != FAIL);

    /* release all temporary handles. */
    /* Could have used them for dataset2 but it is cleaner */
    /* to create them again.*/
    H5Sclose(file_dataspace);
    H5Sclose(mem_dataspace);
    H5Pclose(xfer_plist);

    /* Dataset2: each process takes a block of rows. */
    slab_set(start, count, stride, BYROW);
if (verbose)
    printf("start[]=(%lu,%lu), count[]=(%lu,%lu), total datapoints=%lu\n",
	(unsigned long)start[0], (unsigned long)start[1],
        (unsigned long)count[0], (unsigned long)count[1],
        (unsigned long)(count[0]*count[1]));

    /* create a file dataspace independently */
    file_dataspace = H5Dget_space (dataset1);
    assert(file_dataspace != FAIL);
    MESG("H5Dget_space succeed");
    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride,
	    count, NULL);
    assert(ret != FAIL);
    MESG("H5Sset_hyperslab succeed");

    /* create a memory dataspace independently */
    mem_dataspace = H5Screate_simple (SPACE1_RANK, count, NULL);
    assert (mem_dataspace != FAIL);

    /* fill dataset with test data */
    dataset_fill(start, count, stride, &data_origin1[0][0]);
    MESG("data_array initialized");
    if (verbose){
	MESG("data_array created");
	dataset_print(start, count, stride, &data_array1[0][0]);
    }

    /* set up the collective transfer properties list */
    xfer_plist = H5Pcreate (H5P_DATASET_XFER);
    assert(xfer_plist != FAIL);
    ret=H5Pset_dxpl_mpio(xfer_plist, H5FD_MPIO_COLLECTIVE);
    assert(ret != FAIL);
    MESG("H5Pcreate xfer succeed");

    /* read data independently */
    ret = H5Dread(dataset2, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
	    xfer_plist, data_array1);
    assert(ret != FAIL);
    MESG("H5Dread succeed");

    /* verify the read data with original expected data */
    ret = dataset_vrfy(start, count, stride, &data_array1[0][0], &data_origin1[0][0]);
    assert(ret != FAIL);

    /* release all temporary handles. */
    H5Sclose(file_dataspace);
    H5Sclose(mem_dataspace);
    H5Pclose(xfer_plist);


    /*
     * All reads completed.  Close datasets collectively
     */
    ret=H5Dclose(dataset1);
    assert(ret != FAIL);
    MESG("H5Dclose1 succeed");
    ret=H5Dclose(dataset2);
    assert(ret != FAIL);
    MESG("H5Dclose2 succeed");

    /* close the file collectively */
    H5Fclose(fid1);
}
Пример #8
0
void
phdf5writeAll(char *filename)
{
    hid_t fid1;			/* HDF5 file IDs */
    hid_t acc_tpl1;		/* File access templates */
    hid_t xfer_plist;		/* Dataset transfer properties list */
    hid_t sid1;   		/* Dataspace ID */
    hid_t file_dataspace;	/* File dataspace ID */
    hid_t mem_dataspace;	/* memory dataspace ID */
    hid_t dataset1, dataset2;	/* Dataset ID */
    hsize_t dims1[SPACE1_RANK] =
	{SPACE1_DIM1,SPACE1_DIM2};	/* dataspace dim sizes */
    DATATYPE data_array1[SPACE1_DIM1][SPACE1_DIM2];	/* data buffer */

    hsize_t start[SPACE1_RANK];			/* for hyperslab setting */
    hsize_t count[SPACE1_RANK], stride[SPACE1_RANK];	/* for hyperslab setting */

    herr_t ret;         	/* Generic return value */

    MPI_Comm comm = MPI_COMM_WORLD;
    MPI_Info info = MPI_INFO_NULL;


		/* in support of H5Tuner Test */
		MPI_Comm comm_test = MPI_COMM_WORLD;
		MPI_Info info_test ;
		int i_test, nkeys_test, flag_test;
		char key[MPI_MAX_INFO_KEY], value[MPI_MAX_INFO_VAL+1];
		char *libtuner_file = getenv("LD_PRELOAD");
		/* in support of H5Tuner Test */

    if (verbose)
			printf("Collective write test on file %s\n", filename);

    /* -------------------
     * START AN HDF5 FILE
     * -------------------*/
    /* setup file access template with parallel IO access. */
    acc_tpl1 = H5Pcreate (H5P_FILE_ACCESS);
    assert(acc_tpl1 != FAIL);
    MESG("H5Pcreate access succeed");
    /* set Parallel access with communicator */
    ret = H5Pset_fapl_mpio(acc_tpl1, comm, info);
    assert(ret != FAIL);
    MESG("H5Pset_fapl_mpio succeed");

    /* create the file collectively */
    fid1=H5Fcreate(filename,H5F_ACC_TRUNC,H5P_DEFAULT,acc_tpl1);
    assert(fid1 != FAIL);
    MESG("H5Fcreate succeed");

// ------------------------------------------------
// H5Tuner tests
// ------------------------------------------------

// Retrieve MPI parameters set via the H5Tuner
printf("\n\n--------------------------------------------------\n");
if ( (libtuner_file != NULL) && (strlen(libtuner_file) > 1) ){
	printf("Version of the H5Tuner loaded: \n%s\n", libtuner_file);
}
else {
	printf("No H5Tuner currently loaded.\n");
}
printf("--------------------------------------------------\n");


// Retrieve HDF5 Threshold and Alignment
hsize_t alignment[2];
size_t sieve_buf_size;
alignment[0]= 0; // threshold value
alignment[1]= 0; // alignment value
int ierr = H5Pget_alignment(acc_tpl1, &alignment[0], &alignment[1]);
printf("\n\n--------------------------------------------------\n");
printf("Testing values for Threshold and Alignment\n");
printf("--------------------------------------------------\n");
printf("Test value set to:88 \nRetrieved Threshold=%lu\n", alignment[0]);
printf("Test value set to:44 \nRetrieved Alignment=%lu\n", alignment[1]);
// Check Threshold
if ( alignment[0] == 88 ) {
	printf("PASSED: Threshold Test\n");
}
else {
	printf("FAILED: Threshold Test\n");
}
// Check Alignment
if ( alignment[1] == 44 ) {
	printf("PASSED: Alignment Test\n");
}
else {
	printf("FAILED: Alignment Test\n");
}
printf("--------------------------------------------------\n\n");

// Retrieve HDF5 sieve buffer size
ierr = H5Pget_sieve_buf_size(acc_tpl1, &sieve_buf_size);
printf("\n\n--------------------------------------------------\n");
printf("Testing values for Sieve Buffer Size\n");
printf("--------------------------------------------------\n");
printf("Test value set to:77 \nRetrieved Sieve Buffer Size=%lu\n", sieve_buf_size);
// Check sieve buffer size
if ( (int) sieve_buf_size == 77 ) {
	printf("PASSED: Sieve Buffer Size Test\n");
}
else {
	printf("FAILED: Sieve Buffer Size Test\n");
}
printf("--------------------------------------------------\n\n");

// Retrieve MPI parameters set via the H5Tuner
MPI_Info_create(&info_test);

ret = H5Pget_fapl_mpio(acc_tpl1, &comm_test, &info_test);
assert(ret != FAIL);
MESG("H5Pget_fapl_mpio succeed");


printf("-------------------------------------------------\n" );
printf("Testing parameters values via MPI_Info\n" );
printf("-------------------------------------------------\n" );
if(info_test == MPI_INFO_NULL) {
				printf("MPI info object is null. No keys are available.\n");
}
else {
	MPI_Info_get_nkeys(info_test, &nkeys_test);
	//printf("MPI info has %d keys\n", nkeys_test);
	if (nkeys_test <= 0) {
		printf("MPI info has no keys\n");
	}
	else {
		printf("MPI info has %d keys\n", nkeys_test);
		for ( i_test=0; i_test < nkeys_test; i_test++) {
			MPI_Info_get_nthkey( info_test, i_test, key );
			MPI_Info_get( info_test, key, MPI_MAX_INFO_VAL, value, &flag_test );
			printf( "Retrieved value for key %s is %s\n", key, value );
			//fflush(stdout);
		}
	}
	printf("-------------------------------------------------\n" );
	MPI_Info_free(&info_test);
}
// end of H5Tuner tests
// ---------------------------------------


    /* Release file-access template */
    ret=H5Pclose(acc_tpl1);
    assert(ret != FAIL);


    /* --------------------------
     * Define the dimensions of the overall datasets
     * and create the dataset
     * ------------------------- */
    /* setup dimensionality object */
    sid1 = H5Screate_simple (SPACE1_RANK, dims1, NULL);
    assert (sid1 != FAIL);
    MESG("H5Screate_simple succeed");


    /* create a dataset collectively */
    dataset1 = H5Dcreate2(fid1, DATASETNAME1, H5T_NATIVE_INT, sid1, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
    assert(dataset1 != FAIL);
    MESG("H5Dcreate2 succeed");

    /* create another dataset collectively */
    dataset2 = H5Dcreate2(fid1, DATASETNAME2, H5T_NATIVE_INT, sid1, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
    assert(dataset2 != FAIL);
    MESG("H5Dcreate2 2 succeed");

    /*
     * Set up dimensions of the slab this process accesses.
     */

    /* Dataset1: each process takes a block of rows. */
    slab_set(start, count, stride, BYROW);
		if (verbose)
    	printf("start[]=(%lu,%lu), count[]=(%lu,%lu), total datapoints=%lu\n",
				(unsigned long)start[0], (unsigned long)start[1],
        (unsigned long)count[0], (unsigned long)count[1],
        (unsigned long)(count[0]*count[1]));

    /* create a file dataspace independently */
    file_dataspace = H5Dget_space (dataset1);
    assert(file_dataspace != FAIL);
    MESG("H5Dget_space succeed");
    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride,
	    count, NULL);
    assert(ret != FAIL);
    MESG("H5Sset_hyperslab succeed");

    /* create a memory dataspace independently */
    mem_dataspace = H5Screate_simple (SPACE1_RANK, count, NULL);
    assert (mem_dataspace != FAIL);

    /* fill the local slab with some trivial data */
    dataset_fill(start, count, stride, &data_array1[0][0]);
    MESG("data_array initialized");
    if (verbose){
			MESG("data_array created");
			dataset_print(start, count, stride, &data_array1[0][0]);
    }

    /* set up the collective transfer properties list */
    xfer_plist = H5Pcreate (H5P_DATASET_XFER);
    assert(xfer_plist != FAIL);
    ret=H5Pset_dxpl_mpio(xfer_plist, H5FD_MPIO_COLLECTIVE);
    assert(ret != FAIL);
    MESG("H5Pcreate xfer succeed");

    /* write data collectively */
    ret = H5Dwrite(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
	    xfer_plist, data_array1);
    assert(ret != FAIL);
    MESG("H5Dwrite succeed");

    /* release all temporary handles. */
    /* Could have used them for dataset2 but it is cleaner */
    /* to create them again.*/
    H5Sclose(file_dataspace);
    H5Sclose(mem_dataspace);
    H5Pclose(xfer_plist);

    /* Dataset2: each process takes a block of columns. */
    slab_set(start, count, stride, BYCOL);
		if (verbose)
    	printf("start[]=(%lu,%lu), count[]=(%lu,%lu), total datapoints=%lu\n",
				(unsigned long)start[0], (unsigned long)start[1],
        (unsigned long)count[0], (unsigned long)count[1],
        (unsigned long)(count[0]*count[1]));

    /* put some trivial data in the data_array */
    dataset_fill(start, count, stride, &data_array1[0][0]);
    MESG("data_array initialized");
    if (verbose){
			MESG("data_array created");
			dataset_print(start, count, stride, &data_array1[0][0]);
    }

    /* create a file dataspace independently */
    file_dataspace = H5Dget_space (dataset1);
    assert(file_dataspace != FAIL);
    MESG("H5Dget_space succeed");
    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride,
	    count, NULL);
    assert(ret != FAIL);
    MESG("H5Sset_hyperslab succeed");

    /* create a memory dataspace independently */
    mem_dataspace = H5Screate_simple (SPACE1_RANK, count, NULL);
    assert (mem_dataspace != FAIL);

    /* fill the local slab with some trivial data */
    dataset_fill(start, count, stride, &data_array1[0][0]);
    MESG("data_array initialized");
    if (verbose){
			MESG("data_array created");
			dataset_print(start, count, stride, &data_array1[0][0]);
    }

    /* set up the collective transfer properties list */
    xfer_plist = H5Pcreate (H5P_DATASET_XFER);
    assert(xfer_plist != FAIL);
    ret=H5Pset_dxpl_mpio(xfer_plist, H5FD_MPIO_COLLECTIVE);
    assert(ret != FAIL);
    MESG("H5Pcreate xfer succeed");

    /* write data independently */
    ret = H5Dwrite(dataset2, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
	    xfer_plist, data_array1);
    assert(ret != FAIL);
    MESG("H5Dwrite succeed");

    /* release all temporary handles. */
    H5Sclose(file_dataspace);
    H5Sclose(mem_dataspace);
    H5Pclose(xfer_plist);


    /*
     * All writes completed.  Close datasets collectively
     */
    ret=H5Dclose(dataset1);
    assert(ret != FAIL);
    MESG("H5Dclose1 succeed");
    ret=H5Dclose(dataset2);
    assert(ret != FAIL);
    MESG("H5Dclose2 succeed");

    /* release all IDs created */
    H5Sclose(sid1);

    /* close the file collectively */
    H5Fclose(fid1);
}
Пример #9
0
static void server_alive_check (void)
{
    gsocketp s;

    if (single_player_mode) {
        return;
    }

    sockets_quality_check();

    TREE_WALK(sockets, s) {
        if (!socket_get_server_side_client(s)) {
            continue;
        }

        /*
         * Don't kill off new born connections.
         */
        if (socket_get_tx(s) < 200) {
            LOG("Server: Sent %d packets to %s, quality %u",
                socket_get_tx(s),
                socket_get_remote_logname(s),
                socket_get_quality(s));
            continue;
        }

        if (socket_get_quality(s) < SOCKET_PING_FAIL_THRESHOLD) {
            /*
             * Clients try forever. Server clients disconnect.
             */
            aplayerp p = socket_get_player(s);

            if (s->server_side_client) {
                MSG_SERVER_SHOUT_AT_ALL_PLAYERS(
                    POPUP, 
                    0, 0,
                    "Connection lost to %s",
                    socket_get_remote_logname(s));

                if (p) {
                    LOG("Server: \"%s\" (ID %u) dropped out from %s", 
                        p->stats_from_client.pname, 
                        p->key, 
                        socket_get_remote_logname(s));
                } else {
                    LOG("Server: Dropped connection to %s", 
                        socket_get_remote_logname(s));
                }

                LOG("Server: Sent %d packets, quality %u",
                    socket_get_tx(s),
                    (socket_get_quality(s) < SOCKET_PING_FAIL_THRESHOLD));
            } else {
                MESG(POPUP, "Connection at %d%% quality", 
                    socket_get_quality(s));

                continue;
            }

            server_rx_client_leave_implicit(s);

            socket_disconnect(s);
        } else {
            LOG("Server: Sent %d packets to %s, quality %u",
                socket_get_tx(s),
                socket_get_remote_logname(s),
                socket_get_quality(s));
        }
    }
}
Пример #10
0
int ReadSrgtFile(char *fname, int scat, Surrogate **s, double eps)
{
  FILE *fp;
  int n;
  int i;
  int m;
  int line; 
  int col, row, id, cat;
  float frac;
  char buffer[MAXLINE];
  char buffer2[MAXLINE];
  SurrogateList *sl = NULL;
  SurrogateList *t;
  double tooSmallToRead;

  extern int comp_surr(const void *, const void *);

  if ((fp = fopen(fname,"r")) == NULL) {
    WARN2("Cannot open file for reading: ", fname);
    n = -1;
    return n;
  }

  /* skip header (1 line) */
  for (i=0; i<1; i++) {
    if (fgets(buffer, MAXLINE, fp) == NULL) {
      WARN2("Cannot read the first line of surrogate file ", fname);
      n = -1;
      goto cleanup;
    }
  }

  n = 0;
  line = 1;
  tooSmallToRead=eps/100;

  while (fgets(buffer, MAXLINE, fp) != NULL) {
    if ((strlen(buffer) > 0) && (buffer[0] != '#'))
    {
      trim(buffer,buffer2);
      if (strlen(buffer2) > 0)
      {
         m = sscanf(buffer2,"%d %d %d %d %f", &cat, &id, &col, &row, &frac);
         if (m != 5)
         {
            sprintf(buffer, 
              "Failed to read the five required values from line %d of file\n%s\n%s",
              line, fname, buffer2);
            WARN(buffer);
            n = -1;
            goto cleanup;
         }
         if(cat==scat) 
		 {
			//if (frac > tooSmallToRead)  
			//{
               if (!new_surr(&sl, id, col, row, frac)) 
			   {
                  n = -1;
                  goto cleanup;
			   }
               n++;
            //}
			//else /* if the surrogate value is really tiny, skip it */
			//{
			//	sprintf(mesg,"Skipping line: %s",buffer2);
			//	MESG(mesg);
			//}
         }   
      }   
    }
    line++;
  }
  sprintf(buffer,"Read %d entries for category %d from file %s",
     n, scat, fname);
  MESG(buffer);

  if (n==0) goto cleanup;

  *s = (Surrogate *)malloc(n*sizeof(Surrogate));
  if (*s == NULL) {
    WARN("Malloc failure in ReadSrgtFile");
    n = -1;
    goto cleanup;
  }

  t = sl;
  for (i=0; i < n; i++) {
    (*s)[i].id = t->id;
    (*s)[i].col = t->col;
    (*s)[i].row = t->row;
    (*s)[i].frac = t->frac;
    t = t->next;
  }

  qsort((*s), n, sizeof(Surrogate), comp_surr);

  /* printing surrogate can be useful for debugging */
  /*fprintf(stdout,"file = %s, cat = %d\n",fname, scat);
  printsurr(*s, n);*/

  /*
    free_surr(sl);
  */
 cleanup:
  fclose(fp);

  return n;
}
Пример #11
0
/* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
int main(int argc, char *argv[])
{

  char *sfile1, *sfile2;
  int scat1, scat2;
  Surrogate *a, *b;
  int n_items_a, n_items_b;
  float eps;

  debug_output = 1;
  prog_name = argv[0];

  MESG(prog_version);

  /* process command line args */
  if (argc != 6) {
    fprintf(stderr,
	    "Usage: %s srgt_file1 srgt_category1 srgt_file2 srgt_category2 tolerance\n",
	    argv[0]);
    return 1;
  }

  sfile1 = argv[1];
  scat1  = atoi(argv[2]);
  sfile2 = argv[3];
  scat2  = atoi(argv[4]);
  eps = (float)atof(argv[5]);

  sprintf(mesg,"Tolerance = %f",eps);
  MESG(mesg);

  n_items_a = ReadSrgtFile(sfile1, scat1, &a, eps);
  if (n_items_a < 0)
  {
     if (a != NULL) free(a);
     ERROR(argv[0], "Could not read surrogate", 1);
     return 1; /*error*/
  }   
  if (n_items_a == 0) {
    sprintf(mesg,
       "No surrogate entries for category %d were found in file %s\n",
       scat1, sfile1);
    if (a != NULL) free(a);
    ERROR(argv[0], mesg, 1);
  }

  n_items_b = ReadSrgtFile(sfile2, scat2, &b, eps);
  if (n_items_b < 0) 
  {
     if (a != NULL) free(a);
     if (b != NULL) free(b);
     ERROR(argv[0], "Could not read surrogate", 1);
     return 1; /*error*/
  }   
  if (n_items_b == 0) {
     sprintf(mesg,
        "No surrogate entries for category %d were found in file %s\n",
        scat2, sfile2);
     if (a != NULL) free(a);
     if (b != NULL) free(b);
     ERROR(argv[0], mesg, 2);
  }

  /*if (n_items_a != n_items_b) {
     if (a != NULL) free(a);
     if (b != NULL) free(b);
	 sprintf(mesg,
		 "The number of surrogate entries for categories %d and %d differs",
		 scat1, scat2);
     ERROR(argv[0], mesg, 3);
  }*/

  if (!compare_surrogates(n_items_a, n_items_b, a, b, eps)) {
     if (a != NULL) free(a);
     if (b != NULL) free(b);
	 sprintf(mesg,"The surrogate values differ for categories %d and %d\n",
	    scat1, scat2);	 
     ERROR(argv[0], mesg, 4);
  }

  MESG("The surrogate comparison was successful!\n");
  return 0;
}
Пример #12
0
int compare_surrogates(int na, int nb, Surrogate *a, Surrogate *b, float eps)
{
  int i = 0, j = 0;
  int flag=1;
  int numdiffs = 0;
  int didbreak = 0;


  while ((i < na) && (j < nb))
  {
    if (a[i].id != b[j].id) {
	  /* handle the case when they are out of sync due to small values */
	  while ((a[i].id < b[j].id) && (a[i].frac <= eps) && (i < na))
	  {
		 i++;
	     sprintf(mesg,"County mismatch: Skipping small value for i=%d, val=%f",
			 i, a[i-1].frac);
         MESG(mesg);
	  }
	  while ((a[i].id > b[j].id) && (b[j].frac <= eps) && (j < nb))
	  {
		 j++;
	     sprintf(mesg,"County mismatch: Skipping small value for j=%d, val=%f",
			 j, b[j-1].frac);
         MESG(mesg);
	  }
	}
    if (a[i].id != b[j].id) 
	{
      sprintf(mesg,"County IDs differ: %d %d %d %f != %d %d %d %f",
          a[i].id, a[i].col, a[i].row, a[i].frac,
		  b[j].id, b[j].col, b[j].row, b[j].frac);
      MESG(mesg);
      flag = 0;
	  didbreak = 1;
      break;
    }
    if (a[i].col != b[j].col) {
	  while ((a[i].col < b[j].col) && (a[i].frac <= eps) && (i < na))
	  {
		 i++;
	     sprintf(mesg,"Column mismatch: Skipping small value for i=%d, val=%f",
			 i, a[i-1].frac);
         MESG(mesg);
	  }
	  while ((a[i].col > b[j].col) && (b[j].frac <= eps) && (j < nb))
	  {
  	     j++;
	     sprintf(mesg,"Column mismatch: Skipping small value for j=%d, val=%f",
			 j, b[j-1].frac);
         MESG(mesg);
	  }
	}
    if (a[i].col != b[j].col) {
      sprintf(mesg,"Grid cell columns differ: %d %d %d %f != %d %d %d %f",
          a[i].id, a[i].col, a[i].row, a[i].frac, 
		  b[j].id, b[j].col, b[j].row, b[j].frac);
      MESG(mesg);    
      flag = 0;
	  didbreak = 1;
      break;
    }
    if (a[i].row != b[j].row) {
	  while ((a[i].row < b[j].row) && (a[i].frac <= eps) && (i < na))
	  {
		 i++;
	     sprintf(mesg,"Row mismatch: Skipping small value for i=%d, val=%f",
			 i, a[i-1].frac);
         MESG(mesg);
	  }
	  while ((a[i].row > b[j].row) && (b[j].frac <= eps) && (j < nb))
	  {
  	     j++;
	     sprintf(mesg,"Row mismatch: Skipping small value for j=%d, val=%f",
			 j, b[j-1].frac);
         MESG(mesg);
	  }
	}
    if (a[i].row != b[j].row) {
      sprintf(mesg,"Grid cell rows differ: %d %d %d %f != %d %d %d %f",
          a[i].id, a[i].col, a[i].row, a[i].frac,
		  b[j].id, b[j].col, b[j].row, b[j].frac);
      MESG(mesg);    
      flag = 0;
	  didbreak = 1;
      break;
    }
#ifdef DEBUG    
    sprintf(mesg,
          "n=%d Id=%d Col=%d Row=%d FRAC1=%f, FRAC2 = %f, DIFF=%f", 
          n, a[i].id, a[i].col, a[i].row,a[i].frac, b[j].frac, a[i].frac-b[j].frac);
    MESG(mesg);      
#endif    
    if (fabs(a[i].frac - b[j].frac) > eps) {
      sprintf(mesg,
          "Fractions differ for %d, %d, %d: %f vs %f, diff=%f", 
          a[i].id, a[i].col, a[i].row,a[i].frac, b[j].frac, a[i].frac-b[j].frac);
      MESG(mesg);
      flag = 0;
      numdiffs++;
    }
	i++;
	j++;
  }
  if (didbreak)
  {
	  WARN("Comparison stopped because ID or grid cell differed");
	  return flag;
  }
  /* only fractions differed */
  if (numdiffs > 0)
  {
     sprintf(mesg,"%d total differences out of %d possible\n",
		 numdiffs, na);
     WARN(mesg);
  }   
  return flag;
}
void
phdf5writeInd(char *filename)
{
    hid_t fid1;			/* HDF5 file IDs */
    hid_t acc_tpl1;		/* File access templates */
    hid_t sid1;   		/* Dataspace ID */
    hid_t file_dataspace;	/* File dataspace ID */
    hid_t mem_dataspace;	/* memory dataspace ID */
    hid_t dataset1, dataset2;	/* Dataset ID */
    hsize_t dims1[SPACE1_RANK] =
	  {SPACE1_DIM1,SPACE1_DIM2};	/* dataspace dim sizes */
    DATATYPE data_array1[SPACE1_DIM1][SPACE1_DIM2];	/* data buffer */

    hsize_t start[SPACE1_RANK];			/* for hyperslab setting */
    hsize_t count[SPACE1_RANK], stride[SPACE1_RANK];	/* for hyperslab setting */

    herr_t ret;         	/* Generic return value */

    MPI_Comm comm = MPI_COMM_WORLD;
    MPI_Info info = MPI_INFO_NULL;

		/* in support of H5Tuner Test */
		MPI_Comm comm_test = MPI_COMM_WORLD;
    MPI_Info info_test ;
    int i_test, nkeys_test, flag_test;
    char key[MPI_MAX_INFO_KEY], value[MPI_MAX_INFO_VAL+1];
    char *libtuner_file = getenv("LD_PRELOAD");
    /* in support of H5Tuner Test */

    if (verbose)
	  	printf("Independent write test on file %s\n", filename);

    /* -------------------
     * START AN HDF5 FILE
     * -------------------*/
    /* setup file access template with parallel IO access. */
    acc_tpl1 = H5Pcreate (H5P_FILE_ACCESS);
    assert(acc_tpl1 != FAIL);
    MESG("H5Pcreate access succeed");
    /* set Parallel access with communicator */
    ret = H5Pset_fapl_mpio(acc_tpl1, comm, info);
    assert(ret != FAIL);
    MESG("H5Pset_fapl_mpio succeed");

    /* create the file collectively */
    /* printf("prior to callig H5Fcreate test on file %s\n", filename); */
    fid1 = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, acc_tpl1);
    assert(fid1 != FAIL);
    MESG("H5Fcreate succeed");

	  // ------------------------------------------------
		// H5Tuner tests
	  // ------------------------------------------------

		// Retrieve parameters set via the H5Tuner
		printf("\n\n--------------------------------------------------\n");
		if ( (libtuner_file != NULL) && (strlen(libtuner_file) > 1) ){
			printf("Version of the H5Tuner loaded: \n%s\n", libtuner_file);
		}
		else {
			printf("No H5Tuner currently loaded.\n");
		}
		printf("--------------------------------------------------\n");

		// Retrieve HDF5 Threshold and Alignment
		hsize_t alignment[2];
		alignment[0]= 0; // threshold value
		alignment[1]= 0; // alignment value
		ret = H5Pget_alignment(acc_tpl1, &alignment[0], &alignment[1]);
		assert(ret != FAIL);

		if ( verbose ) {
			MESG("H5Pget_alignment succeed. Values Retrieved");
			printf("\n\n--------------------------------------------------\n");
			printf("Testing values for Threshold\n");
			printf("--------------------------------------------------\n");
			printf("Test value set to:88 \nRetrieved Threshold=%lu\n", alignment[0]);
		}
		// Check Threshold
		if ( alignment[0] == 88 ) {
			if (verbose)
			  printf("PASSED: Threshold Test\n");
		}
		else {
			ret = FAIL;
			nerrors++;
			printf("FAILED: Threshold Test\n");
		}
		assert(ret != FAIL);
		MESG("Threshold Test succeed");


		// end of H5Tuner tests
		// ------------------------------------------------

    /* Release file-access template */
    ret = H5Pclose(acc_tpl1);
    assert(ret != FAIL);


    /* --------------------------
     * Define the dimensions of the overall datasets
     * and the slabs local to the MPI process.
     * ------------------------- */
    /* setup dimensionality object */
    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
    assert (sid1 != FAIL);
    MESG("H5Screate_simple succeed");


    /* create a dataset collectively */
    dataset1 = H5Dcreate2(fid1, DATASETNAME1, H5T_NATIVE_INT, sid1,
			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
    assert(dataset1 != FAIL);
    MESG("H5Dcreate2 succeed");

    /* create another dataset collectively */
    dataset2 = H5Dcreate2(fid1, DATASETNAME2, H5T_NATIVE_INT, sid1,
			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
    assert(dataset2 != FAIL);
    MESG("H5Dcreate2 succeed");



    /* set up dimensions of the slab this process accesses */
    start[0] = mpi_rank*SPACE1_DIM1/mpi_size;
    start[1] = 0;
    count[0] = SPACE1_DIM1/mpi_size;
    count[1] = SPACE1_DIM2;
    stride[0] = 1;
    stride[1] =1;
		if (verbose)
    	printf("start[]=(%lu,%lu), count[]=(%lu,%lu), total datapoints=%lu\n",
				(unsigned long)start[0], (unsigned long)start[1],
        (unsigned long)count[0], (unsigned long)count[1],
        (unsigned long)(count[0]*count[1]));

    /* put some trivial data in the data_array */
    dataset_fill(start, count, stride, &data_array1[0][0]);
    MESG("data_array initialized");

    /* create a file dataspace independently */
    file_dataspace = H5Dget_space (dataset1);
    assert(file_dataspace != FAIL);
    MESG("H5Dget_space succeed");
    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride,
	    count, NULL);
    assert(ret != FAIL);
    MESG("H5Sset_hyperslab succeed");

    /* create a memory dataspace independently */
    mem_dataspace = H5Screate_simple (SPACE1_RANK, count, NULL);
    assert (mem_dataspace != FAIL);

    /* write data independently */
    ret = H5Dwrite(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
	    H5P_DEFAULT, data_array1);
    assert(ret != FAIL);
    MESG("H5Dwrite succeed");

    /* write data independently */
    ret = H5Dwrite(dataset2, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
	    H5P_DEFAULT, data_array1);
    assert(ret != FAIL);
    MESG("H5Dwrite succeed");

    /* release dataspace ID */
    H5Sclose(file_dataspace);

    /* close dataset collectively */
    ret=H5Dclose(dataset1);
    assert(ret != FAIL);
    MESG("H5Dclose1 succeed");
    ret=H5Dclose(dataset2);
    assert(ret != FAIL);
    MESG("H5Dclose2 succeed");

    /* release all IDs created */
    H5Sclose(sid1);

    /* close the file collectively */
    H5Fclose(fid1);
}
Пример #14
0
void
phdf5write2(char *filename, hio_context_t context)
{
    hid_t fid1;			/* HDF5 file IDs */
    hid_t acc_tpl1;		/* File access templates */
    hid_t sid1;   		/* Dataspace ID */
    hid_t file_dataspace;	/* File dataspace ID */
    hid_t mem_dataspace;	/* memory dataspace ID */
    hid_t dataset1, dataset2;	/* Dataset ID */
    hsize_t dims1[SPACE1_RANK] =
	{SPACE1_DIM1,SPACE1_DIM2};	/* dataspace dim sizes */
    DATATYPE data_array1[SPACE1_DIM1][SPACE1_DIM2];	/* data buffer */

    hsize_t start[SPACE1_RANK];			/* for hyperslab setting */
    hsize_t count[SPACE1_RANK], stride[SPACE1_RANK];	/* for hyperslab setting */

    herr_t ret;         	/* Generic return value */
    ssize_t bytes_written;
    hio_request_t req;

    if (verbose)
	printf("Collective write test on file %s\n", filename);

    /* -------------------
     * START AN HDF5 FILE
     * -------------------*/
    /* setup file access template with hio IO access. */
    acc_tpl1 = H5Pcreate (H5P_FILE_ACCESS);
    assert(acc_tpl1 != FAIL);
    MESG("H5Pcreate access succeed");
    H5FD_hio_set_write_io(&settings, H5FD_HIO_STRIDED);
    H5FD_hio_set_write_blocking(&settings, H5FD_HIO_NONBLOCKING);
    H5FD_hio_set_request(&settings, &req);
    ret = H5Pset_fapl_hio(acc_tpl1, &settings);
    assert(ret != FAIL);
    MESG("H5Pset_fapl_hio succeed");

    /* create the file collectively */
    fid1=H5Fcreate(filename,0,H5P_DEFAULT,acc_tpl1);
    assert(fid1 != FAIL);
    MESG("H5Fcreate succeed");

    /* Release file-access template */
    ret=H5Pclose(acc_tpl1);
    assert(ret != FAIL);


    /* --------------------------
     * Define the dimensions of the overall datasets
     * and create the dataset
     * ------------------------- */
    /* setup dimensionality object */
    sid1 = H5Screate_simple (SPACE1_RANK, dims1, NULL);
    assert (sid1 != FAIL);
    MESG("H5Screate_simple succeed");

    /* create a dataset collectively */
    dataset1 = H5Dcreate2(fid1, DATASETNAME1, H5T_NATIVE_INT, sid1, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
    assert(dataset1 != FAIL);
    MESG("H5Dcreate2 succeed");

    /* create another dataset collectively */
    dataset2 = H5Dcreate2(fid1, DATASETNAME2, H5T_NATIVE_INT, sid1, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
    assert(dataset2 != FAIL);
    MESG("H5Dcreate2 2 succeed");

    /*
     * Set up dimensions of the slab this process accesses.
     */

    /* Dataset1: each process takes a block of rows. */
    slab_set(start, count, stride, BYROW);
if (verbose)
    printf("start[]=(%lu,%lu), count[]=(%lu,%lu), total datapoints=%lu\n",
	(unsigned long)start[0], (unsigned long)start[1],
        (unsigned long)count[0], (unsigned long)count[1],
        (unsigned long)(count[0]*count[1]));

    /* create a file dataspace independently */
    file_dataspace = H5Dget_space (dataset1);
    assert(file_dataspace != FAIL);
    MESG("H5Dget_space succeed");
    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride,
	    count, NULL);
    assert(ret != FAIL);
    MESG("H5Sset_hyperslab succeed");

    /* create a memory dataspace independently */
    mem_dataspace = H5Screate_simple (SPACE1_RANK, count, NULL);
    assert (mem_dataspace != FAIL);

    /* fill the local slab with some trivial data */
    dataset_fill(start, count, stride, &data_array1[0][0]);
    MESG("data_array initialized");
    if (verbose){
	MESG("data_array created");
	dataset_print(start, count, stride, &data_array1[0][0]);
    }

    /* write data strided and blocking*/
    ret = H5Dwrite(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
	    H5P_DEFAULT, data_array1);
    assert(ret != FAIL);
    MESG("H5Dwrite succeed");

    //Wait for the request to finish
    hio_request_wait(&req, 1, &bytes_written);

    /* release all temporary handles. */
    /* Could have used them for dataset2 but it is cleaner */
    /* to create them again.*/
    H5Sclose(file_dataspace);
    H5Sclose(mem_dataspace);

    /* Dataset2: each process takes a block of columns. */
    slab_set(start, count, stride, BYCOL);
if (verbose)
    printf("start[]=(%lu,%lu), count[]=(%lu,%lu), total datapoints=%lu\n",
	(unsigned long)start[0], (unsigned long)start[1],
        (unsigned long)count[0], (unsigned long)count[1],
        (unsigned long)(count[0]*count[1]));

    /* put some trivial data in the data_array */
    dataset_fill(start, count, stride, &data_array1[0][0]);
    MESG("data_array initialized");
    if (verbose){
	MESG("data_array created");
	dataset_print(start, count, stride, &data_array1[0][0]);
    }

    /* create a file dataspace independently */
    file_dataspace = H5Dget_space (dataset1);
    assert(file_dataspace != FAIL);
    MESG("H5Dget_space succeed");
    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride,
	    count, NULL);
    assert(ret != FAIL);
    MESG("H5Sset_hyperslab succeed");

    /* create a memory dataspace independently */
    mem_dataspace = H5Screate_simple (SPACE1_RANK, count, NULL);
    assert (mem_dataspace != FAIL);

    /* fill the local slab with some trivial data */
    dataset_fill(start, count, stride, &data_array1[0][0]);
    MESG("data_array initialized");
    if (verbose){
	MESG("data_array created");
	dataset_print(start, count, stride, &data_array1[0][0]);
    }

    /* write data contiguous and blocking */
    ret = H5Dwrite(dataset2, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
	    H5P_DEFAULT, data_array1);
    assert(ret != FAIL);
    MESG("H5Dwrite succeed");

    /* release all temporary handles. */
    H5Sclose(file_dataspace);
    H5Sclose(mem_dataspace);

    /*
     * All writes completed.  Close datasets collectively
     */
    ret=H5Dclose(dataset1);
    assert(ret != FAIL);
    MESG("H5Dclose1 succeed");
    ret=H5Dclose(dataset2);
    assert(ret != FAIL);
    MESG("H5Dclose2 succeed");

    /* release all IDs created */
    H5Sclose(sid1);

    /* close the file collectively */
    H5Fclose(fid1);
}
Пример #15
0
void
phdf5write1(char *filename, hio_context_t context)
{
    hid_t fid1;			/* HDF5 file IDs */
    hid_t acc_tpl1;		/* File access templates */
    hid_t sid1;   		/* Dataspace ID */
    hid_t file_dataspace;	/* File dataspace ID */
    hid_t mem_dataspace;	/* memory dataspace ID */
    hid_t dataset1, dataset2;	/* Dataset ID */
    hsize_t dims1[SPACE1_RANK] =
	{SPACE1_DIM1,SPACE1_DIM2};	/* dataspace dim sizes */
    DATATYPE data_array1[SPACE1_DIM1][SPACE1_DIM2];	/* data buffer */

    hsize_t start[SPACE1_RANK];			/* for hyperslab setting */
    hsize_t count[SPACE1_RANK], stride[SPACE1_RANK];	/* for hyperslab setting */

    herr_t ret;         	/* Generic return value */

    if (verbose)
	printf("Independent write test on file %s\n", filename);

    /* -------------------
     * START AN HDF5 FILE
     * -------------------*/
    /* setup file access template with hio IO access. */
    acc_tpl1 = H5Pcreate (H5P_FILE_ACCESS);
    assert(acc_tpl1 != FAIL);
    MESG("H5Pcreate access succeed");

    /* set HIO context */
    H5FD_hio_set_write_io(&settings, H5FD_HIO_CONTIGUOUS);
    H5FD_hio_set_write_blocking(&settings, H5FD_HIO_BLOCKING);
    ret = H5Pset_fapl_hio(acc_tpl1, &settings);
    assert(ret != FAIL);
    MESG("H5Pset_fapl_hio succeed");

    /* create the file/dataset collectively */
    fid1 = H5Fcreate(filename, 0, H5P_DEFAULT, acc_tpl1);
    assert(fid1 != FAIL);
    MESG("H5Fcreate succeed");

    /* Release file-access template */
    ret = H5Pclose(acc_tpl1);
    assert(ret != FAIL);


    /* --------------------------
     * Define the dimensions of the overall datasets
     * and the slabs local to the MPI process.
     * ------------------------- */
    /* setup dimensionality object */
    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
    assert (sid1 != FAIL);
    MESG("H5Screate_simple succeed");


    /* create a dataset collectively */
    dataset1 = H5Dcreate2(fid1, DATASETNAME1, H5T_NATIVE_INT, sid1,
			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
    assert(dataset1 != FAIL);
    MESG("H5Dcreate2 succeed");

    /* create another dataset collectively */
    dataset2 = H5Dcreate2(fid1, DATASETNAME2, H5T_NATIVE_INT, sid1,
			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
    assert(dataset2 != FAIL);
    MESG("H5Dcreate2 succeed");



    /* set up dimensions of the slab this process accesses */
    start[0] = mpi_rank*SPACE1_DIM1/mpi_size;
    start[1] = 0;
    count[0] = SPACE1_DIM1/mpi_size;
    count[1] = SPACE1_DIM2;
    stride[0] = 1;
    stride[1] =1;
if (verbose)
    printf("start[]=(%lu,%lu), count[]=(%lu,%lu), total datapoints=%lu\n",
	(unsigned long)start[0], (unsigned long)start[1],
        (unsigned long)count[0], (unsigned long)count[1],
        (unsigned long)(count[0]*count[1]));

    /* put some trivial data in the data_array */
    dataset_fill(start, count, stride, &data_array1[0][0]);
    MESG("data_array initialized");

    /* create a file dataspace independently */
    file_dataspace = H5Dget_space (dataset1);
    assert(file_dataspace != FAIL);
    MESG("H5Dget_space succeed");
    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride,
	    count, NULL);
    assert(ret != FAIL);
    MESG("H5Sset_hyperslab succeed");

    /* create a memory dataspace independently */
    mem_dataspace = H5Screate_simple (SPACE1_RANK, count, NULL);
    assert (mem_dataspace != FAIL);

    /* write data independently */
    ret = H5Dwrite(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
	    H5P_DEFAULT, data_array1);
    assert(ret != FAIL);
    MESG("H5Dwrite succeed");

    /* write data independently */
    ret = H5Dwrite(dataset2, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
	    H5P_DEFAULT, data_array1);
    assert(ret != FAIL);
    MESG("H5Dwrite succeed");

    /* release dataspace ID */
    H5Sclose(file_dataspace);

    /* close dataset collectively */
    ret=H5Dclose(dataset1);
    assert(ret != FAIL);
    MESG("H5Dclose1 succeed");
    ret=H5Dclose(dataset2);
    assert(ret != FAIL);
    MESG("H5Dclose2 succeed");

    /* release all IDs created */
    H5Sclose(sid1);

    /* close the file collectively */
    H5Fclose(fid1);
}
Пример #16
0
static int
pk_decode_packed (pdf_obj *stream, long wd, long ht,
                  int dyn_f, int run_color, unsigned char *dp, long pl)
{
  unsigned char  *rowptr;
  long            rowbytes;
  long            i, np = 0;
  long            run_count = 0, repeat_count = 0;

  rowbytes = (wd + 7) / 8;
  rowptr   = NEW(rowbytes, unsigned char);
  /* repeat count is applied to the *current* row.
   * "run" can span across rows.
   * If there are non-zero repeat count and if run
   * spans across row, first repeat and then continue.
   */
#ifdef  DEBUG
  MESG("\npkfont>> wd: %ld, ht: %ld, dyn_f: %d\n", wd, ht, dyn_f);
#endif
  for (np = 0, i = 0; i < ht; i++) {
    long  rowbits_left, nbits;

    repeat_count = 0;
    memset(rowptr, 0xff, rowbytes); /* 1 is white */
    rowbits_left = wd;
    /* Fill run left over from previous row */
    if (run_count > 0) {
      nbits = MIN(rowbits_left, run_count);
      switch (run_color) {
      case  0:
        rowbits_left -= fill_black_run(rowptr, 0, nbits);
        break;
      case  1:
        rowbits_left -= fill_white_run(rowptr, 0, nbits);
        break;
      }
      run_count -= nbits;
    }

    /* Read nybbles until we have a full row */
    while (np / 2 < pl && rowbits_left > 0) {
      int  nyb;

      nyb = (np % 2) ? dp[np/2] & 0x0f : (dp[np/2] >> 4) & 0x0f;
#if  DEBUG == 3
      MESG("\npk_nyb: %d", nyb);
#endif
      if (nyb == 14) { /* packed number "repeat_count" follows */
        if (repeat_count != 0)
          WARN("Second repeat count for this row!");
        np++; /* Consume this nybble */
        repeat_count = pk_packed_num(&np, dyn_f, dp, pl);
#if  DEBUG == 3
        MESG(" --> rep: %ld\n", repeat_count);
#endif
      } else if (nyb == 15) {
        if (repeat_count != 0)
          WARN("Second repeat count for this row!");
        np++; /* Consume this nybble */
        repeat_count = 1;
#if  DEBUG == 3
        MESG(" --> rep: %ld\n", repeat_count);
#endif
      } else { /* run_count */
        /* Interprete current nybble as packed number */
        run_count = pk_packed_num(&np, dyn_f, dp, pl);
#if  DEBUG == 3
        MESG(" --> run: %ld (%d)\n", run_count, run_color);
#endif
        nbits = MIN(rowbits_left, run_count);
        run_color  = !run_color;
        run_count -= nbits;
        switch (run_color) {
        case  0:
          rowbits_left -= fill_black_run(rowptr, wd - rowbits_left, nbits);
          break;
        case  1:
          rowbits_left -= fill_white_run(rowptr, wd - rowbits_left, nbits);
          break;
        }
      }
    }
    /* We got bitmap row data. */
#if  DEBUG == 2
    send_out(rowptr, rowbytes, wd, stream);
#else
    send_out(rowptr, rowbytes, stream);
#endif
    for ( ; i < ht && repeat_count > 0; repeat_count--, i++)
#if  DEBUG == 2
      send_out(rowptr, rowbytes, wd, stream);
#else
    send_out(rowptr, rowbytes, stream);
#endif
  }
  RELEASE(rowptr);

  return  0;
}
Пример #17
0
int compare_surrogates1(int n, Surrogate *a, Surrogate *b, float eps)
{
  int i;
  int flag=1;
  int numdiffs = 0;
  int didbreak = 0;

   for (i=0; i<n; i++) {
    if (a[i].id != b[i].id) {
      sprintf(mesg,"County IDs differ: %d %d %d %f != %d %d %d %f",
          a[i].id, a[i].col, a[i].row, a[i].frac,
		  b[i].id, b[i].col, b[i].row, b[i].frac);
      MESG(mesg);
      flag = 0;
	  didbreak = 1;
      break;
    }
    if (a[i].col != b[i].col) {
      sprintf(mesg,"Grid cell columns differ: %d %d %d %f != %d %d %d %f",
          a[i].id, a[i].col, a[i].row, a[i].frac, 
		  b[i].id, b[i].col, b[i].row, b[i].frac);
      MESG(mesg);    
      flag = 0;
	  didbreak = 1;
      break;
    }
    if (a[i].row != b[i].row) {
      sprintf(mesg,"Grid cell rows differ: %d %d %d %f != %d %d %d %f",
          a[i].id, a[i].col, a[i].row, a[i].frac,
		  b[i].id, b[i].col, b[i].row, b[i].frac);
      MESG(mesg);    
      flag = 0;
	  didbreak = 1;
      break;
    }
#ifdef DEBUG    
    sprintf(mesg,
          "n=%d Id=%d Col=%d Row=%d FRAC1=%f, FRAC2 = %f, DIFF=%f", 
          n, a[i].id, a[i].col, a[i].row,a[i].frac, b[i].frac, a[i].frac-b[i].frac);
    MESG(mesg);      
#endif    
    if (fabs(a[i].frac - b[i].frac) > eps) {
      sprintf(mesg,
          "Fractions differ for %d, %d, %d: %f vs %f, diff=%f", 
          a[i].id, a[i].col, a[i].row,a[i].frac, b[i].frac, a[i].frac-b[i].frac);
      MESG(mesg);
      flag = 0;
      numdiffs++;
    }
  }
  if (didbreak)
  {
	  WARN("Comparison stopped because ID or grid cell differed");
	  return flag;
  }
  /* only fractions differed */
  if (numdiffs > 0)
  {
     sprintf(mesg,"%d total differences out of %d possible\n",
		 numdiffs, n);
     WARN(mesg);
  }   
  return flag;
}
Пример #18
0
static int
load_encoding_file (const char *filename)
{
  FILE    *fp;
  pdf_obj *enc_name = NULL;
  pdf_obj *encoding_array = NULL;
  char    *wbuf;
  const char *p, *endptr;
  const char *enc_vec[256];
  int      code, fsize, enc_id;

  if (!filename)
    return -1;

  if (dpx_conf.verbose_level > 0) {
    MESG("(Encoding:%s", filename);
  }

  fp = DPXFOPEN(filename, DPX_RES_TYPE_ENC);
  if (!fp)
    return -1;
  /*
   * file_size do seek_end witout saving current position and
   * do rewind.
   */
  fsize = file_size(fp);

  wbuf = NEW(fsize + 1, char); 
  wbuf[fsize] = '\0';
  fread(wbuf, sizeof(char), fsize, fp);
  DPXFCLOSE(fp);

  p        = wbuf;
  endptr   = wbuf + fsize;

  skip_white(&p, endptr);

  /*
   * Skip comment lines.
   */
  while (p < endptr && p[0] == '%') {
    pdfparse_skip_line (&p, endptr);
    skip_white(&p, endptr);
  }
  if (p[0] == '/')
    enc_name = parse_pdf_name(&p, endptr);

  skip_white(&p, endptr);
  encoding_array = parse_pdf_array(&p, endptr, NULL);
  RELEASE(wbuf);
  if (!encoding_array) {
    if (enc_name)
      pdf_release_obj(enc_name);
    return -1;
  }

  for (code = 0; code < 256; code++) {
    enc_vec[code] = pdf_name_value(pdf_get_array(encoding_array, code));
  }
  enc_id = pdf_encoding_new_encoding(enc_name ? pdf_name_value(enc_name) : NULL,
				     filename, enc_vec, NULL, 0);

  if (enc_name) {
    if (dpx_conf.verbose_level > 1)
      MESG("[%s]", pdf_name_value(enc_name));
    pdf_release_obj(enc_name);
  }
  pdf_release_obj(encoding_array);

  if (dpx_conf.verbose_level > 0) MESG(")");

  return enc_id;
}