Function ncmpi_get_file_info was first introduced in
PnetCDF version 1.2.0. Check PnetCDF library version, so printing MPI-IO hints can be enabled for NCMPI.master
parent
cdaca2c591
commit
3eb0f86640
|
@ -342,7 +342,7 @@ MPIIO-, HDF5-, AND NCMPI-ONLY:
|
||||||
* collective - uses collective operations for access [0=FALSE]
|
* collective - uses collective operations for access [0=FALSE]
|
||||||
|
|
||||||
* showHints - show hint/value pairs attached to open file [0=FALSE]
|
* showHints - show hint/value pairs attached to open file [0=FALSE]
|
||||||
NOTE: not available in NCMPI
|
NOTE: available in NCMPI only if PnetCDF is 1.2.0 or later
|
||||||
|
|
||||||
LUSTRE-SPECIFIC:
|
LUSTRE-SPECIFIC:
|
||||||
================
|
================
|
||||||
|
|
|
@ -89,7 +89,7 @@ static void *NCMPI_Create(char *testFileName, IOR_param_t * param)
|
||||||
int fd_mode;
|
int fd_mode;
|
||||||
MPI_Info mpiHints = MPI_INFO_NULL;
|
MPI_Info mpiHints = MPI_INFO_NULL;
|
||||||
|
|
||||||
/* Wei-keng Liao: read and set MPI file hints from hintsFile */
|
/* read and set MPI file hints from hintsFile */
|
||||||
SetHints(&mpiHints, param->hintsFileName);
|
SetHints(&mpiHints, param->hintsFileName);
|
||||||
if (rank == 0 && param->showHints) {
|
if (rank == 0 && param->showHints) {
|
||||||
fprintf(stdout, "\nhints passed to MPI_File_open() {\n");
|
fprintf(stdout, "\nhints passed to MPI_File_open() {\n");
|
||||||
|
@ -105,22 +105,23 @@ static void *NCMPI_Create(char *testFileName, IOR_param_t * param)
|
||||||
NCMPI_CHECK(ncmpi_create(testComm, testFileName, fd_mode,
|
NCMPI_CHECK(ncmpi_create(testComm, testFileName, fd_mode,
|
||||||
mpiHints, fd), "cannot create file");
|
mpiHints, fd), "cannot create file");
|
||||||
|
|
||||||
/* Wei-keng Liao: print the MPI file hints currently used */
|
/* free up the mpiHints object */
|
||||||
/* WEL - add when ncmpi_get_file_info() is in current parallel-netcdf release
|
if (mpiHints != MPI_INFO_NULL)
|
||||||
if (rank == 0 && param->showHints) {
|
MPI_CHECK(MPI_Info_free(&mpiHints), "cannot free file info");
|
||||||
MPI_CHECK(ncmpi_get_file_info(*fd, &mpiHints),
|
|
||||||
"cannot get file info");
|
|
||||||
fprintf(stdout, "\nhints returned from opened file {\n");
|
|
||||||
ShowHints(&mpiHints);
|
|
||||||
fprintf(stdout, "}\n");
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Wei-keng Liao: free up the mpiHints object */
|
#if defined(PNETCDF_VERSION_MAJOR) && (PNETCDF_VERSION_MAJOR > 1 || PNETCDF_VERSION_MINOR >= 2)
|
||||||
/* WEL - this needs future fix from next release of PnetCDF
|
/* ncmpi_get_file_info is first available in 1.2.0 */
|
||||||
if (mpiHints != MPI_INFO_NULL)
|
if (rank == 0 && param->showHints) {
|
||||||
MPI_CHECK(MPI_Info_free(&mpiHints), "cannot free file info");
|
MPI_Info info_used;
|
||||||
*/
|
MPI_CHECK(ncmpi_get_file_info(*fd, &info_used),
|
||||||
|
"cannot inquire file info");
|
||||||
|
/* print the MPI file hints currently used */
|
||||||
|
fprintf(stdout, "\nhints returned from opened file {\n");
|
||||||
|
ShowHints(&info_used);
|
||||||
|
fprintf(stdout, "}\n");
|
||||||
|
MPI_CHECK(MPI_Info_free(&info_used), "cannot free file info");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return (fd);
|
return (fd);
|
||||||
}
|
}
|
||||||
|
@ -134,7 +135,7 @@ static void *NCMPI_Open(char *testFileName, IOR_param_t * param)
|
||||||
int fd_mode;
|
int fd_mode;
|
||||||
MPI_Info mpiHints = MPI_INFO_NULL;
|
MPI_Info mpiHints = MPI_INFO_NULL;
|
||||||
|
|
||||||
/* Wei-keng Liao: read and set MPI file hints from hintsFile */
|
/* read and set MPI file hints from hintsFile */
|
||||||
SetHints(&mpiHints, param->hintsFileName);
|
SetHints(&mpiHints, param->hintsFileName);
|
||||||
if (rank == 0 && param->showHints) {
|
if (rank == 0 && param->showHints) {
|
||||||
fprintf(stdout, "\nhints passed to MPI_File_open() {\n");
|
fprintf(stdout, "\nhints passed to MPI_File_open() {\n");
|
||||||
|
@ -150,22 +151,23 @@ static void *NCMPI_Open(char *testFileName, IOR_param_t * param)
|
||||||
NCMPI_CHECK(ncmpi_open(testComm, testFileName, fd_mode,
|
NCMPI_CHECK(ncmpi_open(testComm, testFileName, fd_mode,
|
||||||
mpiHints, fd), "cannot open file");
|
mpiHints, fd), "cannot open file");
|
||||||
|
|
||||||
/* Wei-keng Liao: print the MPI file hints currently used */
|
/* free up the mpiHints object */
|
||||||
/* WEL - add when ncmpi_get_file_info() is in current parallel-netcdf release
|
if (mpiHints != MPI_INFO_NULL)
|
||||||
if (rank == 0 && param->showHints) {
|
MPI_CHECK(MPI_Info_free(&mpiHints), "cannot free file info");
|
||||||
MPI_CHECK(ncmpi_get_file_info(*fd, &mpiHints),
|
|
||||||
"cannot get file info");
|
|
||||||
fprintf(stdout, "\nhints returned from opened file {\n");
|
|
||||||
ShowHints(&mpiHints);
|
|
||||||
fprintf(stdout, "}\n");
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Wei-keng Liao: free up the mpiHints object */
|
#if defined(PNETCDF_VERSION_MAJOR) && (PNETCDF_VERSION_MAJOR > 1 || PNETCDF_VERSION_MINOR >= 2)
|
||||||
/* WEL - this needs future fix from next release of PnetCDF
|
/* ncmpi_get_file_info is first available in 1.2.0 */
|
||||||
if (mpiHints != MPI_INFO_NULL)
|
if (rank == 0 && param->showHints) {
|
||||||
MPI_CHECK(MPI_Info_free(&mpiHints), "cannot free file info");
|
MPI_Info info_used;
|
||||||
*/
|
MPI_CHECK(ncmpi_get_file_info(*fd, &info_used),
|
||||||
|
"cannot inquire file info");
|
||||||
|
/* print the MPI file hints currently used */
|
||||||
|
fprintf(stdout, "\nhints returned from opened file {\n");
|
||||||
|
ShowHints(&info_used);
|
||||||
|
fprintf(stdout, "}\n");
|
||||||
|
MPI_CHECK(MPI_Info_free(&info_used), "cannot free file info");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return (fd);
|
return (fd);
|
||||||
}
|
}
|
||||||
|
@ -183,17 +185,6 @@ static IOR_offset_t NCMPI_Xfer(int access, void *fd, IOR_size_t * buffer,
|
||||||
IOR_offset_t segmentPosition;
|
IOR_offset_t segmentPosition;
|
||||||
int segmentNum, transferNum;
|
int segmentNum, transferNum;
|
||||||
|
|
||||||
/* Wei-keng Liao: In ior.c line 1979 says "block size must be a multiple
|
|
||||||
of transfer size." Hence, length should always == param->transferSize
|
|
||||||
below. I leave it here to double check.
|
|
||||||
*/
|
|
||||||
if (length != param->transferSize) {
|
|
||||||
char errMsg[256];
|
|
||||||
sprintf(errMsg, "length(%lld) != param->transferSize(%lld)\n",
|
|
||||||
length, param->transferSize);
|
|
||||||
NCMPI_CHECK(-1, errMsg);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* determine by offset if need to start data set */
|
/* determine by offset if need to start data set */
|
||||||
if (param->filePerProc == TRUE) {
|
if (param->filePerProc == TRUE) {
|
||||||
segmentPosition = (IOR_offset_t) 0;
|
segmentPosition = (IOR_offset_t) 0;
|
||||||
|
@ -224,7 +215,7 @@ static IOR_offset_t NCMPI_Xfer(int access, void *fd, IOR_size_t * buffer,
|
||||||
int numTransfers =
|
int numTransfers =
|
||||||
param->blockSize / param->transferSize;
|
param->blockSize / param->transferSize;
|
||||||
|
|
||||||
/* Wei-keng Liao: change 1D array to 3D array of dimensions:
|
/* reshape 1D array to 3D array:
|
||||||
[segmentCount*numTasksWorld][numTransfers][transferSize]
|
[segmentCount*numTasksWorld][numTransfers][transferSize]
|
||||||
Requirement: none of these dimensions should be > 4G,
|
Requirement: none of these dimensions should be > 4G,
|
||||||
*/
|
*/
|
||||||
|
@ -264,13 +255,13 @@ static IOR_offset_t NCMPI_Xfer(int access, void *fd, IOR_size_t * buffer,
|
||||||
|
|
||||||
var_id = param->var_id;
|
var_id = param->var_id;
|
||||||
|
|
||||||
/* Wei-keng Liao: calculate the segment number */
|
/* calculate the segment number */
|
||||||
segmentNum = param->offset / (param->numTasks * param->blockSize);
|
segmentNum = param->offset / (param->numTasks * param->blockSize);
|
||||||
|
|
||||||
/* Wei-keng Liao: calculate the transfer number in each block */
|
/* calculate the transfer number in each block */
|
||||||
transferNum = param->offset % param->blockSize / param->transferSize;
|
transferNum = param->offset % param->blockSize / param->transferSize;
|
||||||
|
|
||||||
/* Wei-keng Liao: read/write the 3rd dim of the dataset, each is of
|
/* read/write the 3rd dim of the dataset, each is of
|
||||||
amount param->transferSize */
|
amount param->transferSize */
|
||||||
bufSize[0] = 1;
|
bufSize[0] = 1;
|
||||||
bufSize[1] = 1;
|
bufSize[1] = 1;
|
||||||
|
@ -381,7 +372,7 @@ static int GetFileMode(IOR_param_t * param)
|
||||||
fprintf(stdout, "O_DIRECT not implemented in NCMPI\n");
|
fprintf(stdout, "O_DIRECT not implemented in NCMPI\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Wei-keng Liao: to enable > 4GB file size */
|
/* to enable > 4GB file size */
|
||||||
fd_mode |= NC_64BIT_OFFSET;
|
fd_mode |= NC_64BIT_OFFSET;
|
||||||
|
|
||||||
return (fd_mode);
|
return (fd_mode);
|
||||||
|
|
Loading…
Reference in New Issue