Skip to content
Snippets Groups Projects

HDF5 minimal example

Merged Tobias Meisel requested to merge without_odds into main
1 file
+ 26
21
Compare changes
  • Side-by-side
  • Inline
+ 26
21
@@ -31,11 +31,15 @@ int main(int argc, char** argv)
// Let's create some sample data!
// Even MPI ranks have (100 + rank) integers worth of data, oddballs don't
// have any data.
std::vector<int> v((comm_rank%2 == 0) ? 100+comm_rank : 0, comm_rank);
std::vector<int> v(100 + comm_rank, comm_rank+10);
// The extent of the dataspace in the file can be computed accordingly.
hsize_t size = 100 * (comm_size/2 + comm_size%2)
+ (comm_size-1)/2 * ((comm_size-1)/2+1);
hsize_t size = 100 * (comm_size / 2 + comm_size % 2) +
(comm_size - 1) / 2 * ((comm_size - 1) / 2 + 1);
printf("Size %d", size);
size = comm_size * 100 + (comm_size) * (comm_size - 1) / 2;
printf("Size %d", size);
// Make a dataset!
// I can't believe that takes 10 lines of code :-(
@@ -45,29 +49,30 @@ int main(int argc, char** argv)
hid_t dcpl = H5Pcreate(H5P_DATASET_CREATE);
assert(dcpl >= 0);
assert(H5Pset_chunk(dcpl, 1, &CHUNK_SIZE) >= 0);
hid_t dset = H5Dcreate(file, "1D", H5T_STD_I32LE, fspace,
H5P_DEFAULT, dcpl, H5P_DEFAULT);
hid_t dset = H5Dcreate(file, "1D", H5T_STD_I32LE, fspace, H5P_DEFAULT, dcpl,
H5P_DEFAULT);
assert(dset >= 0);
assert(H5Pclose(dcpl) >= 0);
// Let's get H5Dwriting!
hsize_t offset {0}, one {1}, blk { v.size() };
hsize_t offset{0}, one{1}, blk{v.size()};
hid_t mspace = H5Screate_simple(1, &blk, NULL);
if (comm_rank%2 == 0)
{
assert(H5Sselect_all(mspace) >= 0);
offset = comm_rank/2 * 100 + (comm_rank-1)/2 * ((comm_rank-1)/2+1);
assert(H5Sselect_hyperslab(fspace, H5S_SELECT_SET, &offset, NULL, &one,
&blk) >= 0);
}
else
{
assert(H5Sselect_none(mspace) >= 0);
assert(H5Sselect_none(fspace) >= 0);
}
assert(H5Dwrite(dset, H5T_NATIVE_INT, mspace, fspace, H5P_DEFAULT, v.data())
>= 0);
assert(H5Sselect_all(mspace) >= 0);
offset =
comm_rank / 2 * 100 + (comm_rank - 1) / 2 * ((comm_rank - 1) / 2 + 1);
offset = comm_rank*100+(comm_rank)*(comm_rank-1)/2;
printf("offset %d of rank %d \n", offset, comm_rank);
assert(H5Sselect_hyperslab(fspace, H5S_SELECT_SET, &offset, NULL, &one,
&blk) >= 0);
assert(H5Sselect_none(mspace) >= 0);
assert(H5Sselect_none(fspace) >= 0);
assert(H5Dwrite(dset, H5T_NATIVE_INT, mspace, fspace, H5P_DEFAULT,
v.data()) >= 0);
// Clean house!
assert(H5Sclose(mspace) >= 0);
Loading