Hi Marius,

On Oct 12, 2011, at 2:30 AM, Marius Muja wrote:

> I have a similar problem with H5Dread hanging for collective IO. Each MPI
> process tries to read in a fraction of the dataset. If the dataset size is a
> multiple of the number of processes (each process reads the same amount of
> data) all is fine, otherwise the code below hangs in the H5Dread function.
> 
> Is it required for collective IO for all processes to read the same amount
> of data?

        No, and your code snippet below looks reasonable.  What version of HDF5 
are you using?

        Quincey

> Thanks.
> 
> //------------------- BEGINNING OF SOURCE CODE -------------------- 
> 
>    MPI_Comm comm  = MPI_COMM_WORLD;
>    MPI_Info info  = MPI_INFO_NULL;
> 
>    int mpi_size, mpi_rank;
>    MPI_Comm_size(comm, &mpi_size);
>    MPI_Comm_rank(comm, &mpi_rank);
> 
>    herr_t status;
> 
>    hid_t plist_id = H5Pcreate(H5P_FILE_ACCESS);
>    H5Pset_fapl_mpio(plist_id, comm, info);
>    hid_t file_id = H5Fopen(filename.c_str(), H5F_ACC_RDWR, plist_id);
>    CHECK_ERROR(file_id,"Error opening hdf5 file.");
>    H5Pclose(plist_id);
>    hid_t dataset_id;
> #if H5Dopen_vers == 2
>    dataset_id = H5Dopen2(file_id, name.c_str(), H5P_DEFAULT);
> #else
>    dataset_id = H5Dopen(file_id, name.c_str());
> #endif
>    CHECK_ERROR(dataset_id,"Error opening dataset in file.");
> 
>    hid_t space_id = H5Dget_space(dataset_id);
>    hsize_t dims[2];
>    H5Sget_simple_extent_dims(space_id, dims, NULL);
> 
>    hsize_t count[2];
>    hsize_t offset[2];
> 
>    hsize_t item_cnt = dims[0]/mpi_size+(dims[0]%mpi_size==0 ? 0 : 1);
>    hsize_t cnt = (mpi_rank<mpi_size-1 ? item_cnt :
> dims[0]-item_cnt*(mpi_size-1));
> 
>    count[0] = cnt;
>    count[1] = dims[1];
>    offset[0] = mpi_rank*item_cnt;
>    offset[1] = 0;
> 
>    hid_t memspace_id = H5Screate_simple(2,count,NULL);
> 
>    H5Sselect_hyperslab(space_id, H5S_SELECT_SET, offset, NULL, count,
> NULL);
> 
>    plist_id = H5Pcreate(H5P_DATASET_XFER);
>    H5Pset_dxpl_mpio(plist_id, H5FD_MPIO_COLLECTIVE);
>    status = H5Dread(dataset_id, get_hdf5_type<T>(), memspace_id, space_id,
> plist_id, ptr);
> 
> //------------------- BEGINNING OF SOURCE CODE -------------------- 
> 
> --
> View this message in context: 
> http://hdf-forum.184993.n3.nabble.com/H5Fclose-hangs-when-using-parallel-HDF5-tp3369047p3415023.html
> Sent from the hdf-forum mailing list archive at Nabble.com.
> 
> _______________________________________________
> Hdf-forum is for HDF software users discussion.
> [email protected]
> http://mail.hdfgroup.org/mailman/listinfo/hdf-forum_hdfgroup.org


_______________________________________________
Hdf-forum is for HDF software users discussion.
[email protected]
http://mail.hdfgroup.org/mailman/listinfo/hdf-forum_hdfgroup.org

Reply via email to