Felix,

H5Dcreate is a collective call. ALL processes have to participate in creation 
of each dataset. After datasets are created, data can be written independently 
by each process to a corresponding dataset.

Elena
On Feb 27, 2010, at 4:00 PM, Felix Schmitt wrote:

> Hello,
> 
> I am quite new to HDF5 so this might probably be a beginners question:
> I want to create and access different datasets depending on my mpi rank.
> Accessing parts of one dataset via hyperslabs works perfect, but the 
> following doesn't work:
> I want to write the name of each processor in a different dataset which is 
> named 'attr_processor_[mpi_rank]'. However, it will only create one dataset 
> named 'attr_processor_0'.
> 
>    plist_id = H5Pcreate(H5P_FILE_ACCESS);
>    H5Pset_fapl_mpio(plist_id, mpi_comm, MPI_INFO_NULL);
> 
>    file_id = H5Fcreate("test.h5", H5F_ACC_TRUNC, H5P_DEFAULT,
>      plist_id);
>    H5Pclose(plist_id);
> 
> ... // some hsize_t initializations and so on
> 
>    hid_t procs_dataset_id;
>    hid_t proc_name_t;
> // datatype for processor name
>    proc_name_t = H5Tcopy(H5T_C_S1);
>    H5Tset_size(proc_name_t, MPI_MAX_PROCESSOR_NAME + 1);
> 
>    plist_id = H5Pcreate(H5P_DATASET_XFER);
>    H5Pset_dxpl_mpio(plist_id, H5FD_MPIO_INDEPENDENT);
> 
> // create dataset
>    char *proc_dataset_name = new char[256];
>    hid_t proc_dataset_space = H5Screate(H5S_SCALAR);
> 
>    memset(proc_dataset_name, 0, 256);
>    sprintf(proc_dataset_name, "%s_%d", "attr_processor", mpi_rank);
>    procs_dataset_id = H5Dcreate(group_id, proc_dataset_name, proc_name_t, 
> proc_dataset_space, H5P_DEFAULT);
> 
> // retrieve mpi processor name
>    char *proc_name = new char[MPI_MAX_PROCESSOR_NAME + 1];
>    int result_len = 0;
>    MPI_Get_processor_name(proc_name, &result_len);
>    proc_name[result_len] = 0;
> 
> // write processor name
>    H5Dwrite(procs_dataset_id, proc_name_t, proc_dataset_space, 
> proc_dataset_space, plist_id, proc_name);
> 
> // cleanup
>    H5Dclose(procs_dataset_id);
>    H5Sclose(proc_dataset_space);
>    H5Pclose(plist_id);
>    delete[] proc_dataset_name;
>    delete[] proc_name;
> 
> ... // writing the actual data
> 
> Thanks for replying.
> Felix
> 
> _______________________________________________
> 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