void hdf5_save_float<float>(hid_t loc_id, const string& dataset_name, float f) { hsize_t one = 1; herr_t status = \ H5LTmake_dataset_float(loc_id, dataset_name.c_str(), 1, &one, &f); CHECK_GE(status, 0) << "Failed to save int dataset with name " << dataset_name; }
void hdf5_save_nd_dataset<float>( const hid_t file_id, const string dataset_name, const Blob<float>& blob) { hsize_t dims[HDF5_NUM_DIMS]; dims[0] = blob.num(); dims[1] = blob.channels(); dims[2] = blob.height(); dims[3] = blob.width(); herr_t status = H5LTmake_dataset_float( file_id, dataset_name.c_str(), HDF5_NUM_DIMS, dims, blob.cpu_data()); CHECK_GE(status, 0) << "Failed to make float dataset " << dataset_name; }
/** * Write data into a dataset. * * @param [in] DatasetName * @param [in] DimensionSizes * @param [in] Data * @throw ios::failure */ void THDF5_File::WriteCompleteDataset(const char * DatasetName, const TDimensionSizes & DimensionSizes, const float * Data){ const int rank = 3; const hsize_t dims[]={DimensionSizes.Z, DimensionSizes.Y,DimensionSizes.X}; // write to dataset herr_t status = H5LTmake_dataset_float(HDF5_FileId,DatasetName,rank,dims, Data); if (status < 0) { char ErrorMessage[256]; sprintf(ErrorMessage,HDF5_ERR_FMT_CouldNotWriteTo,DatasetName); throw ios::failure(ErrorMessage); } }// end of WriteDataset (float)
static void psc_fields_single_write(struct psc_fields *flds, struct mrc_io *io) { int ierr; long h5_file; mrc_io_get_h5_file(io, &h5_file); hid_t group = H5Gopen(h5_file, mrc_io_obj_path(io, flds), H5P_DEFAULT); H5_CHK(group); ierr = H5LTset_attribute_int(group, ".", "p", &flds->p, 1); CE; ierr = H5LTset_attribute_int(group, ".", "ib", flds->ib, 3); CE; ierr = H5LTset_attribute_int(group, ".", "im", flds->im, 3); CE; ierr = H5LTset_attribute_int(group, ".", "nr_comp", &flds->nr_comp, 1); CE; // write components separately instead? hsize_t hdims[4] = { flds->nr_comp, flds->im[2], flds->im[1], flds->im[0] }; ierr = H5LTmake_dataset_float(group, "fields_single", 4, hdims, flds->data); CE; ierr = H5Gclose(group); CE; }
void hdf5_save_nd_dataset<float>( const hid_t file_id, const string& dataset_name, const Blob<float>& blob, bool write_diff) { int num_axes = blob.num_axes(); hsize_t *dims = new hsize_t[num_axes]; for (int i = 0; i < num_axes; ++i) { dims[i] = blob.shape(i); } const float* data; if (write_diff) { data = blob.cpu_diff(); } else { data = blob.cpu_data(); } herr_t status = H5LTmake_dataset_float( file_id, dataset_name.c_str(), num_axes, dims, data); CHECK_GE(status, 0) << "Failed to make float dataset " << dataset_name; delete[] dims; }
/*+++++++++++++++++++++++++ Main Program or Function +++++++++++++++*/ void SCIA_LV1_WR_H5_BASE( struct param_record param, const struct base_scia *base ) { hid_t gads_id; hsize_t adim; /* * open/create group /GADS */ gads_id = NADC_OPEN_HDF5_Group( param.hdf_file_id, "/GADS" ); if ( gads_id < 0 ) NADC_RETURN_ERROR( NADC_ERR_HDF_GRP, "/GADS" ); /* * write datasets */ adim = SCIENCE_PIXELS; (void) H5LTmake_dataset_float( gads_id, "SPECTRAL_BASE", 1, &adim, base->wvlen_det_pix ); /* * close interface */ (void) H5Gclose( gads_id ); }
int main (int argc, char **argv) { extern char* optarg; extern int optind, optopt; int c, errflg, backflg, incrflg, nopagflg, pagflg, rank, nranks; hid_t fapl, file, group, group1, dset; size_t incr, page; unsigned iter, level, igroup, idset, maxiter; char name[MAX_LEN]; char g1name[MAX_LEN]; char g2name[MAX_LEN]; hsize_t dims[3] = { X, Y, Z }; float *buf; double start, stop; double t1, t2; char cdum[MAX_LEN]; int i, memtotal, memfree, buffers, cached, swapcached, active, inactive; float fdum; assert (MPI_Init (&argc, &argv) >= 0); assert (MPI_Comm_rank (MPI_COMM_WORLD, &rank) >= 0); assert (MPI_Comm_size (MPI_COMM_WORLD, &nranks) >= 0); /* parse arguments */ backflg = errflg = incrflg = nopagflg = pagflg = 0; incr = INCREMENT; page = PAGE_SIZE; maxiter = MAX_ITER; while ((c = getopt(argc, argv, ":bni:t:p:")) != -1) { switch (c) { case 'b': backflg++; break; case 'i': incrflg++; incr = (size_t)atol(optarg); if (incr == 0) { fprintf(stderr, "Option -%c requires a positive integer argument\n", optopt); errflg++; } break; case 'n': nopagflg++; break; case 'p': pagflg++; page = (size_t)atol(optarg); if (page == 0) { fprintf(stderr, "Option -%c requires a positive integer argument\n", optopt); errflg++; } break; case 't': maxiter = (unsigned)atol(optarg); if (maxiter == 0) { fprintf(stderr, "Option -%c requires a positive integer argument\n", optopt); errflg++; } break; case ':': /* -i or -p without operand */ fprintf(stderr, "Option -%c requires an operand\n", optopt); errflg++; break; case '?': fprintf(stderr, "Unrecognized option: -%c\n", optopt); errflg++; break; default: errflg++; break; } } if (errflg) { if (rank == 0) { fprintf(stderr, "usage: . . . "); fprintf(stderr, "usage: h5core [OPTIONS]\n"); fprintf(stderr, " OPTIONS\n"); fprintf(stderr, " -b Write file to disk on exit\n"); fprintf(stderr, " -i I Memory buffer increment size in bytes [default: 512 MB]\n"); fprintf(stderr, " -n Disable write (to disk) paging\n"); fprintf(stderr, " -p P Page size in bytes [default: 64 MB]\n"); fprintf(stderr, " -t T Number of iterations [default: 5]\n"); fprintf(stderr, "\n"); fflush(stderr); } exit(2); } if ((backflg == 0) && (pagflg > 0)) { if (rank == 0) { fprintf(stderr, "The -p has no effect without the -b option"); fflush(stderr); } } if (pagflg && nopagflg) { if (rank == 0) { fprintf(stderr, "The -n and -p options are mutually exclusive."); fflush(stderr); } exit(3); } /* Let's go! */ fapl = H5Pcreate (H5P_FILE_ACCESS); assert (fapl >= 0); assert (H5Pset_libver_bounds (fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST) >= 0); assert (H5Pset_fapl_core (fapl, incr, (hbool_t) backflg) >= 0); if (nopagflg == 0) /* the user didn't disable paging */ { assert (H5Pset_core_write_tracking (fapl, 1, page) >= 0); } if (rank == 0) { printf("\n"); printf("Write to disk: %s\n", (backflg > 0) ? "YES" : "NO"); printf("Increment size: %ld [bytes]\n", incr); if (nopagflg == 0) { printf("Page size: %ld [bytes]\n", page); } else { printf("Page size: PAGING DISABLED!\n"); } printf("Iterations: %d\n", maxiter); printf("\n"); fflush(stdout); } buf = (float *) malloc (X * Y * Z * sizeof (float)); // Get basic memory info on each node, see how memory usage changes // after flushing to disk; do we end up back where we started? getmemory (&memtotal, &memfree, &buffers, &cached, &swapcached, &active, &inactive); if (rank == 0) { fprintf (stdout, "BEFORE RUNNING:\n"); fflush (stdout); } for (i = 0; i < nranks; i++) { if (rank == i) { printmemory (rank, memtotal, memfree, buffers, cached, swapcached, active, inactive); } MPI_Barrier (MPI_COMM_WORLD); } start = MPI_Wtime (); /* outer loop - simulated time */ for (iter = 0; iter < maxiter; ++iter) { if (rank == 0) { printf ("Iteration: %u\n", iter); assert (fflush (stdout) == 0); } assert (sprintf (name, "rank%05dtime%04u.h5", rank, iter) > 0); file = H5Fcreate (name, H5F_ACC_TRUNC, H5P_DEFAULT, fapl); assert (file >= 0); t1 = MPI_Wtime (); /* time level */ for (level = 0; level < MAX_TIME_LEVEL; ++level) { assert (sprintf (g1name, "level%03d", level) > 0); group = H5Gcreate2 (file, g1name, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); assert (group >= 0); /* group level */ for (igroup = 0; igroup < MAX_GROUPS; ++igroup) { assert (sprintf (g2name, "group%02d", igroup) > 0); group1 = H5Gcreate2 (group, g2name, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); assert (group1 >= 0); /* dataset level */ for (idset = 0; idset < MAX_DATASETS; ++idset) { assert (sprintf (name, "dataset%02d", idset) > 0); assert (H5LTmake_dataset_float (group1, name, RANK, dims, buf) >= 0); #ifdef DEBUG assert (fprintf (stderr, "rank %i time %i Wrote dataset %s/%s/%s\n", rank, level, g1name, g2name, name)); assert (fflush (stderr) == 0); #endif } assert (H5Gclose (group1) >= 0); } assert (H5Gclose (group) >= 0); } t2 = MPI_Wtime (); assert (fprintf (stdout, "rank %04i Total time for buffering chunks to memory:\t %f seconds\n", rank, t2 - t1)); assert (fflush (stdout) == 0); MPI_Barrier (MPI_COMM_WORLD); // To keep output less jumbled getmemory (&memtotal, &memfree, &buffers, &cached, &swapcached, &active, &inactive); if (rank == 0) { fprintf (stdout, "BEFORE FLUSHING:\n"); fflush (stdout); } for (i = 0; i < nranks; i++) { if (rank == i) { printmemory (rank, memtotal, memfree, buffers, cached, swapcached, active, inactive); } MPI_Barrier (MPI_COMM_WORLD); } /* close the file */ t1 = MPI_Wtime (); assert (H5Fclose (file) >= 0); t2 = MPI_Wtime (); getmemory (&memtotal, &memfree, &buffers, &cached, &swapcached, &active, &inactive); if (rank == 0) { fprintf (stdout, "AFTER FLUSHING:\n"); fflush (stdout); } for (i = 0; i < nranks; i++) { if (rank == i) { printmemory (rank, memtotal, memfree, buffers, cached, swapcached, active, inactive); assert (fprintf (stdout, "rank %04i Total time for flushing to disk:\t\t %10.2f seconds\n", rank, t2 - t1)); assert (fflush (stderr) == 0); } MPI_Barrier (MPI_COMM_WORLD); } } stop = MPI_Wtime (); MPI_Barrier (MPI_COMM_WORLD); if (rank == 0) { printf ("Total time: %f s\n", stop - start); printf ("Aggregate bandwidth per process: %f GB/s\n", ((float) X * Y * Z * sizeof (float)) * ((float) MAX_DATASETS * MAX_GROUPS * MAX_TIME_LEVEL * MAX_ITER) / (1024.0 * 1024.0 * 1024.0 * (stop - start))); } free ((void *) buf); assert (H5Pclose (fapl) >= 0); assert (MPI_Finalize () >= 0); return 0; }
static int test_dsets( void ) { int rank = 2; hsize_t dims[2] = {2,3}; hid_t file_id; hid_t dataset_id; char data_char_in[DIM] = {1,2,3,4,5,6}; char data_char_out[DIM]; short data_short_in[DIM] = {1,2,3,4,5,6}; short data_short_out[DIM]; int data_int_in[DIM] = {1,2,3,4,5,6}; int data_int_out[DIM]; long data_long_in[DIM] = {1,2,3,4,5,6}; long data_long_out[DIM]; float data_float_in[DIM] = {1,2,3,4,5,6}; float data_float_out[DIM]; double data_double_in[DIM] = {1,2,3,4,5,6}; double data_double_out[DIM]; const char *data_string_in = "This is a string"; char data_string_out[20]; int i; /* Create a new file using default properties. */ file_id = H5Fcreate( FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT ); /*------------------------------------------------------------------------- * H5LTmake_dataset test *------------------------------------------------------------------------- */ TESTING("H5LTmake_dataset"); /* Make dataset */ if ( H5LTmake_dataset( file_id, DSET0_NAME, rank, dims, H5T_NATIVE_INT, data_int_in ) < 0 ) goto out; /* Read dataset using the basic HDF5 API */ if ( ( dataset_id = H5Dopen2(file_id, DSET0_NAME, H5P_DEFAULT) ) < 0 ) goto out; if ( H5Dread ( dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, data_int_out ) < 0 ) goto out; if ( H5Dclose( dataset_id ) < 0 ) goto out; for (i = 0; i < DIM; i++) { if ( data_int_in[i] != data_int_out[i] ) { goto out; } } PASSED(); /*------------------------------------------------------------------------- * read using the LT function H5LTread_dataset *------------------------------------------------------------------------- */ TESTING("H5LTread_dataset"); if ( H5LTread_dataset( file_id, DSET0_NAME, H5T_NATIVE_INT, data_int_out ) < 0 ) goto out; for (i = 0; i < DIM; i++) { if ( data_int_in[i] != data_int_out[i] ) { goto out; } } PASSED(); /*------------------------------------------------------------------------- * test the H5LTmake_dataset_ functions *------------------------------------------------------------------------- */ /*------------------------------------------------------------------------- * H5LTmake_dataset_char *------------------------------------------------------------------------- */ TESTING("H5LTmake_dataset_char"); /* Make dataset char */ if ( H5LTmake_dataset_char( file_id, DSET1_NAME, rank, dims, data_char_in ) < 0 ) goto out; /* Read dataset */ if ( H5LTread_dataset( file_id, DSET1_NAME, H5T_NATIVE_CHAR, data_char_out ) < 0 ) goto out; for (i = 0; i < DIM; i++) { if ( data_char_in[i] != data_char_out[i] ) { goto out; } } /* Read dataset */ if ( H5LTread_dataset_char( file_id, DSET1_NAME, data_char_out ) < 0 ) goto out; for (i = 0; i < DIM; i++) { if ( data_char_in[i] != data_char_out[i] ) { goto out; } } PASSED(); /*------------------------------------------------------------------------- * H5LTmake_dataset_short *------------------------------------------------------------------------- */ TESTING("H5LTmake_dataset_short"); /* Make dataset short */ if ( H5LTmake_dataset_short( file_id, DSET2_NAME, rank, dims, data_short_in ) < 0 ) goto out; /* Read dataset */ if ( H5LTread_dataset( file_id, DSET2_NAME, H5T_NATIVE_SHORT, data_short_out ) < 0 ) goto out; for (i = 0; i < DIM; i++) { if ( data_short_in[i] != data_short_out[i] ) { goto out; } } /* Read dataset */ if ( H5LTread_dataset_short( file_id, DSET2_NAME, data_short_out ) < 0 ) goto out; for (i = 0; i < DIM; i++) { if ( data_short_in[i] != data_short_out[i] ) { goto out; } } PASSED(); /*------------------------------------------------------------------------- * H5LTmake_dataset_int *------------------------------------------------------------------------- */ TESTING("H5LTmake_dataset_int"); /* Make dataset int */ if ( H5LTmake_dataset_int( file_id, DSET3_NAME, rank, dims, data_int_in ) < 0 ) goto out; /* Read dataset */ if ( H5LTread_dataset( file_id, DSET3_NAME, H5T_NATIVE_INT, data_int_out ) < 0 ) goto out; for (i = 0; i < DIM; i++) { if ( data_int_in[i] != data_int_out[i] ) { goto out; } } /* Read dataset */ if ( H5LTread_dataset_int( file_id, DSET3_NAME, data_int_out ) < 0 ) goto out; for (i = 0; i < DIM; i++) { if ( data_int_in[i] != data_int_out[i] ) { goto out; } } PASSED(); /*------------------------------------------------------------------------- * H5LTmake_dataset_long *------------------------------------------------------------------------- */ TESTING("H5LTmake_dataset_long"); /* Make dataset long */ if ( H5LTmake_dataset_long( file_id, DSET4_NAME, rank, dims, data_long_in ) < 0 ) goto out; /* Read dataset */ if ( H5LTread_dataset( file_id, DSET4_NAME, H5T_NATIVE_LONG, data_long_out ) < 0 ) goto out; for (i = 0; i < DIM; i++) { if ( data_long_in[i] != data_long_out[i] ) { goto out; } } /* Read dataset */ if ( H5LTread_dataset_long( file_id, DSET4_NAME, data_long_out ) < 0 ) goto out; for (i = 0; i < DIM; i++) { if ( data_long_in[i] != data_long_out[i] ) { goto out; } } PASSED(); /*------------------------------------------------------------------------- * H5LTmake_dataset_float *------------------------------------------------------------------------- */ TESTING("H5LTmake_dataset_float"); /* Make dataset float */ if ( H5LTmake_dataset_float( file_id, DSET5_NAME, rank, dims, data_float_in ) < 0 ) goto out; /* Read dataset */ if ( H5LTread_dataset( file_id, DSET5_NAME, H5T_NATIVE_FLOAT, data_float_out ) < 0 ) goto out; for (i = 0; i < DIM; i++) { if ( data_float_in[i] != data_float_out[i] ) { goto out; } } /* Read dataset */ if ( H5LTread_dataset_float( file_id, DSET5_NAME, data_float_out ) < 0 ) goto out; for (i = 0; i < DIM; i++) { if ( data_float_in[i] != data_float_out[i] ) { goto out; } } PASSED(); /*------------------------------------------------------------------------- * H5LTmake_dataset_double *------------------------------------------------------------------------- */ TESTING("H5LTmake_dataset_double"); /* Make dataset double */ if ( H5LTmake_dataset_double( file_id, DSET6_NAME, rank, dims, data_double_in ) < 0 ) goto out; /* Read dataset */ if ( H5LTread_dataset( file_id, DSET6_NAME, H5T_NATIVE_DOUBLE, data_double_out ) < 0 ) goto out; for (i = 0; i < DIM; i++) { if ( data_double_in[i] != data_double_out[i] ) { goto out; } } /* Read dataset */ if ( H5LTread_dataset_double( file_id, DSET6_NAME, data_double_out ) < 0 ) goto out; for (i = 0; i < DIM; i++) { if ( data_double_in[i] != data_double_out[i] ) { goto out; } } PASSED(); /*------------------------------------------------------------------------- * H5LTmake_dataset_string *------------------------------------------------------------------------- */ TESTING("H5LTmake_dataset_string"); /* Make dataset string */ if ( H5LTmake_dataset_string(file_id,DSET7_NAME,data_string_in) < 0 ) goto out; /* Read dataset */ if ( H5LTread_dataset_string(file_id,DSET7_NAME,data_string_out) < 0 ) goto out; if ( strcmp(data_string_in,data_string_out) != 0 ) goto out; /*------------------------------------------------------------------------- * end tests *------------------------------------------------------------------------- */ /* Close the file. */ H5Fclose( file_id ); PASSED(); return 0; out: /* Close the file. */ H5_FAILED(); return -1; }
int main(void) { hid_t fid; /* file ID */ hid_t did; /* dataset ID */ hid_t dsid; /* DS dataset ID */ int rank = RANK; /* rank of data dataset */ int rankds = 1; /* rank of DS dataset */ hsize_t dims[RANK] = {DIM1_SIZE,DIM2_SIZE}; /* size of data dataset */ int buf[DIM_DATA] = {1,2,3,4,5,6,7,8,9,10,11,12}; /* data of data dataset */ hsize_t s1_dim[1] = {DIM1_SIZE}; /* size of DS 1 dataset */ hsize_t s2_dim[1] = {DIM2_SIZE}; /* size of DS 2 dataset */ float s1_wbuf[DIM1_SIZE] = {10,20,30}; /* data of DS 1 dataset */ int s2_wbuf[DIM2_SIZE] = {10,20,50,100}; /* data of DS 2 dataset */ /* create a file using default properties */ if ((fid=H5Fcreate("ex_ds1.h5",H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT))<0) goto out; /* make a dataset */ if (H5LTmake_dataset_int(fid,DSET_NAME,rank,dims,buf)<0) goto out; /* make a DS dataset for the first dimension */ if (H5LTmake_dataset_float(fid,DS_1_NAME,rankds,s1_dim,s1_wbuf)<0) goto out; /* make a DS dataset for the second dimension */ if (H5LTmake_dataset_int(fid,DS_2_NAME,rankds,s2_dim,s2_wbuf)<0) goto out; /*------------------------------------------------------------------------- * attach the DS_1_NAME dimension scale to DSET_NAME at dimension 0 *------------------------------------------------------------------------- */ /* get the dataset id for DSET_NAME */ if ((did = H5Dopen2(fid,DSET_NAME, H5P_DEFAULT))<0) goto out; /* get the DS dataset id */ if ((dsid = H5Dopen2(fid,DS_1_NAME, H5P_DEFAULT))<0) goto out; /* attach the DS_1_NAME dimension scale to DSET_NAME at dimension index 0 */ if (H5DSattach_scale(did,dsid,DIM0)<0) goto out; /* close DS id */ if (H5Dclose(dsid)<0) goto out; /*------------------------------------------------------------------------- * attach the DS_2_NAME dimension scale to DSET_NAME *------------------------------------------------------------------------- */ /* get the DS dataset id */ if ((dsid = H5Dopen2(fid,DS_2_NAME, H5P_DEFAULT))<0) goto out; /* attach the DS_2_NAME dimension scale to DSET_NAME as the 2nd dimension (index 1) */ if (H5DSattach_scale(did,dsid,DIM1)<0) goto out; /* close DS id */ if (H5Dclose(dsid)<0) goto out; /* close file */ H5Fclose(fid); return 0; out: printf("Error on return function...Exiting\n"); return 1; }