void cow_domain_setalign(cow_domain *d, int alignthreshold, int diskblocksize) { #if (COW_HDF5) printf("[%s] align threshold: %d kB, disk block size: %d kB\n", MODULE, alignthreshold/KILOBYTES, diskblocksize/KILOBYTES); H5Pset_alignment(d->fapl, alignthreshold, diskblocksize); #endif }
//-------------------------------------------------------------------------- // Function: FileAccPropList::setAlignment ///\brief Sets the alignment properties of this property list. ///\param threshold - IN: Threshold value for file object size ///\param alignment - IN: Alignment value ///\exception H5::PropListIException ///\par Description /// The parameter \a threshold must have a non-negative value. /// Note that setting the threshold value to 0 (zero) has the /// effect of a special case, forcing everything to be aligned. /// The parameter \a alignment must have a positive value. /// /// For detail on \a setting alignment, please refer to /// <A HREF="../RM_H5P.html#Property-SetAlignment">../RM_H5P.html#Property-SetAlignment</A> // Programmer: Binh-Minh Ribler - 2000 //-------------------------------------------------------------------------- void FileAccPropList::setAlignment( hsize_t threshold, hsize_t alignment ) const { herr_t ret_value = H5Pset_alignment( id, threshold, alignment ); if( ret_value < 0 ) { throw PropListIException("FileAccPropList::setAlignment", "H5Pset_alignment failed"); } }
/*------------------------------------------------------------------------- * Function: test_direct * * Purpose: Tests the file handle interface for DIRECT I/O driver * * Return: Success: 0 * Failure: -1 * * Programmer: Raymond Lu * Wednesday, 20 September 2006 * *------------------------------------------------------------------------- */ static herr_t test_direct(void) { #ifdef H5_HAVE_DIRECT hid_t file=(-1), fapl, access_fapl = -1; hid_t dset1=-1, dset2=-1, space1=-1, space2=-1; char filename[1024]; int *fhandle=NULL; hsize_t file_size; hsize_t dims1[2], dims2[1]; size_t mbound; size_t fbsize; size_t cbsize; int *points, *check, *p1, *p2; int wdata2[DSET2_DIM] = {11,12,13,14}; int rdata2[DSET2_DIM]; int i, j, n; #endif /*H5_HAVE_DIRECT*/ TESTING("Direct I/O file driver"); #ifndef H5_HAVE_DIRECT SKIPPED(); return 0; #else /*H5_HAVE_DIRECT*/ /* Set property list and file name for Direct driver. Set memory alignment boundary * and file block size to 512 which is the minimum for Linux 2.6. */ fapl = h5_fileaccess(); if(H5Pset_fapl_direct(fapl, MBOUNDARY, FBSIZE, CBSIZE) < 0) TEST_ERROR; h5_fixname(FILENAME[5], fapl, filename, sizeof filename); /* Verify the file access properties */ if(H5Pget_fapl_direct(fapl, &mbound, &fbsize, &cbsize) < 0) TEST_ERROR; if(mbound != MBOUNDARY || fbsize != FBSIZE || cbsize != CBSIZE) TEST_ERROR; if(H5Pset_alignment(fapl, (hsize_t)THRESHOLD, (hsize_t)FBSIZE) < 0) TEST_ERROR; H5E_BEGIN_TRY { file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl); } H5E_END_TRY; if(file<0) { H5Pclose (fapl); SKIPPED(); printf(" Probably the file system doesn't support Direct I/O\n"); return 0; } /* Retrieve the access property list... */ if ((access_fapl = H5Fget_access_plist(file)) < 0) TEST_ERROR; /* ...and close the property list */ if (H5Pclose(access_fapl) < 0) TEST_ERROR; /* Check file handle API */ if(H5Fget_vfd_handle(file, H5P_DEFAULT, (void **)&fhandle) < 0) TEST_ERROR; if(*fhandle<0) TEST_ERROR; /* Check file size API */ if(H5Fget_filesize(file, &file_size) < 0) TEST_ERROR; /* There is no guarantee of the number of metadata allocations, but it's * 4 currently and the size of the file should be between 3 & 4 file buffer * sizes.. */ if(file_size < (FBSIZE * 3) || file_size >= (FBSIZE * 4)) TEST_ERROR; /* Allocate aligned memory for data set 1. For data set 1, everything is aligned including * memory address, size of data, and file address. */ if(posix_memalign(&points, (size_t)FBSIZE, (size_t)(DSET1_DIM1*DSET1_DIM2*sizeof(int)))!=0) TEST_ERROR; if(posix_memalign(&check, (size_t)FBSIZE, (size_t)(DSET1_DIM1*DSET1_DIM2*sizeof(int)))!=0) TEST_ERROR; /* Initialize the dset1 */ p1 = points; for(i = n = 0; i < DSET1_DIM1; i++) for(j = 0; j < DSET1_DIM2; j++) *p1++ = n++; /* Create the data space1 */ dims1[0] = DSET1_DIM1; dims1[1] = DSET1_DIM2; if((space1 = H5Screate_simple(2, dims1, NULL)) < 0) TEST_ERROR; /* Create the dset1 */ if((dset1 = H5Dcreate2(file, DSET1_NAME, H5T_NATIVE_INT, space1, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR; /* Write the data to the dset1 */ if(H5Dwrite(dset1, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, points) < 0) TEST_ERROR; if(H5Dclose(dset1) < 0) TEST_ERROR; if((dset1 = H5Dopen2(file, DSET1_NAME, H5P_DEFAULT)) < 0) TEST_ERROR; /* Read the data back from dset1 */ if(H5Dread(dset1, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, check) < 0) TEST_ERROR; /* Check that the values read are the same as the values written */ p1 = points; p2 = check; for(i = 0; i < DSET1_DIM1; i++) for(j = 0; j < DSET1_DIM2; j++) if(*p1++ != *p2++) { H5_FAILED(); printf(" Read different values than written in data set 1.\n"); printf(" At index %d,%d\n", i, j); TEST_ERROR; } /* end if */ /* Create the data space2. For data set 2, memory address and data size are not aligned. */ dims2[0] = DSET2_DIM; if((space2 = H5Screate_simple(1, dims2, NULL)) < 0) TEST_ERROR; /* Create the dset2 */ if((dset2 = H5Dcreate2(file, DSET2_NAME, H5T_NATIVE_INT, space2, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR; /* Write the data to the dset1 */ if(H5Dwrite(dset2, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata2) < 0) TEST_ERROR; if(H5Dclose(dset2) < 0) TEST_ERROR; if((dset2 = H5Dopen2(file, DSET2_NAME, H5P_DEFAULT)) < 0) TEST_ERROR; /* Read the data back from dset1 */ if(H5Dread(dset2, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, rdata2) < 0) TEST_ERROR; /* Check that the values read are the same as the values written */ for(i = 0; i < DSET2_DIM; i++) if(wdata2[i] != rdata2[i]) { H5_FAILED(); printf(" Read different values than written in data set 2.\n"); printf(" At index %d\n", i); TEST_ERROR; } /* end if */ if(H5Sclose(space1) < 0) TEST_ERROR; if(H5Dclose(dset1) < 0) TEST_ERROR; if(H5Sclose(space2) < 0) TEST_ERROR; if(H5Dclose(dset2) < 0) TEST_ERROR; if(H5Fclose(file) < 0) TEST_ERROR; if(points) free(points); if(check) free(check); h5_cleanup(FILENAME, fapl); PASSED(); return 0; error: H5E_BEGIN_TRY { H5Pclose (fapl); H5Sclose(space1); H5Dclose(dset1); H5Sclose(space2); H5Dclose(dset2); H5Fclose(file); } H5E_END_TRY; return -1; #endif /*H5_HAVE_DIRECT*/ }
/* * Open a file through the HDF5 interface. */ static void *HDF5_Open(char *testFileName, IOR_param_t * param) { hid_t accessPropList, createPropList; hsize_t memStart[NUM_DIMS], dataSetDims[NUM_DIMS], memStride[NUM_DIMS], memCount[NUM_DIMS], memBlock[NUM_DIMS], memDataSpaceDims[NUM_DIMS]; int tasksPerDataSet; unsigned fd_mode = (unsigned)0; hid_t *fd; MPI_Comm comm; MPI_Info mpiHints = MPI_INFO_NULL; fd = (hid_t *) malloc(sizeof(hid_t)); if (fd == NULL) ERR("malloc() failed"); /* * HDF5 uses different flags than those for POSIX/MPIIO */ if (param->open == WRITE) { /* WRITE flags */ param->openFlags = IOR_TRUNC; } else { /* READ or check WRITE/READ flags */ param->openFlags = IOR_RDONLY; } /* set IOR file flags to HDF5 flags */ /* -- file open flags -- */ if (param->openFlags & IOR_RDONLY) { fd_mode |= H5F_ACC_RDONLY; } if (param->openFlags & IOR_WRONLY) { fprintf(stdout, "File write only not implemented in HDF5\n"); } if (param->openFlags & IOR_RDWR) { fd_mode |= H5F_ACC_RDWR; } if (param->openFlags & IOR_APPEND) { fprintf(stdout, "File append not implemented in HDF5\n"); } if (param->openFlags & IOR_CREAT) { fd_mode |= H5F_ACC_CREAT; } if (param->openFlags & IOR_EXCL) { fd_mode |= H5F_ACC_EXCL; } if (param->openFlags & IOR_TRUNC) { fd_mode |= H5F_ACC_TRUNC; } if (param->openFlags & IOR_DIRECT) { fprintf(stdout, "O_DIRECT not implemented in HDF5\n"); } /* set up file creation property list */ createPropList = H5Pcreate(H5P_FILE_CREATE); HDF5_CHECK(createPropList, "cannot create file creation property list"); /* set size of offset and length used to address HDF5 objects */ HDF5_CHECK(H5Pset_sizes (createPropList, sizeof(hsize_t), sizeof(hsize_t)), "cannot set property list properly"); /* set up file access property list */ accessPropList = H5Pcreate(H5P_FILE_ACCESS); HDF5_CHECK(accessPropList, "cannot create file access property list"); /* * someday HDF5 implementation will allow subsets of MPI_COMM_WORLD */ /* store MPI communicator info for the file access property list */ if (param->filePerProc) { comm = MPI_COMM_SELF; } else { comm = testComm; } SetHints(&mpiHints, param->hintsFileName); /* * note that with MP_HINTS_FILTERED=no, all key/value pairs will * be in the info object. The info object that is attached to * the file during MPI_File_open() will only contain those pairs * deemed valid by the implementation. */ /* show hints passed to file */ if (rank == 0 && param->showHints) { fprintf(stdout, "\nhints passed to access property list {\n"); ShowHints(&mpiHints); fprintf(stdout, "}\n"); } HDF5_CHECK(H5Pset_fapl_mpio(accessPropList, comm, mpiHints), "cannot set file access property list"); /* set alignment */ HDF5_CHECK(H5Pset_alignment(accessPropList, param->setAlignment, param->setAlignment), "cannot set alignment"); /* open file */ if (param->open == WRITE) { /* WRITE */ *fd = H5Fcreate(testFileName, fd_mode, createPropList, accessPropList); HDF5_CHECK(*fd, "cannot create file"); } else { /* READ or CHECK */ *fd = H5Fopen(testFileName, fd_mode, accessPropList); HDF5_CHECK(*fd, "cannot open file"); } /* show hints actually attached to file handle */ if (param->showHints || (1) /* WEL - this needs fixing */ ) { if (rank == 0 && (param->showHints) /* WEL - this needs fixing */ ) { WARN("showHints not working for HDF5"); } } else { MPI_Info mpiHintsCheck = MPI_INFO_NULL; hid_t apl; apl = H5Fget_access_plist(*fd); HDF5_CHECK(H5Pget_fapl_mpio(apl, &comm, &mpiHintsCheck), "cannot get info object through HDF5"); if (rank == 0) { fprintf(stdout, "\nhints returned from opened file (HDF5) {\n"); ShowHints(&mpiHintsCheck); fprintf(stdout, "}\n"); if (1 == 1) { /* request the MPIIO file handle and its hints */ MPI_File *fd_mpiio; HDF5_CHECK(H5Fget_vfd_handle (*fd, apl, (void **)&fd_mpiio), "cannot get MPIIO file handle"); MPI_CHECK(MPI_File_get_info (*fd_mpiio, &mpiHintsCheck), "cannot get info object through MPIIO"); fprintf(stdout, "\nhints returned from opened file (MPIIO) {\n"); ShowHints(&mpiHintsCheck); fprintf(stdout, "}\n"); } } MPI_CHECK(MPI_Barrier(testComm), "barrier error"); } /* this is necessary for resetting various parameters needed for reopening and checking the file */ newlyOpenedFile = TRUE; HDF5_CHECK(H5Pclose(createPropList), "cannot close creation property list"); HDF5_CHECK(H5Pclose(accessPropList), "cannot close access property list"); /* create property list for serial/parallel access */ xferPropList = H5Pcreate(H5P_DATASET_XFER); HDF5_CHECK(xferPropList, "cannot create transfer property list"); /* set data transfer mode */ if (param->collective) { HDF5_CHECK(H5Pset_dxpl_mpio(xferPropList, H5FD_MPIO_COLLECTIVE), "cannot set collective data transfer mode"); } else { HDF5_CHECK(H5Pset_dxpl_mpio (xferPropList, H5FD_MPIO_INDEPENDENT), "cannot set independent data transfer mode"); } /* set up memory data space for transfer */ memStart[0] = (hsize_t) 0; memCount[0] = (hsize_t) 1; memStride[0] = (hsize_t) (param->transferSize / sizeof(IOR_size_t)); memBlock[0] = (hsize_t) (param->transferSize / sizeof(IOR_size_t)); memDataSpaceDims[0] = (hsize_t) param->transferSize; memDataSpace = H5Screate_simple(NUM_DIMS, memDataSpaceDims, NULL); HDF5_CHECK(memDataSpace, "cannot create simple memory data space"); /* define hyperslab for memory data space */ HDF5_CHECK(H5Sselect_hyperslab(memDataSpace, H5S_SELECT_SET, memStart, memStride, memCount, memBlock), "cannot create hyperslab"); /* set up parameters for fpp or different dataset count */ if (param->filePerProc) { tasksPerDataSet = 1; } else { if (param->individualDataSets) { /* each task in segment has single data set */ tasksPerDataSet = 1; } else { /* share single data set across all tasks in segment */ tasksPerDataSet = param->numTasks; } } dataSetDims[0] = (hsize_t) ((param->blockSize / sizeof(IOR_size_t)) * tasksPerDataSet); /* create a simple data space containing information on size and shape of data set, and open it for access */ dataSpace = H5Screate_simple(NUM_DIMS, dataSetDims, NULL); HDF5_CHECK(dataSpace, "cannot create simple data space"); return (fd); }
hid_t seissol::checkpoint::h5::Wavefield::initFile(int odd, const char* filename) { hid_t h5file; if (loaded()) { // Open the old file h5file = open(filename, false); checkH5Err(h5file); // Time m_h5time[odd] = H5Aopen(h5file, "time", H5P_DEFAULT); checkH5Err(m_h5time[odd]); // Wavefield writer m_h5timestepWavefield[odd] = H5Aopen(h5file, "timestep_wavefield", H5P_DEFAULT); checkH5Err(m_h5timestepWavefield[odd]); // Data m_h5data[odd] = H5Dopen(h5file, "values", H5P_DEFAULT); checkH5Err(m_h5data[odd]); } else { // Create the file hid_t h5plist = H5Pcreate(H5P_FILE_ACCESS); checkH5Err(h5plist); checkH5Err(H5Pset_libver_bounds(h5plist, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST)); hsize_t align = utils::Env::get<hsize_t>("SEISSOL_CHECKPOINT_ALIGNMENT", 0); if (align > 0) checkH5Err(H5Pset_alignment(h5plist, 1, align)); #ifdef USE_MPI MPIInfo info; checkH5Err(H5Pset_fapl_mpio(h5plist, seissol::MPI::mpi.comm(), info.get())); #endif // USE_MPI h5file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, h5plist); checkH5Err(h5file); checkH5Err(H5Pclose(h5plist)); // Create scalar dataspace for attributes hid_t h5spaceScalar = H5Screate(H5S_SCALAR); checkH5Err(h5spaceScalar); // Time m_h5time[odd] = H5Acreate(h5file, "time", H5T_IEEE_F64LE, h5spaceScalar, H5P_DEFAULT, H5P_DEFAULT); checkH5Err(m_h5time[odd]); // Partitions hid_t h5partitions = H5Acreate(h5file, "partitions", H5T_STD_I32LE, h5spaceScalar, H5P_DEFAULT, H5P_DEFAULT); checkH5Err(h5partitions); int p = partitions(); checkH5Err(H5Awrite(h5partitions, H5T_NATIVE_INT, &p)); checkH5Err(H5Aclose(h5partitions)); // Wavefield writer m_h5timestepWavefield[odd] = H5Acreate(h5file, "timestep_wavefield", H5T_STD_I32LE, h5spaceScalar, H5P_DEFAULT, H5P_DEFAULT); checkH5Err(m_h5timestepWavefield[odd]); int t = 0; checkH5Err(H5Awrite(m_h5timestepWavefield[odd], H5T_NATIVE_INT, &t)); checkH5Err(H5Sclose(h5spaceScalar)); // Variable h5plist = H5Pcreate(H5P_DATASET_CREATE); checkH5Err(h5plist); checkH5Err(H5Pset_layout(h5plist, H5D_CONTIGUOUS)); checkH5Err(H5Pset_alloc_time(h5plist, H5D_ALLOC_TIME_EARLY)); m_h5data[odd] = H5Dcreate(h5file, "values", H5T_IEEE_F64LE, m_h5fSpaceData, H5P_DEFAULT, h5plist, H5P_DEFAULT); checkH5Err(m_h5data[odd]); checkH5Err(H5Pclose(h5plist)); } return h5file; }
void _io_write_prim_h5mpi(const char *fname, const char **pnames, const double *data) // ----------------------------------------------------------------------------- // This function uses a collective MPI-IO procedure to write the contents of // 'data' to the HDF5 file named 'fname', which is assumed to have been created // already. The dataset with name 'dname', which is being written to, must not // exist already. Chunking is enabled as per the module-wide ChunkSize variable, // and is disabled by default. Recommended chunk size is local subdomain // size. This will result in optimized read/write on the same decomposition // layout, but poor performance for different access patterns, for example the // slabs used by cluster-FFT functions. // // WARNING! // // All processors must define the same chunk size, the behavior of this function // is not defined otherwise. This implies that chunking should be disabled when // running on a strange number of cores, and subdomain sizes are non-uniform. // ----------------------------------------------------------------------------- { hsize_t ndp1 = n_dims + 1; hsize_t *a_nint = (hsize_t*) malloc(ndp1*sizeof(hsize_t)); hsize_t *l_ntot = (hsize_t*) malloc(ndp1*sizeof(hsize_t)); hsize_t *l_strt = (hsize_t*) malloc(ndp1*sizeof(hsize_t)); hsize_t *stride = (hsize_t*) malloc(ndp1*sizeof(hsize_t)); int i; for (i=0; i<n_dims; ++i) { a_nint[i] = A_nint[i]; // Selection size, target and destination l_ntot[i] = L_ntot[i]; // Memory space total size l_strt[i] = L_strt[i]; // Memory space selection start stride[i] = 1; } a_nint[ndp1 - 1] = 1; l_ntot[ndp1 - 1] = n_prim; stride[ndp1 - 1] = n_prim; // Here we create the following property lists: // // file access property list ........ for the call to H5Fopen // dset creation property list ........ for the call to H5Dcreate // dset transfer property list ........ for the call to H5Dwrite // --------------------------------------------------------------------------- hid_t fapl = H5Pcreate(H5P_FILE_ACCESS); hid_t dcpl = H5Pcreate(H5P_DATASET_CREATE); hid_t dxpl = H5Pcreate(H5P_DATASET_XFER); // Here we define collective (MPI) access to the file with alignment // properties optimized for the local file system, according to DiskBlockSize. // --------------------------------------------------------------------------- if (EnableChunking) { H5Pset_chunk(dcpl, n_dims, ChunkSize); } if (EnableAlignment) { H5Pset_alignment(fapl, AlignThreshold, DiskBlockSize); } H5Pset_fapl_mpio(fapl, MPI_COMM_WORLD, MPI_INFO_NULL); H5Pset_dxpl_mpio(dxpl, H5FD_MPIO_COLLECTIVE); hid_t file = H5Fopen(fname, H5F_ACC_RDWR, fapl); const int overwrite = H5Lexists(file, "prim", H5P_DEFAULT); hid_t prim = overwrite ? H5Gopen(file, "prim", H5P_DEFAULT) : H5Gcreate(file, "prim", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); hid_t mspc = H5Screate_simple(ndp1 , l_ntot, NULL); hid_t fspc = H5Screate_simple(n_dims, G_ntot, NULL); // Call signature to H5Sselect_hyperslab is (start, stride, count, chunk) // --------------------------------------------------------------------------- const clock_t start_all = clock(); for (i=0; i<n_prim; ++i) { hid_t dset = overwrite ? H5Dopen(prim, pnames[i], H5P_DEFAULT) : H5Dcreate(prim, pnames[i], H5T_NATIVE_DOUBLE, fspc, H5P_DEFAULT, dcpl, H5P_DEFAULT); l_strt[ndp1 - 1] = i; H5Sselect_hyperslab(mspc, H5S_SELECT_SET, l_strt, stride, a_nint, NULL); H5Sselect_hyperslab(fspc, H5S_SELECT_SET, G_strt, NULL, A_nint, NULL); H5Dwrite(dset, H5T_NATIVE_DOUBLE, mspc, fspc, dxpl, data); H5Dclose(dset); } if (iolog) { const double sec = (double)(clock() - start_all) / CLOCKS_PER_SEC; fprintf(iolog, "[h5mpi] write to %s took %f minutes\n", fname, sec/60.0); fflush(iolog); } free(a_nint); free(l_ntot); free(l_strt); // Always close the hid_t handles in the reverse order they were opened in. // --------------------------------------------------------------------------- H5Sclose(fspc); H5Sclose(mspc); H5Gclose(prim); H5Fclose(file); H5Pclose(dxpl); H5Pclose(dcpl); H5Pclose(fapl); }
void _io_read_prim_h5mpi(const char *fname, const char **pnames, double *data) { hsize_t ndp1 = n_dims + 1; hsize_t *a_nint = (hsize_t*) malloc(ndp1*sizeof(hsize_t)); hsize_t *l_ntot = (hsize_t*) malloc(ndp1*sizeof(hsize_t)); hsize_t *l_strt = (hsize_t*) malloc(ndp1*sizeof(hsize_t)); hsize_t *stride = (hsize_t*) malloc(ndp1*sizeof(hsize_t)); int i; for (i=0; i<n_dims; ++i) { a_nint[i] = A_nint[i]; // Selection size, target and destination l_ntot[i] = L_ntot[i]; // Memory space total size l_strt[i] = L_strt[i]; // Memory space selection start stride[i] = 1; } a_nint[ndp1 - 1] = 1; l_ntot[ndp1 - 1] = n_prim; stride[ndp1 - 1] = n_prim; // Here we create the following property lists: // // file access property list ........ for the call to H5Fopen // dset transfer property list ........ for the call to H5Dread // --------------------------------------------------------------------------- hid_t fapl = H5Pcreate(H5P_FILE_ACCESS); hid_t dxpl = H5Pcreate(H5P_DATASET_XFER); // Here we define collective (MPI) access to the file with alignment // properties optimized for the local file system, according to DiskBlockSize. // --------------------------------------------------------------------------- H5Pset_alignment(fapl, AlignThreshold, DiskBlockSize); H5Pset_fapl_mpio(fapl, MPI_COMM_WORLD, MPI_INFO_NULL); H5Pset_dxpl_mpio(dxpl, H5FD_MPIO_COLLECTIVE); hid_t file = H5Fopen(fname, H5F_ACC_RDONLY, fapl); hid_t prim = H5Gopen(file, "prim", H5P_DEFAULT); hid_t mspc = H5Screate_simple(ndp1 , l_ntot, NULL); hid_t fspc = H5Screate_simple(n_dims, G_ntot, NULL); // Call signature to H5Sselect_hyperslab is (start, stride, count, chunk) // --------------------------------------------------------------------------- const clock_t start_all = clock(); for (i=0; i<n_prim; ++i) { hid_t dset = H5Dopen(prim, pnames[i], H5P_DEFAULT); l_strt[ndp1 - 1] = i; H5Sselect_hyperslab(mspc, H5S_SELECT_SET, l_strt, stride, a_nint, NULL); H5Sselect_hyperslab(fspc, H5S_SELECT_SET, G_strt, NULL, A_nint, NULL); H5Dread(dset, H5T_NATIVE_DOUBLE, mspc, fspc, dxpl, data); H5Dclose(dset); } if (iolog) { const double sec = (double)(clock() - start_all) / CLOCKS_PER_SEC; fprintf(iolog, "[h5mpi] read from %s took %f minutes\n", fname, sec/60.0); fflush(iolog); } free(a_nint); free(l_ntot); free(l_strt); // Always close the hid_t handles in the reverse order they were opened in. // --------------------------------------------------------------------------- H5Sclose(fspc); H5Sclose(mspc); H5Gclose(prim); H5Fclose(file); H5Pclose(dxpl); H5Pclose(fapl); }
int main(void) { hid_t dcpl1; /* dataset create prop. list */ hid_t dapl1; /* dataset access prop. list */ hid_t dxpl1; /* dataset xfer prop. list */ hid_t gcpl1; /* group create prop. list */ hid_t ocpypl1; /* object copy prop. list */ hid_t ocpl1; /* object create prop. list */ hid_t lcpl1; /* link create prop. list */ hid_t lapl1; /* link access prop. list */ hid_t fapl1; /* file access prop. list */ hid_t fcpl1; /* file create prop. list */ hid_t strcpl1; /* string create prop. list */ hid_t acpl1; /* attribute create prop. list */ herr_t ret = 0; hsize_t chunk_size = 16384; /* chunk size */ int fill = 2; /* Fill value */ hsize_t max_size[1]; /* data space maximum size */ size_t nslots = 521 * 2; size_t nbytes = 1048576 * 10; double w0 = 0.5f; unsigned max_compact; unsigned min_dense; const char* c_to_f = "x+32"; int little_endian; int word_length; H5AC_cache_config_t my_cache_config = { H5AC__CURR_CACHE_CONFIG_VERSION, 1 /*TRUE*/, 0 /*FALSE*/, 0 /*FALSE*/, "temp", 1 /*TRUE*/, 0 /*FALSE*/, ( 2 * 2048 * 1024), 0.3f, (64 * 1024 * 1024), (4 * 1024 * 1024), 60000, H5C_incr__threshold, 0.8f, 3.0f, 1 /*TRUE*/, (8 * 1024 * 1024), H5C_flash_incr__add_space, 2.0f, 0.25f, H5C_decr__age_out_with_threshold, 0.997f, 0.8f, 1 /*TRUE*/, (3 * 1024 * 1024), 3, 0 /*FALSE*/, 0.2f, (256 * 2048), H5AC_METADATA_WRITE_STRATEGY__PROCESS_0_ONLY}; H5AC_cache_image_config_t my_cache_image_config = { H5AC__CURR_CACHE_IMAGE_CONFIG_VERSION, TRUE, FALSE, -1}; /* check endianess */ { short int word = 0x0001; char *byte = (char *) &word; if(byte[0] == 1) /* little endian */ little_endian = 1; else /* big endian */ little_endian = 0; } /* check word length */ { word_length = 8 * sizeof(void *); } /* Explicitly initialize the library, since we are including the private header file */ H5open(); /******* ENCODE/DECODE DCPLS *****/ if((dcpl1 = H5Pcreate(H5P_DATASET_CREATE)) < 0) assert(dcpl1 > 0); if((ret = encode_plist(dcpl1, little_endian, word_length, "testfiles/plist_files/def_dcpl_")) < 0) assert(ret > 0); if((ret = H5Pset_chunk(dcpl1, 1, &chunk_size)) < 0) assert(ret > 0); if((ret = H5Pset_alloc_time(dcpl1, H5D_ALLOC_TIME_LATE)) < 0) assert(ret > 0); ret = H5Tconvert(H5T_NATIVE_INT, H5T_STD_I32BE, (size_t)1, &fill, NULL, H5P_DEFAULT); assert(ret >= 0); if((ret = H5Pset_fill_value(dcpl1, H5T_STD_I32BE, &fill)) < 0) assert(ret > 0); max_size[0] = 100; if((ret = H5Pset_external(dcpl1, "ext1.data", (off_t)0, (hsize_t)(max_size[0] * sizeof(int)/4))) < 0) assert(ret > 0); if((ret = H5Pset_external(dcpl1, "ext2.data", (off_t)0, (hsize_t)(max_size[0] * sizeof(int)/4))) < 0) assert(ret > 0); if((ret = H5Pset_external(dcpl1, "ext3.data", (off_t)0, (hsize_t)(max_size[0] * sizeof(int)/4))) < 0) assert(ret > 0); if((ret = H5Pset_external(dcpl1, "ext4.data", (off_t)0, (hsize_t)(max_size[0] * sizeof(int)/4))) < 0) assert(ret > 0); if((ret = encode_plist(dcpl1, little_endian, word_length, "testfiles/plist_files/dcpl_")) < 0) assert(ret > 0); /* release resource */ if((ret = H5Pclose(dcpl1)) < 0) assert(ret > 0); /******* ENCODE/DECODE DAPLS *****/ if((dapl1 = H5Pcreate(H5P_DATASET_ACCESS)) < 0) assert(dapl1 > 0); if((ret = encode_plist(dapl1, little_endian, word_length, "testfiles/plist_files/def_dapl_")) < 0) assert(ret > 0); if((ret = H5Pset_chunk_cache(dapl1, nslots, nbytes, w0)) < 0) assert(ret > 0); if((ret = encode_plist(dapl1, little_endian, word_length, "testfiles/plist_files/dapl_")) < 0) assert(ret > 0); /* release resource */ if((ret = H5Pclose(dapl1)) < 0) assert(ret > 0); /******* ENCODE/DECODE DXPLS *****/ if((dxpl1 = H5Pcreate(H5P_DATASET_XFER)) < 0) assert(dxpl1 > 0); if((ret = encode_plist(dxpl1, little_endian, word_length, "testfiles/plist_files/def_dxpl_")) < 0) assert(ret > 0); if((ret = H5Pset_btree_ratios(dxpl1, 0.2f, 0.6f, 0.2f)) < 0) assert(ret > 0); if((ret = H5Pset_hyper_vector_size(dxpl1, 5)) < 0) assert(ret > 0); #ifdef H5_HAVE_PARALLEL if((ret = H5Pset_dxpl_mpio(dxpl1, H5FD_MPIO_COLLECTIVE)) < 0) assert(ret > 0); if((ret = H5Pset_dxpl_mpio_collective_opt(dxpl1, H5FD_MPIO_INDIVIDUAL_IO)) < 0) assert(ret > 0); if((ret = H5Pset_dxpl_mpio_chunk_opt(dxpl1, H5FD_MPIO_CHUNK_MULTI_IO)) < 0) assert(ret > 0); if((ret = H5Pset_dxpl_mpio_chunk_opt_ratio(dxpl1, 30)) < 0) assert(ret > 0); if((ret = H5Pset_dxpl_mpio_chunk_opt_num(dxpl1, 40)) < 0) assert(ret > 0); #endif/* H5_HAVE_PARALLEL */ if((ret = H5Pset_edc_check(dxpl1, H5Z_DISABLE_EDC)) < 0) assert(ret > 0); if((ret = H5Pset_data_transform(dxpl1, c_to_f)) < 0) assert(ret > 0); if((ret = encode_plist(dxpl1, little_endian, word_length, "testfiles/plist_files/dxpl_")) < 0) assert(ret > 0); /* release resource */ if((ret = H5Pclose(dxpl1)) < 0) assert(ret > 0); /******* ENCODE/DECODE GCPLS *****/ if((gcpl1 = H5Pcreate(H5P_GROUP_CREATE)) < 0) assert(gcpl1 > 0); if((ret = encode_plist(gcpl1, little_endian, word_length, "testfiles/plist_files/def_gcpl_")) < 0) assert(ret > 0); if((ret = H5Pset_local_heap_size_hint(gcpl1, 256)) < 0) assert(ret > 0); if((ret = H5Pset_link_phase_change(gcpl1, 2, 2)) < 0) assert(ret > 0); /* Query the group creation properties */ if((ret = H5Pget_link_phase_change(gcpl1, &max_compact, &min_dense)) < 0) assert(ret > 0); if((ret = H5Pset_est_link_info(gcpl1, 3, 9)) < 0) assert(ret > 0); if((ret = H5Pset_link_creation_order(gcpl1, (H5P_CRT_ORDER_TRACKED | H5P_CRT_ORDER_INDEXED))) < 0) assert(ret > 0); if((ret = encode_plist(gcpl1, little_endian, word_length, "testfiles/plist_files/gcpl_")) < 0) assert(ret > 0); /* release resource */ if((ret = H5Pclose(gcpl1)) < 0) assert(ret > 0); /******* ENCODE/DECODE LCPLS *****/ if((lcpl1 = H5Pcreate(H5P_LINK_CREATE)) < 0) assert(lcpl1 > 0); if((ret = encode_plist(lcpl1, little_endian, word_length, "testfiles/plist_files/def_lcpl_")) < 0) assert(ret > 0); if((ret = H5Pset_create_intermediate_group(lcpl1, 1 /*TRUE*/)) < 0) assert(ret > 0); if((ret = encode_plist(lcpl1, little_endian, word_length, "testfiles/plist_files/lcpl_")) < 0) assert(ret > 0); /* release resource */ if((ret = H5Pclose(lcpl1)) < 0) assert(ret > 0); /******* ENCODE/DECODE OCPYLS *****/ if((ocpypl1 = H5Pcreate(H5P_OBJECT_COPY)) < 0) assert(ocpypl1 > 0); if((ret = encode_plist(ocpypl1, little_endian, word_length, "testfiles/plist_files/def_ocpypl_")) < 0) assert(ret > 0); ret = H5Pset_copy_object(ocpypl1, H5O_COPY_EXPAND_EXT_LINK_FLAG); assert(ret >= 0); ret = H5Padd_merge_committed_dtype_path(ocpypl1, "foo"); assert(ret >= 0); ret = H5Padd_merge_committed_dtype_path(ocpypl1, "bar"); assert(ret >= 0); if((ret = encode_plist(ocpypl1, little_endian, word_length, "testfiles/plist_files/ocpypl_")) < 0) assert(ret > 0); /* release resource */ if((ret = H5Pclose(ocpypl1)) < 0) assert(ret > 0); /******* ENCODE/DECODE OCPLS *****/ if((ocpl1 = H5Pcreate(H5P_OBJECT_CREATE)) < 0) assert(ocpl1 > 0); if((ret = encode_plist(ocpl1, little_endian, word_length, "testfiles/plist_files/def_ocpl_")) < 0) assert(ret > 0); if((ret = H5Pset_attr_creation_order(ocpl1, (H5P_CRT_ORDER_TRACKED | H5P_CRT_ORDER_INDEXED))) < 0) assert(ret > 0); if((ret = H5Pset_attr_phase_change (ocpl1, 110, 105)) < 0) assert(ret > 0); if((ret = H5Pset_filter (ocpl1, H5Z_FILTER_FLETCHER32, 0, (size_t)0, NULL)) < 0) assert(ret > 0); if((ret = encode_plist(ocpl1, little_endian, word_length, "testfiles/plist_files/ocpl_")) < 0) assert(ret > 0); /* release resource */ if((ret = H5Pclose(ocpl1)) < 0) assert(ret > 0); /******* ENCODE/DECODE LAPLS *****/ if((lapl1 = H5Pcreate(H5P_LINK_ACCESS)) < 0) assert(lapl1 > 0); if((ret = encode_plist(lapl1, little_endian, word_length, "testfiles/plist_files/def_lapl_")) < 0) assert(ret > 0); if((ret = H5Pset_nlinks(lapl1, (size_t)134)) < 0) assert(ret > 0); if((ret = H5Pset_elink_acc_flags(lapl1, H5F_ACC_RDONLY)) < 0) assert(ret > 0); if((ret = H5Pset_elink_prefix(lapl1, "/tmpasodiasod")) < 0) assert(ret > 0); /* Create FAPL for the elink FAPL */ if((fapl1 = H5Pcreate(H5P_FILE_ACCESS)) < 0) assert(fapl1 > 0); if((ret = H5Pset_alignment(fapl1, 2, 1024)) < 0) assert(ret > 0); if((ret = H5Pset_elink_fapl(lapl1, fapl1)) < 0) assert(ret > 0); /* Close the elink's FAPL */ if((ret = H5Pclose(fapl1)) < 0) assert(ret > 0); if((ret = encode_plist(lapl1, little_endian, word_length, "testfiles/plist_files/lapl_")) < 0) assert(ret > 0); /* release resource */ if((ret = H5Pclose(lapl1)) < 0) assert(ret > 0); /******* ENCODE/DECODE FAPLS *****/ if((fapl1 = H5Pcreate(H5P_FILE_ACCESS)) < 0) assert(fapl1 > 0); if((ret = encode_plist(fapl1, little_endian, word_length, "testfiles/plist_files/def_fapl_")) < 0) assert(ret > 0); if((ret = H5Pset_family_offset(fapl1, 1024)) < 0) assert(ret > 0); if((ret = H5Pset_meta_block_size(fapl1, 2098452)) < 0) assert(ret > 0); if((ret = H5Pset_sieve_buf_size(fapl1, 1048576)) < 0) assert(ret > 0); if((ret = H5Pset_alignment(fapl1, 2, 1024)) < 0) assert(ret > 0); if((ret = H5Pset_cache(fapl1, 1024, 128, 10485760, 0.3f)) < 0) assert(ret > 0); if((ret = H5Pset_elink_file_cache_size(fapl1, 10485760)) < 0) assert(ret > 0); if((ret = H5Pset_gc_references(fapl1, 1)) < 0) assert(ret > 0); if((ret = H5Pset_small_data_block_size(fapl1, 2048)) < 0) assert(ret > 0); if((ret = H5Pset_libver_bounds(fapl1, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST)) < 0) assert(ret > 0); if((ret = H5Pset_fclose_degree(fapl1, H5F_CLOSE_WEAK)) < 0) assert(ret > 0); if((ret = H5Pset_multi_type(fapl1, H5FD_MEM_GHEAP)) < 0) assert(ret > 0); if((ret = H5Pset_mdc_config(fapl1, &my_cache_config)) < 0) assert(ret > 0); if((ret = H5Pset_mdc_image_config(fapl1, &my_cache_image_config)) < 0) assert(ret > 0); if((ret = H5Pset_core_write_tracking(fapl1, TRUE, (size_t)(1024 * 1024))) < 0) assert(ret > 0); if((ret = encode_plist(fapl1, little_endian, word_length, "testfiles/plist_files/fapl_")) < 0) assert(ret > 0); /* release resource */ if((ret = H5Pclose(fapl1)) < 0) assert(ret > 0); /******* ENCODE/DECODE FCPLS *****/ if((fcpl1 = H5Pcreate(H5P_FILE_CREATE)) < 0) assert(fcpl1 > 0); if((ret = encode_plist(fcpl1, little_endian, word_length, "testfiles/plist_files/def_fcpl_")) < 0) assert(ret > 0); if((ret = H5Pset_userblock(fcpl1, 1024) < 0)) assert(ret > 0); if((ret = H5Pset_istore_k(fcpl1, 3) < 0)) assert(ret > 0); if((ret = H5Pset_sym_k(fcpl1, 4, 5) < 0)) assert(ret > 0); if((ret = H5Pset_shared_mesg_nindexes(fcpl1, 8) < 0)) assert(ret > 0); if((ret = H5Pset_shared_mesg_index(fcpl1, 1, H5O_SHMESG_SDSPACE_FLAG, 32) < 0)) assert(ret > 0); if((ret = H5Pset_shared_mesg_phase_change(fcpl1, 60, 20) < 0)) assert(ret > 0); if((ret = H5Pset_sizes(fcpl1, 8, 4) < 0)) assert(ret > 0); if((ret = H5Pset_file_space_strategy(fcpl1, H5F_FSPACE_STRATEGY_PAGE, TRUE, (hsize_t)1)) < 0) assert(ret > 0); if((ret = H5Pset_file_space_page_size(fcpl1, (hsize_t)4096)) < 0) assert(ret > 0); if((ret = encode_plist(fcpl1, little_endian, word_length, "testfiles/plist_files/fcpl_")) < 0) assert(ret > 0); /* release resource */ if((ret = H5Pclose(fcpl1)) < 0) assert(ret > 0); /******* ENCODE/DECODE STRCPLS *****/ strcpl1 = H5Pcreate(H5P_STRING_CREATE); assert(strcpl1 > 0); ret = encode_plist(strcpl1, little_endian, word_length, "testfiles/plist_files/def_strcpl_"); assert(ret > 0); ret = H5Pset_char_encoding(strcpl1, H5T_CSET_UTF8); assert(ret >= 0); ret = encode_plist(strcpl1, little_endian, word_length, "testfiles/plist_files/strcpl_"); assert(ret > 0); /* release resource */ ret = H5Pclose(strcpl1); assert(ret >= 0); /******* ENCODE/DECODE ACPLS *****/ acpl1 = H5Pcreate(H5P_ATTRIBUTE_CREATE); assert(acpl1 > 0); ret = encode_plist(acpl1, little_endian, word_length, "testfiles/plist_files/def_acpl_"); assert(ret > 0); ret = H5Pset_char_encoding(acpl1, H5T_CSET_UTF8); assert(ret >= 0); ret = encode_plist(acpl1, little_endian, word_length, "testfiles/plist_files/acpl_"); assert(ret > 0); /* release resource */ ret = H5Pclose(acpl1); assert(ret >= 0); return 0; }
void test_plist_ed(void) { hid_t dcpl; /* dataset create prop. list */ hid_t dapl; /* dataset access prop. list */ hid_t dxpl; /* dataset transfer prop. list */ hid_t gcpl; /* group create prop. list */ hid_t lcpl; /* link create prop. list */ hid_t lapl; /* link access prop. list */ hid_t ocpypl; /* object copy prop. list */ hid_t ocpl; /* object create prop. list */ hid_t fapl; /* file access prop. list */ hid_t fcpl; /* file create prop. list */ hid_t strcpl; /* string create prop. list */ hid_t acpl; /* attribute create prop. list */ int mpi_size, mpi_rank, recv_proc; hsize_t chunk_size = 16384; /* chunk size */ double fill = 2.7f; /* Fill value */ size_t nslots = 521*2; size_t nbytes = 1048576 * 10; double w0 = 0.5f; unsigned max_compact; unsigned min_dense; hsize_t max_size[1]; /*data space maximum size */ const char* c_to_f = "x+32"; H5AC_cache_config_t my_cache_config = { H5AC__CURR_CACHE_CONFIG_VERSION, TRUE, FALSE, FALSE, "temp", TRUE, FALSE, ( 2 * 2048 * 1024), 0.3f, (64 * 1024 * 1024), (4 * 1024 * 1024), 60000, H5C_incr__threshold, 0.8f, 3.0f, TRUE, (8 * 1024 * 1024), H5C_flash_incr__add_space, 2.0f, 0.25f, H5C_decr__age_out_with_threshold, 0.997f, 0.8f, TRUE, (3 * 1024 * 1024), 3, FALSE, 0.2f, (256 * 2048), H5AC__DEFAULT_METADATA_WRITE_STRATEGY}; herr_t ret; /* Generic return value */ if(VERBOSE_MED) printf("Encode/Decode DCPLs\n"); /* set up MPI parameters */ MPI_Comm_size(MPI_COMM_WORLD, &mpi_size); MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank); if(mpi_size == 1) recv_proc = 0; else recv_proc = 1; dcpl = H5Pcreate(H5P_DATASET_CREATE); VRFY((dcpl >= 0), "H5Pcreate succeeded"); ret = H5Pset_chunk(dcpl, 1, &chunk_size); VRFY((ret >= 0), "H5Pset_chunk succeeded"); ret = H5Pset_alloc_time(dcpl, H5D_ALLOC_TIME_LATE); VRFY((ret >= 0), "H5Pset_alloc_time succeeded"); ret = H5Pset_fill_value(dcpl, H5T_NATIVE_DOUBLE, &fill); VRFY((ret>=0), "set fill-value succeeded"); max_size[0] = 100; ret = H5Pset_external(dcpl, "ext1.data", (off_t)0, (hsize_t)(max_size[0] * sizeof(int)/4)); VRFY((ret>=0), "set external succeeded"); ret = H5Pset_external(dcpl, "ext2.data", (off_t)0, (hsize_t)(max_size[0] * sizeof(int)/4)); VRFY((ret>=0), "set external succeeded"); ret = H5Pset_external(dcpl, "ext3.data", (off_t)0, (hsize_t)(max_size[0] * sizeof(int)/4)); VRFY((ret>=0), "set external succeeded"); ret = H5Pset_external(dcpl, "ext4.data", (off_t)0, (hsize_t)(max_size[0] * sizeof(int)/4)); VRFY((ret>=0), "set external succeeded"); ret = test_encode_decode(dcpl, mpi_rank, recv_proc); VRFY((ret >= 0), "test_encode_decode succeeded"); ret = H5Pclose(dcpl); VRFY((ret >= 0), "H5Pclose succeeded"); /******* ENCODE/DECODE DAPLS *****/ dapl = H5Pcreate(H5P_DATASET_ACCESS); VRFY((dapl >= 0), "H5Pcreate succeeded"); ret = H5Pset_chunk_cache(dapl, nslots, nbytes, w0); VRFY((ret >= 0), "H5Pset_chunk_cache succeeded"); ret = test_encode_decode(dapl, mpi_rank, recv_proc); VRFY((ret >= 0), "test_encode_decode succeeded"); ret = H5Pclose(dapl); VRFY((ret >= 0), "H5Pclose succeeded"); /******* ENCODE/DECODE OCPLS *****/ ocpl = H5Pcreate(H5P_OBJECT_CREATE); VRFY((ocpl >= 0), "H5Pcreate succeeded"); ret = H5Pset_attr_creation_order(ocpl, (H5P_CRT_ORDER_TRACKED | H5P_CRT_ORDER_INDEXED)); VRFY((ret >= 0), "H5Pset_attr_creation_order succeeded"); ret = H5Pset_attr_phase_change(ocpl, 110, 105); VRFY((ret >= 0), "H5Pset_attr_phase_change succeeded"); ret = H5Pset_filter(ocpl, H5Z_FILTER_FLETCHER32, 0, (size_t)0, NULL); VRFY((ret >= 0), "H5Pset_filter succeeded"); ret = test_encode_decode(ocpl, mpi_rank, recv_proc); VRFY((ret >= 0), "test_encode_decode succeeded"); ret = H5Pclose(ocpl); VRFY((ret >= 0), "H5Pclose succeeded"); /******* ENCODE/DECODE DXPLS *****/ dxpl = H5Pcreate(H5P_DATASET_XFER); VRFY((dxpl >= 0), "H5Pcreate succeeded"); ret = H5Pset_btree_ratios(dxpl, 0.2f, 0.6f, 0.2f); VRFY((ret >= 0), "H5Pset_btree_ratios succeeded"); ret = H5Pset_hyper_vector_size(dxpl, 5); VRFY((ret >= 0), "H5Pset_hyper_vector_size succeeded"); ret = H5Pset_dxpl_mpio(dxpl, H5FD_MPIO_COLLECTIVE); VRFY((ret >= 0), "H5Pset_dxpl_mpio succeeded"); ret = H5Pset_dxpl_mpio_collective_opt(dxpl, H5FD_MPIO_INDIVIDUAL_IO); VRFY((ret >= 0), "H5Pset_dxpl_mpio_collective_opt succeeded"); ret = H5Pset_dxpl_mpio_chunk_opt(dxpl, H5FD_MPIO_CHUNK_MULTI_IO); VRFY((ret >= 0), "H5Pset_dxpl_mpio_chunk_opt succeeded"); ret = H5Pset_dxpl_mpio_chunk_opt_ratio(dxpl, 30); VRFY((ret >= 0), "H5Pset_dxpl_mpio_chunk_opt_ratio succeeded"); ret = H5Pset_dxpl_mpio_chunk_opt_num(dxpl, 40); VRFY((ret >= 0), "H5Pset_dxpl_mpio_chunk_opt_num succeeded"); ret = H5Pset_edc_check(dxpl, H5Z_DISABLE_EDC); VRFY((ret >= 0), "H5Pset_edc_check succeeded"); ret = H5Pset_data_transform(dxpl, c_to_f); VRFY((ret >= 0), "H5Pset_data_transform succeeded"); ret = test_encode_decode(dxpl, mpi_rank, recv_proc); VRFY((ret >= 0), "test_encode_decode succeeded"); ret = H5Pclose(dxpl); VRFY((ret >= 0), "H5Pclose succeeded"); /******* ENCODE/DECODE GCPLS *****/ gcpl = H5Pcreate(H5P_GROUP_CREATE); VRFY((gcpl >= 0), "H5Pcreate succeeded"); ret = H5Pset_local_heap_size_hint(gcpl, 256); VRFY((ret >= 0), "H5Pset_local_heap_size_hint succeeded"); ret = H5Pset_link_phase_change(gcpl, 2, 2); VRFY((ret >= 0), "H5Pset_link_phase_change succeeded"); /* Query the group creation properties */ ret = H5Pget_link_phase_change(gcpl, &max_compact, &min_dense); VRFY((ret >= 0), "H5Pget_est_link_info succeeded"); ret = H5Pset_est_link_info(gcpl, 3, 9); VRFY((ret >= 0), "H5Pset_est_link_info succeeded"); ret = H5Pset_link_creation_order(gcpl, (H5P_CRT_ORDER_TRACKED | H5P_CRT_ORDER_INDEXED)); VRFY((ret >= 0), "H5Pset_link_creation_order succeeded"); ret = test_encode_decode(gcpl, mpi_rank, recv_proc); VRFY((ret >= 0), "test_encode_decode succeeded"); ret = H5Pclose(gcpl); VRFY((ret >= 0), "H5Pclose succeeded"); /******* ENCODE/DECODE LCPLS *****/ lcpl = H5Pcreate(H5P_LINK_CREATE); VRFY((lcpl >= 0), "H5Pcreate succeeded"); ret= H5Pset_create_intermediate_group(lcpl, TRUE); VRFY((ret >= 0), "H5Pset_create_intermediate_group succeeded"); ret = test_encode_decode(lcpl, mpi_rank, recv_proc); VRFY((ret >= 0), "test_encode_decode succeeded"); ret = H5Pclose(lcpl); VRFY((ret >= 0), "H5Pclose succeeded"); /******* ENCODE/DECODE LAPLS *****/ lapl = H5Pcreate(H5P_LINK_ACCESS); VRFY((lapl >= 0), "H5Pcreate succeeded"); ret = H5Pset_nlinks(lapl, (size_t)134); VRFY((ret >= 0), "H5Pset_nlinks succeeded"); ret = H5Pset_elink_acc_flags(lapl, H5F_ACC_RDONLY); VRFY((ret >= 0), "H5Pset_elink_acc_flags succeeded"); ret = H5Pset_elink_prefix(lapl, "/tmpasodiasod"); VRFY((ret >= 0), "H5Pset_nlinks succeeded"); /* Create FAPL for the elink FAPL */ fapl = H5Pcreate(H5P_FILE_ACCESS); VRFY((fapl >= 0), "H5Pcreate succeeded"); ret = H5Pset_alignment(fapl, 2, 1024); VRFY((ret >= 0), "H5Pset_alignment succeeded"); ret = H5Pset_elink_fapl(lapl, fapl); VRFY((ret >= 0), "H5Pset_elink_fapl succeeded"); /* Close the elink's FAPL */ ret = H5Pclose(fapl); VRFY((ret >= 0), "H5Pclose succeeded"); ret = test_encode_decode(lapl, mpi_rank, recv_proc); VRFY((ret >= 0), "test_encode_decode succeeded"); ret = H5Pclose(lapl); VRFY((ret >= 0), "H5Pclose succeeded"); /******* ENCODE/DECODE OCPYPLS *****/ ocpypl = H5Pcreate(H5P_OBJECT_COPY); VRFY((ocpypl >= 0), "H5Pcreate succeeded"); ret = H5Pset_copy_object(ocpypl, H5O_COPY_EXPAND_EXT_LINK_FLAG); VRFY((ret >= 0), "H5Pset_copy_object succeeded"); ret = H5Padd_merge_committed_dtype_path(ocpypl, "foo"); VRFY((ret >= 0), "H5Padd_merge_committed_dtype_path succeeded"); ret = H5Padd_merge_committed_dtype_path(ocpypl, "bar"); VRFY((ret >= 0), "H5Padd_merge_committed_dtype_path succeeded"); ret = test_encode_decode(ocpypl, mpi_rank, recv_proc); VRFY((ret >= 0), "test_encode_decode succeeded"); ret = H5Pclose(ocpypl); VRFY((ret >= 0), "H5Pclose succeeded"); /******* ENCODE/DECODE FAPLS *****/ fapl = H5Pcreate(H5P_FILE_ACCESS); VRFY((fapl >= 0), "H5Pcreate succeeded"); ret = H5Pset_family_offset(fapl, 1024); VRFY((ret >= 0), "H5Pset_family_offset succeeded"); ret = H5Pset_meta_block_size(fapl, 2098452); VRFY((ret >= 0), "H5Pset_meta_block_size succeeded"); ret = H5Pset_sieve_buf_size(fapl, 1048576); VRFY((ret >= 0), "H5Pset_sieve_buf_size succeeded"); ret = H5Pset_alignment(fapl, 2, 1024); VRFY((ret >= 0), "H5Pset_alignment succeeded"); ret = H5Pset_cache(fapl, 1024, 128, 10485760, 0.3f); VRFY((ret >= 0), "H5Pset_cache succeeded"); ret = H5Pset_elink_file_cache_size(fapl, 10485760); VRFY((ret >= 0), "H5Pset_elink_file_cache_size succeeded"); ret = H5Pset_gc_references(fapl, 1); VRFY((ret >= 0), "H5Pset_gc_references succeeded"); ret = H5Pset_small_data_block_size(fapl, 2048); VRFY((ret >= 0), "H5Pset_small_data_block_size succeeded"); ret = H5Pset_libver_bounds(fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST); VRFY((ret >= 0), "H5Pset_libver_bounds succeeded"); ret = H5Pset_fclose_degree(fapl, H5F_CLOSE_WEAK); VRFY((ret >= 0), "H5Pset_fclose_degree succeeded"); ret = H5Pset_multi_type(fapl, H5FD_MEM_GHEAP); VRFY((ret >= 0), "H5Pset_multi_type succeeded"); ret = H5Pset_mdc_config(fapl, &my_cache_config); VRFY((ret >= 0), "H5Pset_mdc_config succeeded"); ret = test_encode_decode(fapl, mpi_rank, recv_proc); VRFY((ret >= 0), "test_encode_decode succeeded"); ret = H5Pclose(fapl); VRFY((ret >= 0), "H5Pclose succeeded"); /******* ENCODE/DECODE FCPLS *****/ fcpl = H5Pcreate(H5P_FILE_CREATE); VRFY((fcpl >= 0), "H5Pcreate succeeded"); ret = H5Pset_userblock(fcpl, 1024); VRFY((ret >= 0), "H5Pset_userblock succeeded"); ret = H5Pset_istore_k(fcpl, 3); VRFY((ret >= 0), "H5Pset_istore_k succeeded"); ret = H5Pset_sym_k(fcpl, 4, 5); VRFY((ret >= 0), "H5Pset_sym_k succeeded"); ret = H5Pset_shared_mesg_nindexes(fcpl, 8); VRFY((ret >= 0), "H5Pset_shared_mesg_nindexes succeeded"); ret = H5Pset_shared_mesg_index(fcpl, 1, H5O_SHMESG_SDSPACE_FLAG, 32); VRFY((ret >= 0), "H5Pset_shared_mesg_index succeeded"); ret = H5Pset_shared_mesg_phase_change(fcpl, 60, 20); VRFY((ret >= 0), "H5Pset_shared_mesg_phase_change succeeded"); ret = H5Pset_sizes(fcpl, 8, 4); VRFY((ret >= 0), "H5Pset_sizes succeeded"); ret = test_encode_decode(fcpl, mpi_rank, recv_proc); VRFY((ret >= 0), "test_encode_decode succeeded"); ret = H5Pclose(fcpl); VRFY((ret >= 0), "H5Pclose succeeded"); /******* ENCODE/DECODE STRCPLS *****/ strcpl = H5Pcreate(H5P_STRING_CREATE); VRFY((strcpl >= 0), "H5Pcreate succeeded"); ret = H5Pset_char_encoding(strcpl, H5T_CSET_UTF8); VRFY((ret >= 0), "H5Pset_char_encoding succeeded"); ret = test_encode_decode(strcpl, mpi_rank, recv_proc); VRFY((ret >= 0), "test_encode_decode succeeded"); ret = H5Pclose(strcpl); VRFY((ret >= 0), "H5Pclose succeeded"); /******* ENCODE/DECODE ACPLS *****/ acpl = H5Pcreate(H5P_ATTRIBUTE_CREATE); VRFY((acpl >= 0), "H5Pcreate succeeded"); ret = H5Pset_char_encoding(acpl, H5T_CSET_UTF8); VRFY((ret >= 0), "H5Pset_char_encoding succeeded"); ret = test_encode_decode(acpl, mpi_rank, recv_proc); VRFY((ret >= 0), "test_encode_decode succeeded"); ret = H5Pclose(acpl); VRFY((ret >= 0), "H5Pclose succeeded"); }