2004-07-21 05:41:44 +08:00
|
|
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
|
|
* Copyright by the Board of Trustees of the University of Illinois. *
|
|
|
|
* All rights reserved. *
|
|
|
|
* *
|
|
|
|
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
|
|
|
* terms governing use, modification, and redistribution, is contained in *
|
|
|
|
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
|
|
|
* of the source code distribution tree; Copyright.html can be found at the *
|
|
|
|
* root level of an installed copy of the electronic HDF5 document set and *
|
|
|
|
* is linked from the top-level documents page. It can also be found at *
|
|
|
|
* http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
|
|
|
|
* access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
|
|
|
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
|
|
|
|
|
|
|
#include "testphdf5.h"
|
2004-07-23 04:46:27 +08:00
|
|
|
#include "H5Dprivate.h"
|
2004-07-21 05:41:44 +08:00
|
|
|
|
|
|
|
|
2004-07-23 04:46:27 +08:00
|
|
|
/* some commonly used routines for collective chunk IO tests*/
|
2005-10-18 04:48:16 +08:00
|
|
|
|
2004-12-29 22:26:20 +08:00
|
|
|
static void ccslab_set(int mpi_rank,int mpi_size,hsize_t start[],hsize_t count[],
|
2005-10-18 04:48:16 +08:00
|
|
|
hsize_t stride[],hsize_t block[],int mode);
|
2004-07-23 04:46:27 +08:00
|
|
|
|
2005-08-14 04:53:35 +08:00
|
|
|
static void ccdataset_fill(hsize_t start[],hsize_t count[],
|
2005-10-18 04:48:16 +08:00
|
|
|
hsize_t stride[],hsize_t block[],DATATYPE*dataset);
|
2004-07-23 04:46:27 +08:00
|
|
|
|
2004-12-29 22:26:20 +08:00
|
|
|
static void ccdataset_print(hsize_t start[],hsize_t block[],DATATYPE*dataset);
|
2004-07-23 04:46:27 +08:00
|
|
|
|
2005-08-14 04:53:35 +08:00
|
|
|
static int ccdataset_vrfy(hsize_t start[], hsize_t count[], hsize_t stride[],
|
2005-10-18 04:48:16 +08:00
|
|
|
hsize_t block[], DATATYPE *dataset, DATATYPE *original);
|
2004-07-23 04:46:27 +08:00
|
|
|
|
2006-03-29 22:35:26 +08:00
|
|
|
static void coll_chunktest(const char* filename,int chunk_factor,int select_factor,int api_option);
|
2004-07-21 05:41:44 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
|
2004-07-21 05:41:44 +08:00
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
* Function: coll_chunk1
|
|
|
|
*
|
2005-10-18 04:48:16 +08:00
|
|
|
* Purpose: Wrapper to test the collective chunk IO for regular JOINT
|
|
|
|
selection with a single chunk
|
2004-07-21 05:41:44 +08:00
|
|
|
*
|
|
|
|
* Return: Success: 0
|
|
|
|
*
|
|
|
|
* Failure: -1
|
|
|
|
*
|
|
|
|
* Programmer: Unknown
|
|
|
|
* July 12th, 2004
|
|
|
|
*
|
|
|
|
* Modifications:
|
|
|
|
*
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
*/
|
2005-10-18 04:48:16 +08:00
|
|
|
|
|
|
|
/* ------------------------------------------------------------------------
|
|
|
|
* Descriptions for the selection: One big singluar selection inside one chunk
|
|
|
|
* Two dimensions,
|
|
|
|
*
|
[svn-r12142] Purpose:
change the array size of collective chunking features of parallel tests.
Description:
Previously array size for collective optimization tests
including
cchunk1,
cchunk2,
cchunk3,
cchunk4,
ccontw,
ccontr,
cschunkw,
cschunkr,
ccchunkw,
ccchunkr
are fixed,
They are only valid for some good number of processors(1,2,3,4,6,8,12,16,24,32,48 etc).
Recently there are more requests for parallel tests to be valid on some odd number of processes such as 5,7,11,13 etc.
Solution:
I change the array size to be dynamic rather than static. Now the fastest change array size is a function of mpi_size. dim2 = constant *mpi_size. After some tunings, theoretically the above tests should be valid for any number of processors. However, other parallel tests still need to be tuned.
To verify the correctness of these tests, using mpirun -np 5 ./testphdf5 -b cchunk1 at heping.
Platforms tested:
h5committest(shanti is refused to be connected)
at heping, 5 and 7 processes are used to verify the correctness.
Misc. update:
2006-03-23 10:50:09 +08:00
|
|
|
* dim1 = SPACE_DIM1(5760)*mpi_size
|
2005-10-18 04:48:16 +08:00
|
|
|
* dim2 = SPACE_DIM2(3)
|
|
|
|
* chunk_dim1 = dim1
|
|
|
|
* chunk_dim2 = dim2
|
|
|
|
* block = 1 for all dimensions
|
|
|
|
* stride = 1 for all dimensions
|
[svn-r12142] Purpose:
change the array size of collective chunking features of parallel tests.
Description:
Previously array size for collective optimization tests
including
cchunk1,
cchunk2,
cchunk3,
cchunk4,
ccontw,
ccontr,
cschunkw,
cschunkr,
ccchunkw,
ccchunkr
are fixed,
They are only valid for some good number of processors(1,2,3,4,6,8,12,16,24,32,48 etc).
Recently there are more requests for parallel tests to be valid on some odd number of processes such as 5,7,11,13 etc.
Solution:
I change the array size to be dynamic rather than static. Now the fastest change array size is a function of mpi_size. dim2 = constant *mpi_size. After some tunings, theoretically the above tests should be valid for any number of processors. However, other parallel tests still need to be tuned.
To verify the correctness of these tests, using mpirun -np 5 ./testphdf5 -b cchunk1 at heping.
Platforms tested:
h5committest(shanti is refused to be connected)
at heping, 5 and 7 processes are used to verify the correctness.
Misc. update:
2006-03-23 10:50:09 +08:00
|
|
|
* count0 = SPACE_DIM1(5760)
|
2005-10-18 04:48:16 +08:00
|
|
|
* count1 = SPACE_DIM2(3)
|
[svn-r12142] Purpose:
change the array size of collective chunking features of parallel tests.
Description:
Previously array size for collective optimization tests
including
cchunk1,
cchunk2,
cchunk3,
cchunk4,
ccontw,
ccontr,
cschunkw,
cschunkr,
ccchunkw,
ccchunkr
are fixed,
They are only valid for some good number of processors(1,2,3,4,6,8,12,16,24,32,48 etc).
Recently there are more requests for parallel tests to be valid on some odd number of processes such as 5,7,11,13 etc.
Solution:
I change the array size to be dynamic rather than static. Now the fastest change array size is a function of mpi_size. dim2 = constant *mpi_size. After some tunings, theoretically the above tests should be valid for any number of processors. However, other parallel tests still need to be tuned.
To verify the correctness of these tests, using mpirun -np 5 ./testphdf5 -b cchunk1 at heping.
Platforms tested:
h5committest(shanti is refused to be connected)
at heping, 5 and 7 processes are used to verify the correctness.
Misc. update:
2006-03-23 10:50:09 +08:00
|
|
|
* start0 = mpi_rank*SPACE_DIM1
|
2005-10-18 04:48:16 +08:00
|
|
|
* start1 = 0
|
|
|
|
* ------------------------------------------------------------------------
|
|
|
|
*/
|
|
|
|
|
2004-07-21 05:41:44 +08:00
|
|
|
void
|
2004-07-23 04:46:27 +08:00
|
|
|
coll_chunk1(void)
|
|
|
|
{
|
2004-07-21 05:41:44 +08:00
|
|
|
|
2004-12-29 22:26:20 +08:00
|
|
|
const char *filename;
|
2005-10-18 04:48:16 +08:00
|
|
|
|
2004-12-29 22:26:20 +08:00
|
|
|
filename = GetTestParameters();
|
2006-03-29 22:35:26 +08:00
|
|
|
coll_chunktest(filename,1,BYROW_CONT,API_NONE);
|
2004-07-21 05:41:44 +08:00
|
|
|
|
|
|
|
}
|
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
|
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
* Function: coll_chunk2
|
|
|
|
*
|
|
|
|
* Purpose: Wrapper to test the collective chunk IO for regular DISJOINT
|
|
|
|
selection with a single chunk
|
|
|
|
*
|
|
|
|
* Return: Success: 0
|
|
|
|
*
|
|
|
|
* Failure: -1
|
|
|
|
*
|
|
|
|
* Programmer: Unknown
|
|
|
|
* July 12th, 2004
|
|
|
|
*
|
|
|
|
* Modifications:
|
|
|
|
*
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* ------------------------------------------------------------------------
|
|
|
|
* Descriptions for the selection: many disjoint selections inside one chunk
|
|
|
|
* Two dimensions,
|
|
|
|
*
|
[svn-r12142] Purpose:
change the array size of collective chunking features of parallel tests.
Description:
Previously array size for collective optimization tests
including
cchunk1,
cchunk2,
cchunk3,
cchunk4,
ccontw,
ccontr,
cschunkw,
cschunkr,
ccchunkw,
ccchunkr
are fixed,
They are only valid for some good number of processors(1,2,3,4,6,8,12,16,24,32,48 etc).
Recently there are more requests for parallel tests to be valid on some odd number of processes such as 5,7,11,13 etc.
Solution:
I change the array size to be dynamic rather than static. Now the fastest change array size is a function of mpi_size. dim2 = constant *mpi_size. After some tunings, theoretically the above tests should be valid for any number of processors. However, other parallel tests still need to be tuned.
To verify the correctness of these tests, using mpirun -np 5 ./testphdf5 -b cchunk1 at heping.
Platforms tested:
h5committest(shanti is refused to be connected)
at heping, 5 and 7 processes are used to verify the correctness.
Misc. update:
2006-03-23 10:50:09 +08:00
|
|
|
* dim1 = SPACE_DIM1*mpi_size(5760)
|
2005-10-18 04:48:16 +08:00
|
|
|
* dim2 = SPACE_DIM2(3)
|
|
|
|
* chunk_dim1 = dim1
|
|
|
|
* chunk_dim2 = dim2
|
|
|
|
* block = 1 for all dimensions
|
|
|
|
* stride = 3 for all dimensions
|
[svn-r12142] Purpose:
change the array size of collective chunking features of parallel tests.
Description:
Previously array size for collective optimization tests
including
cchunk1,
cchunk2,
cchunk3,
cchunk4,
ccontw,
ccontr,
cschunkw,
cschunkr,
ccchunkw,
ccchunkr
are fixed,
They are only valid for some good number of processors(1,2,3,4,6,8,12,16,24,32,48 etc).
Recently there are more requests for parallel tests to be valid on some odd number of processes such as 5,7,11,13 etc.
Solution:
I change the array size to be dynamic rather than static. Now the fastest change array size is a function of mpi_size. dim2 = constant *mpi_size. After some tunings, theoretically the above tests should be valid for any number of processors. However, other parallel tests still need to be tuned.
To verify the correctness of these tests, using mpirun -np 5 ./testphdf5 -b cchunk1 at heping.
Platforms tested:
h5committest(shanti is refused to be connected)
at heping, 5 and 7 processes are used to verify the correctness.
Misc. update:
2006-03-23 10:50:09 +08:00
|
|
|
* count0 = SPACE_DIM1/stride0(5760/3)
|
2005-10-18 04:48:16 +08:00
|
|
|
* count1 = SPACE_DIM2/stride(3/3 = 1)
|
[svn-r12142] Purpose:
change the array size of collective chunking features of parallel tests.
Description:
Previously array size for collective optimization tests
including
cchunk1,
cchunk2,
cchunk3,
cchunk4,
ccontw,
ccontr,
cschunkw,
cschunkr,
ccchunkw,
ccchunkr
are fixed,
They are only valid for some good number of processors(1,2,3,4,6,8,12,16,24,32,48 etc).
Recently there are more requests for parallel tests to be valid on some odd number of processes such as 5,7,11,13 etc.
Solution:
I change the array size to be dynamic rather than static. Now the fastest change array size is a function of mpi_size. dim2 = constant *mpi_size. After some tunings, theoretically the above tests should be valid for any number of processors. However, other parallel tests still need to be tuned.
To verify the correctness of these tests, using mpirun -np 5 ./testphdf5 -b cchunk1 at heping.
Platforms tested:
h5committest(shanti is refused to be connected)
at heping, 5 and 7 processes are used to verify the correctness.
Misc. update:
2006-03-23 10:50:09 +08:00
|
|
|
* start0 = mpi_rank*SPACE_DIM1
|
2005-10-18 04:48:16 +08:00
|
|
|
* start1 = 0
|
|
|
|
*
|
|
|
|
* ------------------------------------------------------------------------
|
|
|
|
*/
|
2004-07-21 05:41:44 +08:00
|
|
|
void
|
2004-07-23 04:46:27 +08:00
|
|
|
coll_chunk2(void)
|
|
|
|
{
|
2004-07-21 05:41:44 +08:00
|
|
|
|
2004-12-29 22:26:20 +08:00
|
|
|
const char *filename;
|
2005-10-18 04:48:16 +08:00
|
|
|
|
2004-12-29 22:26:20 +08:00
|
|
|
filename = GetTestParameters();
|
2006-03-29 22:35:26 +08:00
|
|
|
coll_chunktest(filename,1,BYROW_DISCONT,API_NONE);
|
2004-07-21 05:41:44 +08:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
* Function: coll_chunk3
|
|
|
|
*
|
|
|
|
* Purpose: Wrapper to test the collective chunk IO for regular JOINT
|
|
|
|
selection with at least number of 2*mpi_size chunks
|
|
|
|
*
|
|
|
|
* Return: Success: 0
|
|
|
|
*
|
|
|
|
* Failure: -1
|
|
|
|
*
|
|
|
|
* Programmer: Unknown
|
|
|
|
* July 12th, 2004
|
|
|
|
*
|
|
|
|
* Modifications:
|
|
|
|
*
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* ------------------------------------------------------------------------
|
|
|
|
* Descriptions for the selection: one singular selection accross many chunks
|
|
|
|
* Two dimensions, Num of chunks = 2* mpi_size
|
|
|
|
*
|
[svn-r12142] Purpose:
change the array size of collective chunking features of parallel tests.
Description:
Previously array size for collective optimization tests
including
cchunk1,
cchunk2,
cchunk3,
cchunk4,
ccontw,
ccontr,
cschunkw,
cschunkr,
ccchunkw,
ccchunkr
are fixed,
They are only valid for some good number of processors(1,2,3,4,6,8,12,16,24,32,48 etc).
Recently there are more requests for parallel tests to be valid on some odd number of processes such as 5,7,11,13 etc.
Solution:
I change the array size to be dynamic rather than static. Now the fastest change array size is a function of mpi_size. dim2 = constant *mpi_size. After some tunings, theoretically the above tests should be valid for any number of processors. However, other parallel tests still need to be tuned.
To verify the correctness of these tests, using mpirun -np 5 ./testphdf5 -b cchunk1 at heping.
Platforms tested:
h5committest(shanti is refused to be connected)
at heping, 5 and 7 processes are used to verify the correctness.
Misc. update:
2006-03-23 10:50:09 +08:00
|
|
|
* dim1 = SPACE_DIM1*mpi_size
|
2005-10-18 04:48:16 +08:00
|
|
|
* dim2 = SPACE_DIM2(3)
|
[svn-r12142] Purpose:
change the array size of collective chunking features of parallel tests.
Description:
Previously array size for collective optimization tests
including
cchunk1,
cchunk2,
cchunk3,
cchunk4,
ccontw,
ccontr,
cschunkw,
cschunkr,
ccchunkw,
ccchunkr
are fixed,
They are only valid for some good number of processors(1,2,3,4,6,8,12,16,24,32,48 etc).
Recently there are more requests for parallel tests to be valid on some odd number of processes such as 5,7,11,13 etc.
Solution:
I change the array size to be dynamic rather than static. Now the fastest change array size is a function of mpi_size. dim2 = constant *mpi_size. After some tunings, theoretically the above tests should be valid for any number of processors. However, other parallel tests still need to be tuned.
To verify the correctness of these tests, using mpirun -np 5 ./testphdf5 -b cchunk1 at heping.
Platforms tested:
h5committest(shanti is refused to be connected)
at heping, 5 and 7 processes are used to verify the correctness.
Misc. update:
2006-03-23 10:50:09 +08:00
|
|
|
* chunk_dim1 = SPACE_DIM1
|
2005-10-18 04:48:16 +08:00
|
|
|
* chunk_dim2 = dim2/2
|
|
|
|
* block = 1 for all dimensions
|
|
|
|
* stride = 1 for all dimensions
|
[svn-r12142] Purpose:
change the array size of collective chunking features of parallel tests.
Description:
Previously array size for collective optimization tests
including
cchunk1,
cchunk2,
cchunk3,
cchunk4,
ccontw,
ccontr,
cschunkw,
cschunkr,
ccchunkw,
ccchunkr
are fixed,
They are only valid for some good number of processors(1,2,3,4,6,8,12,16,24,32,48 etc).
Recently there are more requests for parallel tests to be valid on some odd number of processes such as 5,7,11,13 etc.
Solution:
I change the array size to be dynamic rather than static. Now the fastest change array size is a function of mpi_size. dim2 = constant *mpi_size. After some tunings, theoretically the above tests should be valid for any number of processors. However, other parallel tests still need to be tuned.
To verify the correctness of these tests, using mpirun -np 5 ./testphdf5 -b cchunk1 at heping.
Platforms tested:
h5committest(shanti is refused to be connected)
at heping, 5 and 7 processes are used to verify the correctness.
Misc. update:
2006-03-23 10:50:09 +08:00
|
|
|
* count0 = SPACE_DIM1
|
2005-10-18 04:48:16 +08:00
|
|
|
* count1 = SPACE_DIM2(3)
|
[svn-r12142] Purpose:
change the array size of collective chunking features of parallel tests.
Description:
Previously array size for collective optimization tests
including
cchunk1,
cchunk2,
cchunk3,
cchunk4,
ccontw,
ccontr,
cschunkw,
cschunkr,
ccchunkw,
ccchunkr
are fixed,
They are only valid for some good number of processors(1,2,3,4,6,8,12,16,24,32,48 etc).
Recently there are more requests for parallel tests to be valid on some odd number of processes such as 5,7,11,13 etc.
Solution:
I change the array size to be dynamic rather than static. Now the fastest change array size is a function of mpi_size. dim2 = constant *mpi_size. After some tunings, theoretically the above tests should be valid for any number of processors. However, other parallel tests still need to be tuned.
To verify the correctness of these tests, using mpirun -np 5 ./testphdf5 -b cchunk1 at heping.
Platforms tested:
h5committest(shanti is refused to be connected)
at heping, 5 and 7 processes are used to verify the correctness.
Misc. update:
2006-03-23 10:50:09 +08:00
|
|
|
* start0 = mpi_rank*SPACE_DIM1
|
2005-10-18 04:48:16 +08:00
|
|
|
* start1 = 0
|
|
|
|
*
|
|
|
|
* ------------------------------------------------------------------------
|
|
|
|
*/
|
|
|
|
|
2004-07-21 05:41:44 +08:00
|
|
|
void
|
2004-07-23 04:46:27 +08:00
|
|
|
coll_chunk3(void)
|
|
|
|
{
|
2004-07-21 05:41:44 +08:00
|
|
|
|
2004-12-29 22:26:20 +08:00
|
|
|
const char *filename;
|
2004-08-12 11:45:50 +08:00
|
|
|
int mpi_size;
|
2005-10-18 04:48:16 +08:00
|
|
|
|
2004-08-12 11:45:50 +08:00
|
|
|
MPI_Comm comm = MPI_COMM_WORLD;
|
2004-10-05 04:29:31 +08:00
|
|
|
MPI_Comm_size(comm,&mpi_size);
|
2005-10-18 04:48:16 +08:00
|
|
|
|
2004-12-29 22:26:20 +08:00
|
|
|
filename = GetTestParameters();
|
2006-03-29 22:35:26 +08:00
|
|
|
coll_chunktest(filename,mpi_size,BYROW_CONT,API_NONE);
|
2004-07-21 05:41:44 +08:00
|
|
|
|
|
|
|
}
|
|
|
|
|
2006-02-17 01:12:08 +08:00
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
* Function: coll_chunk4
|
|
|
|
*
|
|
|
|
* Purpose: Wrapper to test the collective chunk IO for regular JOINT
|
|
|
|
selection with at least number of 2*mpi_size chunks
|
|
|
|
*
|
|
|
|
* Return: Success: 0
|
|
|
|
*
|
|
|
|
* Failure: -1
|
|
|
|
*
|
|
|
|
* Programmer: Unknown
|
|
|
|
* July 12th, 2004
|
|
|
|
*
|
|
|
|
* Modifications:
|
|
|
|
*
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* ------------------------------------------------------------------------
|
|
|
|
* Descriptions for the selection: one singular selection accross many chunks
|
|
|
|
* Two dimensions, Num of chunks = 2* mpi_size
|
|
|
|
*
|
[svn-r12142] Purpose:
change the array size of collective chunking features of parallel tests.
Description:
Previously array size for collective optimization tests
including
cchunk1,
cchunk2,
cchunk3,
cchunk4,
ccontw,
ccontr,
cschunkw,
cschunkr,
ccchunkw,
ccchunkr
are fixed,
They are only valid for some good number of processors(1,2,3,4,6,8,12,16,24,32,48 etc).
Recently there are more requests for parallel tests to be valid on some odd number of processes such as 5,7,11,13 etc.
Solution:
I change the array size to be dynamic rather than static. Now the fastest change array size is a function of mpi_size. dim2 = constant *mpi_size. After some tunings, theoretically the above tests should be valid for any number of processors. However, other parallel tests still need to be tuned.
To verify the correctness of these tests, using mpirun -np 5 ./testphdf5 -b cchunk1 at heping.
Platforms tested:
h5committest(shanti is refused to be connected)
at heping, 5 and 7 processes are used to verify the correctness.
Misc. update:
2006-03-23 10:50:09 +08:00
|
|
|
* dim1 = SPACE_DIM1*mpi_size
|
|
|
|
* dim2 = SPACE_DIM2
|
|
|
|
* chunk_dim1 = dim1
|
|
|
|
* chunk_dim2 = dim2
|
2006-02-17 01:12:08 +08:00
|
|
|
* block = 1 for all dimensions
|
|
|
|
* stride = 1 for all dimensions
|
[svn-r12142] Purpose:
change the array size of collective chunking features of parallel tests.
Description:
Previously array size for collective optimization tests
including
cchunk1,
cchunk2,
cchunk3,
cchunk4,
ccontw,
ccontr,
cschunkw,
cschunkr,
ccchunkw,
ccchunkr
are fixed,
They are only valid for some good number of processors(1,2,3,4,6,8,12,16,24,32,48 etc).
Recently there are more requests for parallel tests to be valid on some odd number of processes such as 5,7,11,13 etc.
Solution:
I change the array size to be dynamic rather than static. Now the fastest change array size is a function of mpi_size. dim2 = constant *mpi_size. After some tunings, theoretically the above tests should be valid for any number of processors. However, other parallel tests still need to be tuned.
To verify the correctness of these tests, using mpirun -np 5 ./testphdf5 -b cchunk1 at heping.
Platforms tested:
h5committest(shanti is refused to be connected)
at heping, 5 and 7 processes are used to verify the correctness.
Misc. update:
2006-03-23 10:50:09 +08:00
|
|
|
* count0 = SPACE_DIM1
|
2006-02-17 01:12:08 +08:00
|
|
|
* count1 = SPACE_DIM2(3)
|
[svn-r12142] Purpose:
change the array size of collective chunking features of parallel tests.
Description:
Previously array size for collective optimization tests
including
cchunk1,
cchunk2,
cchunk3,
cchunk4,
ccontw,
ccontr,
cschunkw,
cschunkr,
ccchunkw,
ccchunkr
are fixed,
They are only valid for some good number of processors(1,2,3,4,6,8,12,16,24,32,48 etc).
Recently there are more requests for parallel tests to be valid on some odd number of processes such as 5,7,11,13 etc.
Solution:
I change the array size to be dynamic rather than static. Now the fastest change array size is a function of mpi_size. dim2 = constant *mpi_size. After some tunings, theoretically the above tests should be valid for any number of processors. However, other parallel tests still need to be tuned.
To verify the correctness of these tests, using mpirun -np 5 ./testphdf5 -b cchunk1 at heping.
Platforms tested:
h5committest(shanti is refused to be connected)
at heping, 5 and 7 processes are used to verify the correctness.
Misc. update:
2006-03-23 10:50:09 +08:00
|
|
|
* start0 = mpi_rank*SPACE_DIM1
|
2006-02-17 01:12:08 +08:00
|
|
|
* start1 = 0
|
|
|
|
*
|
|
|
|
* ------------------------------------------------------------------------
|
|
|
|
*/
|
|
|
|
|
|
|
|
void
|
|
|
|
coll_chunk4(void)
|
|
|
|
{
|
|
|
|
|
|
|
|
const char *filename;
|
|
|
|
int mpi_size;
|
|
|
|
|
|
|
|
MPI_Comm comm = MPI_COMM_WORLD;
|
|
|
|
|
|
|
|
filename = GetTestParameters();
|
2006-03-29 22:35:26 +08:00
|
|
|
coll_chunktest(filename,1,BYROW_SELECTNONE,API_NONE);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
* Function: coll_chunk4
|
|
|
|
*
|
|
|
|
* Purpose: Wrapper to test the collective chunk IO for regular JOINT
|
|
|
|
selection with at least number of 2*mpi_size chunks
|
|
|
|
*
|
|
|
|
* Return: Success: 0
|
|
|
|
*
|
|
|
|
* Failure: -1
|
|
|
|
*
|
|
|
|
* Programmer: Unknown
|
|
|
|
* July 12th, 2004
|
|
|
|
*
|
|
|
|
* Modifications:
|
|
|
|
*
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* ------------------------------------------------------------------------
|
|
|
|
* Descriptions for the selection: one singular selection accross many chunks
|
|
|
|
* Two dimensions, Num of chunks = 2* mpi_size
|
|
|
|
*
|
|
|
|
* dim1 = SPACE_DIM1*mpi_size
|
|
|
|
* dim2 = SPACE_DIM2
|
|
|
|
* chunk_dim1 = dim1
|
|
|
|
* chunk_dim2 = dim2
|
|
|
|
* block = 1 for all dimensions
|
|
|
|
* stride = 1 for all dimensions
|
|
|
|
* count0 = SPACE_DIM1
|
|
|
|
* count1 = SPACE_DIM2(3)
|
|
|
|
* start0 = mpi_rank*SPACE_DIM1
|
|
|
|
* start1 = 0
|
|
|
|
*
|
|
|
|
* ------------------------------------------------------------------------
|
|
|
|
*/
|
|
|
|
|
|
|
|
void
|
|
|
|
coll_chunk5(void)
|
|
|
|
{
|
|
|
|
|
|
|
|
const char *filename;
|
|
|
|
int mpi_size;
|
|
|
|
|
|
|
|
MPI_Comm comm = MPI_COMM_WORLD;
|
|
|
|
|
|
|
|
filename = GetTestParameters();
|
|
|
|
coll_chunktest(filename,4,BYROW_SELECTUNBALANCE,API_LINK_HARD);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
* Function: coll_chunk6
|
|
|
|
*
|
|
|
|
* Purpose: Wrapper to test the collective chunk IO for regular JOINT
|
|
|
|
selection with at least number of 2*mpi_size chunks
|
|
|
|
*
|
|
|
|
* Return: Success: 0
|
|
|
|
*
|
|
|
|
* Failure: -1
|
|
|
|
*
|
|
|
|
* Programmer: Unknown
|
|
|
|
* July 12th, 2004
|
|
|
|
*
|
|
|
|
* Modifications:
|
|
|
|
*
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* ------------------------------------------------------------------------
|
|
|
|
* Descriptions for the selection: one singular selection accross many chunks
|
|
|
|
* Two dimensions, Num of chunks = 2* mpi_size
|
|
|
|
*
|
|
|
|
* dim1 = SPACE_DIM1*mpi_size
|
|
|
|
* dim2 = SPACE_DIM2
|
|
|
|
* chunk_dim1 = dim1
|
|
|
|
* chunk_dim2 = dim2
|
|
|
|
* block = 1 for all dimensions
|
|
|
|
* stride = 1 for all dimensions
|
|
|
|
* count0 = SPACE_DIM1
|
|
|
|
* count1 = SPACE_DIM2(3)
|
|
|
|
* start0 = mpi_rank*SPACE_DIM1
|
|
|
|
* start1 = 0
|
|
|
|
*
|
|
|
|
* ------------------------------------------------------------------------
|
|
|
|
*/
|
|
|
|
|
|
|
|
void
|
|
|
|
coll_chunk6(void)
|
|
|
|
{
|
|
|
|
|
|
|
|
const char *filename;
|
|
|
|
int mpi_size;
|
|
|
|
|
|
|
|
MPI_Comm comm = MPI_COMM_WORLD;
|
|
|
|
|
|
|
|
filename = GetTestParameters();
|
|
|
|
coll_chunktest(filename,4,BYROW_SELECTUNBALANCE,API_MULTI_HARD);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
* Function: coll_chunk7
|
|
|
|
*
|
|
|
|
* Purpose: Wrapper to test the collective chunk IO for regular JOINT
|
|
|
|
selection with at least number of 2*mpi_size chunks
|
|
|
|
*
|
|
|
|
* Return: Success: 0
|
|
|
|
*
|
|
|
|
* Failure: -1
|
|
|
|
*
|
|
|
|
* Programmer: Unknown
|
|
|
|
* July 12th, 2004
|
|
|
|
*
|
|
|
|
* Modifications:
|
|
|
|
*
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* ------------------------------------------------------------------------
|
|
|
|
* Descriptions for the selection: one singular selection accross many chunks
|
|
|
|
* Two dimensions, Num of chunks = 2* mpi_size
|
|
|
|
*
|
|
|
|
* dim1 = SPACE_DIM1*mpi_size
|
|
|
|
* dim2 = SPACE_DIM2
|
|
|
|
* chunk_dim1 = dim1
|
|
|
|
* chunk_dim2 = dim2
|
|
|
|
* block = 1 for all dimensions
|
|
|
|
* stride = 1 for all dimensions
|
|
|
|
* count0 = SPACE_DIM1
|
|
|
|
* count1 = SPACE_DIM2(3)
|
|
|
|
* start0 = mpi_rank*SPACE_DIM1
|
|
|
|
* start1 = 0
|
|
|
|
*
|
|
|
|
* ------------------------------------------------------------------------
|
|
|
|
*/
|
|
|
|
|
|
|
|
void
|
|
|
|
coll_chunk7(void)
|
|
|
|
{
|
|
|
|
|
|
|
|
const char *filename;
|
|
|
|
int mpi_size;
|
|
|
|
|
|
|
|
MPI_Comm comm = MPI_COMM_WORLD;
|
|
|
|
|
|
|
|
filename = GetTestParameters();
|
|
|
|
coll_chunktest(filename,4,BYROW_SELECTUNBALANCE,API_LINK_TRUE);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
* Function: coll_chunk8
|
|
|
|
*
|
|
|
|
* Purpose: Wrapper to test the collective chunk IO for regular JOINT
|
|
|
|
selection with at least number of 2*mpi_size chunks
|
|
|
|
*
|
|
|
|
* Return: Success: 0
|
|
|
|
*
|
|
|
|
* Failure: -1
|
|
|
|
*
|
|
|
|
* Programmer: Unknown
|
|
|
|
* July 12th, 2004
|
|
|
|
*
|
|
|
|
* Modifications:
|
|
|
|
*
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* ------------------------------------------------------------------------
|
|
|
|
* Descriptions for the selection: one singular selection accross many chunks
|
|
|
|
* Two dimensions, Num of chunks = 2* mpi_size
|
|
|
|
*
|
|
|
|
* dim1 = SPACE_DIM1*mpi_size
|
|
|
|
* dim2 = SPACE_DIM2
|
|
|
|
* chunk_dim1 = dim1
|
|
|
|
* chunk_dim2 = dim2
|
|
|
|
* block = 1 for all dimensions
|
|
|
|
* stride = 1 for all dimensions
|
|
|
|
* count0 = SPACE_DIM1
|
|
|
|
* count1 = SPACE_DIM2(3)
|
|
|
|
* start0 = mpi_rank*SPACE_DIM1
|
|
|
|
* start1 = 0
|
|
|
|
*
|
|
|
|
* ------------------------------------------------------------------------
|
|
|
|
*/
|
|
|
|
|
|
|
|
void
|
|
|
|
coll_chunk8(void)
|
|
|
|
{
|
|
|
|
|
|
|
|
const char *filename;
|
|
|
|
int mpi_size;
|
|
|
|
|
|
|
|
MPI_Comm comm = MPI_COMM_WORLD;
|
|
|
|
|
|
|
|
filename = GetTestParameters();
|
|
|
|
coll_chunktest(filename,4,BYROW_SELECTUNBALANCE,API_LINK_FALSE);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
* Function: coll_chunk9
|
|
|
|
*
|
|
|
|
* Purpose: Wrapper to test the collective chunk IO for regular JOINT
|
|
|
|
selection with at least number of 2*mpi_size chunks
|
|
|
|
*
|
|
|
|
* Return: Success: 0
|
|
|
|
*
|
|
|
|
* Failure: -1
|
|
|
|
*
|
|
|
|
* Programmer: Unknown
|
|
|
|
* July 12th, 2004
|
|
|
|
*
|
|
|
|
* Modifications:
|
|
|
|
*
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* ------------------------------------------------------------------------
|
|
|
|
* Descriptions for the selection: one singular selection accross many chunks
|
|
|
|
* Two dimensions, Num of chunks = 2* mpi_size
|
|
|
|
*
|
|
|
|
* dim1 = SPACE_DIM1*mpi_size
|
|
|
|
* dim2 = SPACE_DIM2
|
|
|
|
* chunk_dim1 = dim1
|
|
|
|
* chunk_dim2 = dim2
|
|
|
|
* block = 1 for all dimensions
|
|
|
|
* stride = 1 for all dimensions
|
|
|
|
* count0 = SPACE_DIM1
|
|
|
|
* count1 = SPACE_DIM2(3)
|
|
|
|
* start0 = mpi_rank*SPACE_DIM1
|
|
|
|
* start1 = 0
|
|
|
|
*
|
|
|
|
* ------------------------------------------------------------------------
|
|
|
|
*/
|
|
|
|
|
|
|
|
void
|
|
|
|
coll_chunk9(void)
|
|
|
|
{
|
|
|
|
|
|
|
|
const char *filename;
|
|
|
|
int mpi_size;
|
|
|
|
|
|
|
|
MPI_Comm comm = MPI_COMM_WORLD;
|
|
|
|
|
|
|
|
filename = GetTestParameters();
|
|
|
|
coll_chunktest(filename,4,BYROW_SELECTUNBALANCE,API_MULTI_COLL);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
* Function: coll_chunk10
|
|
|
|
*
|
|
|
|
* Purpose: Wrapper to test the collective chunk IO for regular JOINT
|
|
|
|
selection with at least number of 2*mpi_size chunks
|
|
|
|
*
|
|
|
|
* Return: Success: 0
|
|
|
|
*
|
|
|
|
* Failure: -1
|
|
|
|
*
|
|
|
|
* Programmer: Unknown
|
|
|
|
* July 12th, 2004
|
|
|
|
*
|
|
|
|
* Modifications:
|
|
|
|
*
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* ------------------------------------------------------------------------
|
|
|
|
* Descriptions for the selection: one singular selection accross many chunks
|
|
|
|
* Two dimensions, Num of chunks = 2* mpi_size
|
|
|
|
*
|
|
|
|
* dim1 = SPACE_DIM1*mpi_size
|
|
|
|
* dim2 = SPACE_DIM2
|
|
|
|
* chunk_dim1 = dim1
|
|
|
|
* chunk_dim2 = dim2
|
|
|
|
* block = 1 for all dimensions
|
|
|
|
* stride = 1 for all dimensions
|
|
|
|
* count0 = SPACE_DIM1
|
|
|
|
* count1 = SPACE_DIM2(3)
|
|
|
|
* start0 = mpi_rank*SPACE_DIM1
|
|
|
|
* start1 = 0
|
|
|
|
*
|
|
|
|
* ------------------------------------------------------------------------
|
|
|
|
*/
|
|
|
|
|
|
|
|
void
|
|
|
|
coll_chunk10(void)
|
|
|
|
{
|
|
|
|
|
|
|
|
const char *filename;
|
|
|
|
int mpi_size;
|
|
|
|
|
|
|
|
MPI_Comm comm = MPI_COMM_WORLD;
|
|
|
|
|
|
|
|
filename = GetTestParameters();
|
|
|
|
coll_chunktest(filename,4,BYROW_SELECTINCHUNK,API_MULTI_IND);
|
2006-02-17 01:12:08 +08:00
|
|
|
|
|
|
|
}
|
|
|
|
|
2005-07-13 03:26:26 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
* Function: coll_chunktest
|
|
|
|
*
|
|
|
|
* Purpose: The real testing routine for regular selection of collective
|
|
|
|
chunking storage
|
|
|
|
testing both write and read,
|
|
|
|
If anything fails, it may be read or write. There is no
|
|
|
|
separation test between read and write.
|
|
|
|
*
|
|
|
|
* Return: Success: 0
|
|
|
|
*
|
|
|
|
* Failure: -1
|
|
|
|
*
|
|
|
|
* Programmer: Unknown
|
|
|
|
* July 12th, 2004
|
|
|
|
*
|
|
|
|
* Modifications:
|
|
|
|
*
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
*/
|
2004-07-21 05:41:44 +08:00
|
|
|
|
2004-07-23 04:46:27 +08:00
|
|
|
|
|
|
|
static void
|
2005-10-18 04:48:16 +08:00
|
|
|
coll_chunktest(const char* filename,
|
|
|
|
int chunk_factor,
|
2006-03-29 22:35:26 +08:00
|
|
|
int select_factor,
|
|
|
|
int api_option) {
|
2004-07-21 05:41:44 +08:00
|
|
|
|
|
|
|
hid_t file,dataset, file_dataspace;
|
|
|
|
hid_t acc_plist,xfer_plist,crp_plist;
|
2005-10-18 04:48:16 +08:00
|
|
|
|
2004-07-21 05:41:44 +08:00
|
|
|
hsize_t dims[RANK], chunk_dims[RANK];
|
2005-08-14 04:53:35 +08:00
|
|
|
int* data_array1 = NULL;
|
2004-07-21 05:41:44 +08:00
|
|
|
int* data_origin1 = NULL;
|
2005-10-18 04:48:16 +08:00
|
|
|
|
|
|
|
hsize_t start[RANK],count[RANK],stride[RANK],block[RANK];
|
|
|
|
|
2006-03-29 22:35:26 +08:00
|
|
|
#ifdef H5_HAVE_INSTRUMENTED_LIBRARY
|
|
|
|
unsigned prop_value;
|
|
|
|
#endif /* H5_HAVE_INSTRUMENTED_LIBRARY */
|
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
hbool_t use_gpfs = FALSE;
|
|
|
|
int mpi_size,mpi_rank;
|
|
|
|
|
2004-07-21 05:41:44 +08:00
|
|
|
herr_t status;
|
|
|
|
MPI_Comm comm = MPI_COMM_WORLD;
|
|
|
|
MPI_Info info = MPI_INFO_NULL;
|
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
/* set up MPI parameters */
|
2004-07-23 04:46:27 +08:00
|
|
|
MPI_Comm_size(comm,&mpi_size);
|
|
|
|
MPI_Comm_rank(comm,&mpi_rank);
|
2004-07-21 05:41:44 +08:00
|
|
|
|
|
|
|
/* Create the data space */
|
2005-10-18 04:48:16 +08:00
|
|
|
|
2005-08-25 10:45:25 +08:00
|
|
|
acc_plist = create_faccess_plist(comm,info,facc_type,use_gpfs);
|
2004-07-21 05:41:44 +08:00
|
|
|
VRFY((acc_plist >= 0),"");
|
|
|
|
|
|
|
|
file = H5Fcreate(filename,H5F_ACC_TRUNC,H5P_DEFAULT,acc_plist);
|
|
|
|
VRFY((file >= 0),"H5Fcreate succeeded");
|
|
|
|
|
|
|
|
status = H5Pclose(acc_plist);
|
|
|
|
VRFY((status >= 0),"");
|
|
|
|
|
|
|
|
/* setup dimensionality object */
|
[svn-r12142] Purpose:
change the array size of collective chunking features of parallel tests.
Description:
Previously array size for collective optimization tests
including
cchunk1,
cchunk2,
cchunk3,
cchunk4,
ccontw,
ccontr,
cschunkw,
cschunkr,
ccchunkw,
ccchunkr
are fixed,
They are only valid for some good number of processors(1,2,3,4,6,8,12,16,24,32,48 etc).
Recently there are more requests for parallel tests to be valid on some odd number of processes such as 5,7,11,13 etc.
Solution:
I change the array size to be dynamic rather than static. Now the fastest change array size is a function of mpi_size. dim2 = constant *mpi_size. After some tunings, theoretically the above tests should be valid for any number of processors. However, other parallel tests still need to be tuned.
To verify the correctness of these tests, using mpirun -np 5 ./testphdf5 -b cchunk1 at heping.
Platforms tested:
h5committest(shanti is refused to be connected)
at heping, 5 and 7 processes are used to verify the correctness.
Misc. update:
2006-03-23 10:50:09 +08:00
|
|
|
dims[0] = SPACE_DIM1*mpi_size;
|
2005-10-18 04:48:16 +08:00
|
|
|
dims[1] = SPACE_DIM2;
|
2005-08-14 04:53:35 +08:00
|
|
|
|
2004-07-21 05:41:44 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
/* allocate memory for data buffer */
|
[svn-r12142] Purpose:
change the array size of collective chunking features of parallel tests.
Description:
Previously array size for collective optimization tests
including
cchunk1,
cchunk2,
cchunk3,
cchunk4,
ccontw,
ccontr,
cschunkw,
cschunkr,
ccchunkw,
ccchunkr
are fixed,
They are only valid for some good number of processors(1,2,3,4,6,8,12,16,24,32,48 etc).
Recently there are more requests for parallel tests to be valid on some odd number of processes such as 5,7,11,13 etc.
Solution:
I change the array size to be dynamic rather than static. Now the fastest change array size is a function of mpi_size. dim2 = constant *mpi_size. After some tunings, theoretically the above tests should be valid for any number of processors. However, other parallel tests still need to be tuned.
To verify the correctness of these tests, using mpirun -np 5 ./testphdf5 -b cchunk1 at heping.
Platforms tested:
h5committest(shanti is refused to be connected)
at heping, 5 and 7 processes are used to verify the correctness.
Misc. update:
2006-03-23 10:50:09 +08:00
|
|
|
data_array1 = (int *)malloc(dims[0]*dims[1]*sizeof(int));
|
2005-10-18 04:48:16 +08:00
|
|
|
VRFY((data_array1 != NULL), "data_array1 malloc succeeded");
|
2004-07-21 05:41:44 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
/* set up dimensions of the slab this process accesses */
|
|
|
|
ccslab_set(mpi_rank, mpi_size, start, count, stride, block, select_factor);
|
2004-07-21 05:41:44 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
file_dataspace = H5Screate_simple(2, dims, NULL);
|
|
|
|
VRFY((file_dataspace >= 0),"file dataspace created succeeded");
|
2004-07-21 05:41:44 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
crp_plist = H5Pcreate(H5P_DATASET_CREATE);
|
|
|
|
VRFY((crp_plist >= 0),"");
|
2004-07-21 05:41:44 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
/* Set up chunk information. */
|
[svn-r12142] Purpose:
change the array size of collective chunking features of parallel tests.
Description:
Previously array size for collective optimization tests
including
cchunk1,
cchunk2,
cchunk3,
cchunk4,
ccontw,
ccontr,
cschunkw,
cschunkr,
ccchunkw,
ccchunkr
are fixed,
They are only valid for some good number of processors(1,2,3,4,6,8,12,16,24,32,48 etc).
Recently there are more requests for parallel tests to be valid on some odd number of processes such as 5,7,11,13 etc.
Solution:
I change the array size to be dynamic rather than static. Now the fastest change array size is a function of mpi_size. dim2 = constant *mpi_size. After some tunings, theoretically the above tests should be valid for any number of processors. However, other parallel tests still need to be tuned.
To verify the correctness of these tests, using mpirun -np 5 ./testphdf5 -b cchunk1 at heping.
Platforms tested:
h5committest(shanti is refused to be connected)
at heping, 5 and 7 processes are used to verify the correctness.
Misc. update:
2006-03-23 10:50:09 +08:00
|
|
|
chunk_dims[0] = dims[0]/chunk_factor;
|
2005-08-14 04:53:35 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
/* to decrease the testing time, maintain bigger chunk size */
|
|
|
|
|
|
|
|
(chunk_factor == 1) ? (chunk_dims[1] = SPACE_DIM2) : (chunk_dims[1] = SPACE_DIM2/2);
|
|
|
|
status = H5Pset_chunk(crp_plist, 2, chunk_dims);
|
|
|
|
VRFY((status >= 0),"chunk creation property list succeeded");
|
2005-07-13 03:26:26 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
dataset = H5Dcreate(file,DSET_COLLECTIVE_CHUNK_NAME,H5T_NATIVE_INT,
|
|
|
|
file_dataspace,crp_plist);
|
|
|
|
VRFY((dataset >= 0),"dataset created succeeded");
|
2005-08-14 04:53:35 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
status = H5Pclose(crp_plist);
|
|
|
|
VRFY((status >= 0),"");
|
2004-07-21 05:41:44 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
/*put some trivial data in the data array */
|
|
|
|
ccdataset_fill(start, stride,count,block, data_array1);
|
|
|
|
MESG("data_array initialized");
|
2004-07-21 05:41:44 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
status=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride,
|
|
|
|
count, block);
|
|
|
|
VRFY((status >= 0),"hyperslab selection succeeded");
|
2004-07-21 05:41:44 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
/* set up the collective transfer property list */
|
|
|
|
xfer_plist = H5Pcreate(H5P_DATASET_XFER);
|
|
|
|
VRFY((xfer_plist >= 0),"");
|
2004-07-21 05:41:44 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
status = H5Pset_dxpl_mpio(xfer_plist, H5FD_MPIO_COLLECTIVE);
|
|
|
|
VRFY((status>= 0),"MPIO collective transfer property succeeded");
|
2004-07-21 05:41:44 +08:00
|
|
|
|
2006-03-29 22:35:26 +08:00
|
|
|
switch(api_option){
|
|
|
|
case API_LINK_HARD:
|
|
|
|
status = H5Pset_dxpl_mpio_chunk_opt(xfer_plist,H5FD_MPIO_OPT_ONE_IO);
|
|
|
|
VRFY((status>= 0),"collective chunk optimization succeeded");
|
|
|
|
break;
|
|
|
|
case API_MULTI_HARD:
|
|
|
|
status = H5Pset_dxpl_mpio_chunk_opt(xfer_plist,H5FD_MPIO_OPT_MULTI_IO);
|
|
|
|
VRFY((status>= 0),"collective chunk optimization succeeded ");
|
|
|
|
break;
|
|
|
|
case API_LINK_TRUE:
|
|
|
|
status = H5Pset_dxpl_mpio_chunk_opt_num(xfer_plist,2);
|
|
|
|
VRFY((status>= 0),"collective chunk optimization set chunk number succeeded");
|
|
|
|
break;
|
|
|
|
case API_LINK_FALSE:
|
|
|
|
status = H5Pset_dxpl_mpio_chunk_opt_num(xfer_plist,6);
|
|
|
|
VRFY((status>= 0),"collective chunk optimization set chunk number succeeded");
|
|
|
|
break;
|
|
|
|
case API_MULTI_COLL:
|
|
|
|
status = H5Pset_dxpl_mpio_chunk_opt_num(xfer_plist,8);/* make sure it is using multi-chunk IO */
|
|
|
|
VRFY((status>= 0),"collective chunk optimization set chunk number succeeded");
|
|
|
|
status = H5Pset_dxpl_mpio_chunk_opt_ratio(xfer_plist,50);
|
|
|
|
VRFY((status>= 0),"collective chunk optimization set chunk ratio succeeded");
|
|
|
|
break;
|
|
|
|
case API_MULTI_IND:
|
|
|
|
status = H5Pset_dxpl_mpio_chunk_opt_num(xfer_plist,8);/* make sure it is using multi-chunk IO */
|
|
|
|
VRFY((status>= 0),"collective chunk optimization set chunk number succeeded");
|
|
|
|
status = H5Pset_dxpl_mpio_chunk_opt_ratio(xfer_plist,100);
|
|
|
|
VRFY((status>= 0),"collective chunk optimization set chunk ratio succeeded");
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
;
|
|
|
|
}
|
|
|
|
|
|
|
|
#ifdef H5_HAVE_INSTRUMENTED_LIBRARY
|
|
|
|
if(facc_type == FACC_MPIO) {
|
|
|
|
switch(api_option){
|
|
|
|
case API_LINK_HARD:
|
|
|
|
prop_value = H5D_XFER_COLL_CHUNK_DEF;
|
|
|
|
status = H5Pinsert(xfer_plist,H5D_XFER_COLL_CHUNK_LINK_HARD_NAME,H5D_XFER_COLL_CHUNK_SIZE,&prop_value,
|
|
|
|
NULL,NULL,NULL,NULL,NULL,NULL);
|
|
|
|
VRFY((status >= 0),"testing property list inserted succeeded");
|
|
|
|
break;
|
|
|
|
case API_MULTI_HARD:
|
|
|
|
prop_value = H5D_XFER_COLL_CHUNK_DEF;
|
|
|
|
status = H5Pinsert(xfer_plist,H5D_XFER_COLL_CHUNK_MULTI_HARD_NAME,H5D_XFER_COLL_CHUNK_SIZE,&prop_value,
|
|
|
|
NULL,NULL,NULL,NULL,NULL,NULL);
|
|
|
|
VRFY((status >= 0),"testing property list inserted succeeded");
|
|
|
|
break;
|
|
|
|
case API_LINK_TRUE:
|
|
|
|
prop_value = H5D_XFER_COLL_CHUNK_DEF;
|
|
|
|
status = H5Pinsert(xfer_plist,H5D_XFER_COLL_CHUNK_LINK_NUM_TRUE_NAME,H5D_XFER_COLL_CHUNK_SIZE,&prop_value,
|
|
|
|
NULL,NULL,NULL,NULL,NULL,NULL);
|
|
|
|
VRFY((status >= 0),"testing property list inserted succeeded");
|
|
|
|
break;
|
|
|
|
case API_LINK_FALSE:
|
|
|
|
prop_value = H5D_XFER_COLL_CHUNK_DEF;
|
|
|
|
status = H5Pinsert(xfer_plist,H5D_XFER_COLL_CHUNK_LINK_NUM_FALSE_NAME,H5D_XFER_COLL_CHUNK_SIZE,&prop_value,
|
|
|
|
NULL,NULL,NULL,NULL,NULL,NULL);
|
|
|
|
VRFY((status >= 0),"testing property list inserted succeeded");
|
|
|
|
|
|
|
|
break;
|
|
|
|
case API_MULTI_COLL:
|
|
|
|
prop_value = H5D_XFER_COLL_CHUNK_DEF;
|
|
|
|
status = H5Pinsert(xfer_plist,H5D_XFER_COLL_CHUNK_MULTI_RATIO_COLL_NAME,H5D_XFER_COLL_CHUNK_SIZE,&prop_value,
|
|
|
|
NULL,NULL,NULL,NULL,NULL,NULL);
|
|
|
|
VRFY((status >= 0),"testing property list inserted succeeded");
|
|
|
|
|
|
|
|
break;
|
|
|
|
case API_MULTI_IND:
|
|
|
|
prop_value = H5D_XFER_COLL_CHUNK_DEF;
|
|
|
|
status = H5Pinsert(xfer_plist,H5D_XFER_COLL_CHUNK_MULTI_RATIO_IND_NAME,H5D_XFER_COLL_CHUNK_SIZE,&prop_value,
|
|
|
|
NULL,NULL,NULL,NULL,NULL,NULL);
|
|
|
|
VRFY((status >= 0),"testing property list inserted succeeded");
|
|
|
|
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
/* write data collectively */
|
|
|
|
status = H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, file_dataspace,
|
|
|
|
xfer_plist, data_array1);
|
|
|
|
VRFY((status >= 0),"dataset write succeeded");
|
2004-07-21 05:41:44 +08:00
|
|
|
|
2006-03-29 22:35:26 +08:00
|
|
|
#ifdef H5_HAVE_INSTRUMENTED_LIBRARY
|
|
|
|
if(facc_type == FACC_MPIO) {
|
|
|
|
switch(api_option){
|
|
|
|
case API_LINK_HARD:
|
|
|
|
status = H5Pget(xfer_plist,H5D_XFER_COLL_CHUNK_LINK_HARD_NAME,&prop_value);
|
|
|
|
VRFY((status >= 0),"testing property list get succeeded");
|
|
|
|
VRFY((prop_value == 0),"API to set LINK COLLECTIVE IO without optimization succeeded");
|
|
|
|
break;
|
|
|
|
case API_MULTI_HARD:
|
|
|
|
status = H5Pget(xfer_plist,H5D_XFER_COLL_CHUNK_MULTI_HARD_NAME,&prop_value);
|
|
|
|
VRFY((status >= 0),"testing property list get succeeded");
|
|
|
|
VRFY((prop_value == 0),"API to set MULTI-CHUNK COLLECTIVE IO without optimization succeeded");
|
|
|
|
break;
|
|
|
|
case API_LINK_TRUE:
|
|
|
|
status = H5Pget(xfer_plist,H5D_XFER_COLL_CHUNK_LINK_NUM_TRUE_NAME,&prop_value);
|
|
|
|
VRFY((status >= 0),"testing property list get succeeded");
|
|
|
|
VRFY((prop_value == 0),"API to set LINK COLLECTIVE IO with true optimization succeeded");
|
|
|
|
break;
|
|
|
|
case API_LINK_FALSE:
|
|
|
|
status = H5Pget(xfer_plist,H5D_XFER_COLL_CHUNK_LINK_NUM_FALSE_NAME,&prop_value);
|
|
|
|
VRFY((status >= 0),"testing property list get succeeded");
|
|
|
|
VRFY((prop_value == 0),"API to set LINK IO transferring to multi-chunk IO succeeded");
|
|
|
|
break;
|
|
|
|
case API_MULTI_COLL:
|
|
|
|
status = H5Pget(xfer_plist,H5D_XFER_COLL_CHUNK_MULTI_RATIO_COLL_NAME,&prop_value);
|
|
|
|
VRFY((status >= 0),"testing property list get succeeded");
|
|
|
|
VRFY((prop_value == 0),"API to set MULTI-CHUNK COLLECTIVE IO with optimization succeeded");
|
|
|
|
break;
|
|
|
|
case API_MULTI_IND:
|
|
|
|
status = H5Pget(xfer_plist,H5D_XFER_COLL_CHUNK_MULTI_RATIO_IND_NAME,&prop_value);
|
|
|
|
VRFY((status >= 0),"testing property list get succeeded");
|
|
|
|
VRFY((prop_value == 0),"API to set MULTI-CHUNK IO transferring to independent IO succeeded");
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
status = H5Dclose(dataset);
|
|
|
|
VRFY((status >= 0),"");
|
2004-07-21 05:41:44 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
status = H5Pclose(xfer_plist);
|
|
|
|
VRFY((status >= 0),"property list closed");
|
2004-07-21 05:41:44 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
status = H5Sclose(file_dataspace);
|
|
|
|
VRFY((status >= 0),"");
|
2004-07-21 05:41:44 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
status = H5Fclose(file);
|
|
|
|
VRFY((status >= 0),"");
|
2004-07-21 05:41:44 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
if (data_array1) HDfree(data_array1);
|
2004-07-21 05:41:44 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
|
|
|
|
/* Use collective read to verify the correctness of collective write. */
|
2004-07-21 05:41:44 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
/* allocate memory for data buffer */
|
[svn-r12142] Purpose:
change the array size of collective chunking features of parallel tests.
Description:
Previously array size for collective optimization tests
including
cchunk1,
cchunk2,
cchunk3,
cchunk4,
ccontw,
ccontr,
cschunkw,
cschunkr,
ccchunkw,
ccchunkr
are fixed,
They are only valid for some good number of processors(1,2,3,4,6,8,12,16,24,32,48 etc).
Recently there are more requests for parallel tests to be valid on some odd number of processes such as 5,7,11,13 etc.
Solution:
I change the array size to be dynamic rather than static. Now the fastest change array size is a function of mpi_size. dim2 = constant *mpi_size. After some tunings, theoretically the above tests should be valid for any number of processors. However, other parallel tests still need to be tuned.
To verify the correctness of these tests, using mpirun -np 5 ./testphdf5 -b cchunk1 at heping.
Platforms tested:
h5committest(shanti is refused to be connected)
at heping, 5 and 7 processes are used to verify the correctness.
Misc. update:
2006-03-23 10:50:09 +08:00
|
|
|
data_array1 = (int *)malloc(dims[0]*dims[1]*sizeof(int));
|
2005-10-18 04:48:16 +08:00
|
|
|
VRFY((data_array1 != NULL), "data_array1 malloc succeeded");
|
2004-07-21 05:41:44 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
/* allocate memory for data buffer */
|
[svn-r12142] Purpose:
change the array size of collective chunking features of parallel tests.
Description:
Previously array size for collective optimization tests
including
cchunk1,
cchunk2,
cchunk3,
cchunk4,
ccontw,
ccontr,
cschunkw,
cschunkr,
ccchunkw,
ccchunkr
are fixed,
They are only valid for some good number of processors(1,2,3,4,6,8,12,16,24,32,48 etc).
Recently there are more requests for parallel tests to be valid on some odd number of processes such as 5,7,11,13 etc.
Solution:
I change the array size to be dynamic rather than static. Now the fastest change array size is a function of mpi_size. dim2 = constant *mpi_size. After some tunings, theoretically the above tests should be valid for any number of processors. However, other parallel tests still need to be tuned.
To verify the correctness of these tests, using mpirun -np 5 ./testphdf5 -b cchunk1 at heping.
Platforms tested:
h5committest(shanti is refused to be connected)
at heping, 5 and 7 processes are used to verify the correctness.
Misc. update:
2006-03-23 10:50:09 +08:00
|
|
|
data_origin1 = (int *)malloc(dims[0]*dims[1]*sizeof(int));
|
2005-10-18 04:48:16 +08:00
|
|
|
VRFY((data_origin1 != NULL), "data_origin1 malloc succeeded");
|
2004-07-21 05:41:44 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
acc_plist = create_faccess_plist(comm, info, facc_type, use_gpfs);
|
|
|
|
VRFY((acc_plist >= 0),"MPIO creation property list succeeded");
|
2004-07-21 05:41:44 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
file = H5Fopen(filename,H5F_ACC_RDONLY,acc_plist);
|
|
|
|
VRFY((file >= 0),"H5Fcreate succeeded");
|
2004-07-21 05:41:44 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
status = H5Pclose(acc_plist);
|
|
|
|
VRFY((status >= 0),"");
|
2005-08-14 04:53:35 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
/* open the collective dataset*/
|
|
|
|
dataset = H5Dopen(file, DSET_COLLECTIVE_CHUNK_NAME);
|
|
|
|
VRFY((dataset >= 0), "");
|
2004-07-21 05:41:44 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
/* set up dimensions of the slab this process accesses */
|
|
|
|
ccslab_set(mpi_rank, mpi_size, start, count, stride, block, select_factor);
|
2004-07-21 05:41:44 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
/* obtain the file dataspace*/
|
|
|
|
file_dataspace = H5Dget_space (dataset);
|
|
|
|
VRFY((file_dataspace >= 0), "");
|
2004-07-21 05:41:44 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
status=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, block);
|
|
|
|
VRFY((status >= 0), "");
|
2004-07-21 05:41:44 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
/* fill dataset with test data */
|
|
|
|
ccdataset_fill(start, stride,count,block, data_origin1);
|
|
|
|
xfer_plist = H5Pcreate (H5P_DATASET_XFER);
|
|
|
|
VRFY((xfer_plist >= 0),"");
|
2004-07-21 05:41:44 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
status = H5Pset_dxpl_mpio(xfer_plist, H5FD_MPIO_COLLECTIVE);
|
|
|
|
VRFY((status>= 0),"MPIO collective transfer property succeeded");
|
2004-07-22 07:42:10 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
status = H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, file_dataspace,
|
|
|
|
xfer_plist, data_array1);
|
|
|
|
VRFY((status >=0),"dataset read succeeded");
|
2004-07-21 05:41:44 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
/* verify the read data with original expected data */
|
|
|
|
status = ccdataset_vrfy(start, count, stride, block, data_array1, data_origin1);
|
|
|
|
if (status) nerrors++;
|
2004-07-21 05:41:44 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
status = H5Pclose(xfer_plist);
|
|
|
|
VRFY((status >= 0),"property list closed");
|
2004-07-21 05:41:44 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
/* close dataset collectively */
|
|
|
|
status=H5Dclose(dataset);
|
|
|
|
VRFY((status >= 0), "");
|
2004-07-21 05:41:44 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
/* release all IDs created */
|
|
|
|
H5Sclose(file_dataspace);
|
2004-07-21 05:41:44 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
/* close the file collectively */
|
|
|
|
H5Fclose(file);
|
2004-07-21 05:41:44 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
/* release data buffers */
|
|
|
|
if (data_array1) free(data_array1);
|
|
|
|
if (data_origin1) free(data_origin1);
|
2005-08-14 04:53:35 +08:00
|
|
|
|
2004-07-21 05:41:44 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
/* Set up the selection */
|
2004-07-23 04:46:27 +08:00
|
|
|
static void
|
2005-10-18 04:48:16 +08:00
|
|
|
ccslab_set(int mpi_rank,
|
|
|
|
int mpi_size,
|
|
|
|
hsize_t start[],
|
|
|
|
hsize_t count[],
|
|
|
|
hsize_t stride[],
|
|
|
|
hsize_t block[],
|
|
|
|
int mode)
|
2004-07-21 05:41:44 +08:00
|
|
|
{
|
2006-03-24 05:18:02 +08:00
|
|
|
|
2004-07-21 05:41:44 +08:00
|
|
|
switch (mode){
|
2005-10-18 04:48:16 +08:00
|
|
|
|
2004-07-21 05:41:44 +08:00
|
|
|
case BYROW_CONT:
|
|
|
|
/* Each process takes a slabs of rows. */
|
2005-10-18 04:48:16 +08:00
|
|
|
block[0] = 1;
|
|
|
|
block[1] = 1;
|
|
|
|
stride[0] = 1;
|
|
|
|
stride[1] = 1;
|
[svn-r12142] Purpose:
change the array size of collective chunking features of parallel tests.
Description:
Previously array size for collective optimization tests
including
cchunk1,
cchunk2,
cchunk3,
cchunk4,
ccontw,
ccontr,
cschunkw,
cschunkr,
ccchunkw,
ccchunkr
are fixed,
They are only valid for some good number of processors(1,2,3,4,6,8,12,16,24,32,48 etc).
Recently there are more requests for parallel tests to be valid on some odd number of processes such as 5,7,11,13 etc.
Solution:
I change the array size to be dynamic rather than static. Now the fastest change array size is a function of mpi_size. dim2 = constant *mpi_size. After some tunings, theoretically the above tests should be valid for any number of processors. However, other parallel tests still need to be tuned.
To verify the correctness of these tests, using mpirun -np 5 ./testphdf5 -b cchunk1 at heping.
Platforms tested:
h5committest(shanti is refused to be connected)
at heping, 5 and 7 processes are used to verify the correctness.
Misc. update:
2006-03-23 10:50:09 +08:00
|
|
|
count[0] = SPACE_DIM1;
|
2005-10-18 04:48:16 +08:00
|
|
|
count[1] = SPACE_DIM2;
|
|
|
|
start[0] = mpi_rank*count[0];
|
|
|
|
start[1] = 0;
|
2004-07-21 05:41:44 +08:00
|
|
|
|
|
|
|
break;
|
2005-10-18 04:48:16 +08:00
|
|
|
|
2004-07-21 05:41:44 +08:00
|
|
|
case BYROW_DISCONT:
|
|
|
|
/* Each process takes several disjoint blocks. */
|
2005-10-18 04:48:16 +08:00
|
|
|
block[0] = 1;
|
|
|
|
block[1] = 1;
|
|
|
|
stride[0] = 3;
|
|
|
|
stride[1] = 3;
|
[svn-r12142] Purpose:
change the array size of collective chunking features of parallel tests.
Description:
Previously array size for collective optimization tests
including
cchunk1,
cchunk2,
cchunk3,
cchunk4,
ccontw,
ccontr,
cschunkw,
cschunkr,
ccchunkw,
ccchunkr
are fixed,
They are only valid for some good number of processors(1,2,3,4,6,8,12,16,24,32,48 etc).
Recently there are more requests for parallel tests to be valid on some odd number of processes such as 5,7,11,13 etc.
Solution:
I change the array size to be dynamic rather than static. Now the fastest change array size is a function of mpi_size. dim2 = constant *mpi_size. After some tunings, theoretically the above tests should be valid for any number of processors. However, other parallel tests still need to be tuned.
To verify the correctness of these tests, using mpirun -np 5 ./testphdf5 -b cchunk1 at heping.
Platforms tested:
h5committest(shanti is refused to be connected)
at heping, 5 and 7 processes are used to verify the correctness.
Misc. update:
2006-03-23 10:50:09 +08:00
|
|
|
count[0] = SPACE_DIM1/(stride[0]*block[0]);
|
2005-10-18 04:48:16 +08:00
|
|
|
count[1] = (SPACE_DIM2)/(stride[1]*block[1]);
|
[svn-r12142] Purpose:
change the array size of collective chunking features of parallel tests.
Description:
Previously array size for collective optimization tests
including
cchunk1,
cchunk2,
cchunk3,
cchunk4,
ccontw,
ccontr,
cschunkw,
cschunkr,
ccchunkw,
ccchunkr
are fixed,
They are only valid for some good number of processors(1,2,3,4,6,8,12,16,24,32,48 etc).
Recently there are more requests for parallel tests to be valid on some odd number of processes such as 5,7,11,13 etc.
Solution:
I change the array size to be dynamic rather than static. Now the fastest change array size is a function of mpi_size. dim2 = constant *mpi_size. After some tunings, theoretically the above tests should be valid for any number of processors. However, other parallel tests still need to be tuned.
To verify the correctness of these tests, using mpirun -np 5 ./testphdf5 -b cchunk1 at heping.
Platforms tested:
h5committest(shanti is refused to be connected)
at heping, 5 and 7 processes are used to verify the correctness.
Misc. update:
2006-03-23 10:50:09 +08:00
|
|
|
start[0] = SPACE_DIM1*mpi_rank;
|
2005-10-18 04:48:16 +08:00
|
|
|
start[1] = 0;
|
|
|
|
|
2004-07-21 05:41:44 +08:00
|
|
|
break;
|
2006-02-17 01:12:08 +08:00
|
|
|
|
|
|
|
case BYROW_SELECTNONE:
|
|
|
|
/* Each process takes a slabs of rows, there are
|
|
|
|
no selections for the last process. */
|
|
|
|
block[0] = 1;
|
|
|
|
block[1] = 1;
|
|
|
|
stride[0] = 1;
|
|
|
|
stride[1] = 1;
|
[svn-r12142] Purpose:
change the array size of collective chunking features of parallel tests.
Description:
Previously array size for collective optimization tests
including
cchunk1,
cchunk2,
cchunk3,
cchunk4,
ccontw,
ccontr,
cschunkw,
cschunkr,
ccchunkw,
ccchunkr
are fixed,
They are only valid for some good number of processors(1,2,3,4,6,8,12,16,24,32,48 etc).
Recently there are more requests for parallel tests to be valid on some odd number of processes such as 5,7,11,13 etc.
Solution:
I change the array size to be dynamic rather than static. Now the fastest change array size is a function of mpi_size. dim2 = constant *mpi_size. After some tunings, theoretically the above tests should be valid for any number of processors. However, other parallel tests still need to be tuned.
To verify the correctness of these tests, using mpirun -np 5 ./testphdf5 -b cchunk1 at heping.
Platforms tested:
h5committest(shanti is refused to be connected)
at heping, 5 and 7 processes are used to verify the correctness.
Misc. update:
2006-03-23 10:50:09 +08:00
|
|
|
count[0] = ((mpi_rank >= MAX(1,(mpi_size-2)))?0:SPACE_DIM1);
|
2006-02-17 01:12:08 +08:00
|
|
|
count[1] = SPACE_DIM2;
|
|
|
|
start[0] = mpi_rank*count[0];
|
|
|
|
start[1] = 0;
|
|
|
|
|
|
|
|
break;
|
2006-03-24 05:18:02 +08:00
|
|
|
|
|
|
|
case BYROW_SELECTUNBALANCE:
|
|
|
|
/* The first one-third of the number of processes only
|
|
|
|
select top half of the domain, The rest will select the bottom
|
|
|
|
half of the domain. */
|
|
|
|
|
|
|
|
block[0] = 1;
|
|
|
|
count[0] = 2;
|
|
|
|
stride[0] = SPACE_DIM1*mpi_size/4+1;
|
|
|
|
block[1] = SPACE_DIM2;
|
|
|
|
count[1] = 1;
|
|
|
|
start[1] = 0;
|
|
|
|
stride[1] = 1;
|
|
|
|
if((mpi_rank *3)<(mpi_size*2)) start[0] = mpi_rank;
|
2006-03-29 22:35:26 +08:00
|
|
|
else start[0] = 1 + SPACE_DIM1*mpi_size/2 + (mpi_rank-2*mpi_size/3);
|
|
|
|
break;
|
2006-03-24 05:18:02 +08:00
|
|
|
|
|
|
|
case BYROW_SELECTINCHUNK:
|
|
|
|
/* Each process will only select one chunk */
|
|
|
|
|
|
|
|
block[0] = 1;
|
|
|
|
count[0] = 1;
|
|
|
|
start[0] = mpi_rank*SPACE_DIM1;
|
|
|
|
stride[0]= 1;
|
|
|
|
block[1] = SPACE_DIM2;
|
|
|
|
count[1] = 1;
|
|
|
|
stride[1]= 1;
|
|
|
|
start[1] = 0;
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
2004-07-21 05:41:44 +08:00
|
|
|
default:
|
|
|
|
/* Unknown mode. Set it to cover the whole dataset. */
|
[svn-r12142] Purpose:
change the array size of collective chunking features of parallel tests.
Description:
Previously array size for collective optimization tests
including
cchunk1,
cchunk2,
cchunk3,
cchunk4,
ccontw,
ccontr,
cschunkw,
cschunkr,
ccchunkw,
ccchunkr
are fixed,
They are only valid for some good number of processors(1,2,3,4,6,8,12,16,24,32,48 etc).
Recently there are more requests for parallel tests to be valid on some odd number of processes such as 5,7,11,13 etc.
Solution:
I change the array size to be dynamic rather than static. Now the fastest change array size is a function of mpi_size. dim2 = constant *mpi_size. After some tunings, theoretically the above tests should be valid for any number of processors. However, other parallel tests still need to be tuned.
To verify the correctness of these tests, using mpirun -np 5 ./testphdf5 -b cchunk1 at heping.
Platforms tested:
h5committest(shanti is refused to be connected)
at heping, 5 and 7 processes are used to verify the correctness.
Misc. update:
2006-03-23 10:50:09 +08:00
|
|
|
block[0] = SPACE_DIM1*mpi_size;
|
2005-10-18 04:48:16 +08:00
|
|
|
block[1] = SPACE_DIM2;
|
2004-07-21 05:41:44 +08:00
|
|
|
stride[0] = block[0];
|
|
|
|
stride[1] = block[1];
|
2005-10-18 04:48:16 +08:00
|
|
|
count[0] = 1;
|
|
|
|
count[1] = 1;
|
|
|
|
start[0] = 0;
|
|
|
|
start[1] = 0;
|
|
|
|
|
2004-07-21 05:41:44 +08:00
|
|
|
break;
|
|
|
|
}
|
2005-10-18 04:48:16 +08:00
|
|
|
if (VERBOSE_MED){
|
|
|
|
printf("start[]=(%lu,%lu), count[]=(%lu,%lu), stride[]=(%lu,%lu), block[]=(%lu,%lu), total datapoints=%lu\n",
|
2004-12-29 22:26:20 +08:00
|
|
|
(unsigned long)start[0], (unsigned long)start[1], (unsigned long)count[0], (unsigned long)count[1],
|
2004-07-21 05:41:44 +08:00
|
|
|
(unsigned long)stride[0], (unsigned long)stride[1], (unsigned long)block[0], (unsigned long)block[1],
|
|
|
|
(unsigned long)(block[0]*block[1]*count[0]*count[1]));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Fill the dataset with trivial data for testing.
|
2005-10-18 04:48:16 +08:00
|
|
|
* Assume dimension rank is 2.
|
2004-07-21 05:41:44 +08:00
|
|
|
*/
|
2004-07-23 04:46:27 +08:00
|
|
|
static void
|
2005-10-18 04:48:16 +08:00
|
|
|
ccdataset_fill(hsize_t start[],
|
|
|
|
hsize_t stride[],
|
|
|
|
hsize_t count[],
|
|
|
|
hsize_t block[],
|
|
|
|
DATATYPE * dataset)
|
2004-07-21 05:41:44 +08:00
|
|
|
{
|
|
|
|
DATATYPE *dataptr = dataset;
|
2004-07-23 04:46:27 +08:00
|
|
|
DATATYPE *tmptr;
|
2005-10-18 04:48:16 +08:00
|
|
|
hsize_t i,j,k1,k2;
|
2004-07-21 05:41:44 +08:00
|
|
|
|
|
|
|
/* put some trivial data in the data_array */
|
|
|
|
tmptr = dataptr;
|
|
|
|
|
|
|
|
/* assign the disjoint block (two-dimensional)data array value
|
|
|
|
through the pointer */
|
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
for (k1 = 0; k1 < count[0]; k1++) {
|
|
|
|
for(i = 0; i < block[0]; i++) {
|
|
|
|
for(k2 = 0; k2 < count[1]; k2++) {
|
|
|
|
for(j = 0;j < block[1]; j++) {
|
|
|
|
|
|
|
|
dataptr = tmptr + ((start[0]+k1*stride[0]+i)*SPACE_DIM2+
|
|
|
|
start[1]+k2*stride[1]+j);
|
2005-08-14 04:53:35 +08:00
|
|
|
|
2005-10-18 04:48:16 +08:00
|
|
|
*dataptr = (DATATYPE)(k1+k2+i+j);
|
2004-07-21 05:41:44 +08:00
|
|
|
}
|
2005-10-18 04:48:16 +08:00
|
|
|
}
|
2005-08-14 04:53:35 +08:00
|
|
|
}
|
2004-07-21 05:41:44 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Print the first block of the content of the dataset.
|
|
|
|
*/
|
2004-07-23 04:46:27 +08:00
|
|
|
static void
|
2005-10-18 04:48:16 +08:00
|
|
|
ccdataset_print(hsize_t start[],
|
|
|
|
hsize_t block[],
|
|
|
|
DATATYPE * dataset)
|
|
|
|
|
2004-07-21 05:41:44 +08:00
|
|
|
{
|
|
|
|
DATATYPE *dataptr = dataset;
|
|
|
|
hsize_t i, j;
|
|
|
|
|
|
|
|
/* print the column heading */
|
|
|
|
printf("Print only the first block of the dataset\n");
|
|
|
|
printf("%-8s", "Cols:");
|
|
|
|
for (j=0; j < block[1]; j++){
|
2004-12-29 22:26:20 +08:00
|
|
|
printf("%3lu ", (unsigned long)(start[1]+j));
|
2004-07-21 05:41:44 +08:00
|
|
|
}
|
|
|
|
printf("\n");
|
|
|
|
|
|
|
|
/* print the slab data */
|
|
|
|
for (i=0; i < block[0]; i++){
|
2004-12-29 22:26:20 +08:00
|
|
|
printf("Row %2lu: ", (unsigned long)(i+start[0]));
|
2004-07-21 05:41:44 +08:00
|
|
|
for (j=0; j < block[1]; j++){
|
|
|
|
printf("%03d ", *dataptr++);
|
|
|
|
}
|
|
|
|
printf("\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Print the content of the dataset.
|
|
|
|
*/
|
2004-07-23 04:46:27 +08:00
|
|
|
static int
|
2005-10-18 04:48:16 +08:00
|
|
|
ccdataset_vrfy(hsize_t start[],
|
|
|
|
hsize_t count[],
|
|
|
|
hsize_t stride[],
|
|
|
|
hsize_t block[],
|
|
|
|
DATATYPE *dataset,
|
|
|
|
DATATYPE *original)
|
2004-07-21 05:41:44 +08:00
|
|
|
{
|
|
|
|
hsize_t i, j,k1,k2;
|
|
|
|
int vrfyerrs;
|
|
|
|
DATATYPE *dataptr,*oriptr;
|
|
|
|
|
|
|
|
/* print it if VERBOSE_MED */
|
|
|
|
if (VERBOSE_MED) {
|
|
|
|
printf("dataset_vrfy dumping:::\n");
|
2004-12-29 22:26:20 +08:00
|
|
|
printf("start(%lu, %lu), count(%lu, %lu), stride(%lu, %lu), block(%lu, %lu)\n",
|
|
|
|
(unsigned long)start[0], (unsigned long)start[1], (unsigned long)count[0], (unsigned long)count[1],
|
2004-07-21 05:41:44 +08:00
|
|
|
(unsigned long)stride[0], (unsigned long)stride[1], (unsigned long)block[0], (unsigned long)block[1]);
|
|
|
|
printf("original values:\n");
|
|
|
|
ccdataset_print(start, block, original);
|
|
|
|
printf("compared values:\n");
|
|
|
|
ccdataset_print(start, block, dataset);
|
|
|
|
}
|
|
|
|
|
|
|
|
vrfyerrs = 0;
|
2005-08-14 04:53:35 +08:00
|
|
|
|
2004-07-21 05:41:44 +08:00
|
|
|
for (k1 = 0; k1 < count[0];k1++) {
|
|
|
|
for(i = 0;i < block[0];i++) {
|
|
|
|
for(k2 = 0; k2<count[1];k2++) {
|
|
|
|
for(j=0;j<block[1];j++) {
|
|
|
|
|
|
|
|
dataptr = dataset + ((start[0]+k1*stride[0]+i)*SPACE_DIM2+
|
2005-10-18 04:48:16 +08:00
|
|
|
start[1]+k2*stride[1]+j);
|
2004-07-21 05:41:44 +08:00
|
|
|
oriptr = original + ((start[0]+k1*stride[0]+i)*SPACE_DIM2+
|
2005-10-18 04:48:16 +08:00
|
|
|
start[1]+k2*stride[1]+j);
|
2005-08-14 04:53:35 +08:00
|
|
|
|
2004-07-21 05:41:44 +08:00
|
|
|
if (*dataptr != *oriptr){
|
|
|
|
if (vrfyerrs++ < MAX_ERR_REPORT || VERBOSE_MED){
|
2004-12-29 22:26:20 +08:00
|
|
|
printf("Dataset Verify failed at [%lu][%lu]: expect %d, got %d\n",
|
|
|
|
(unsigned long)i, (unsigned long)j,
|
2004-07-21 05:41:44 +08:00
|
|
|
*(original), *(dataset));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (vrfyerrs > MAX_ERR_REPORT && !VERBOSE_MED)
|
|
|
|
printf("[more errors ...]\n");
|
|
|
|
if (vrfyerrs)
|
2005-03-03 01:06:39 +08:00
|
|
|
printf("%d errors found in ccdataset_vrfy\n", vrfyerrs);
|
2004-07-21 05:41:44 +08:00
|
|
|
return(vrfyerrs);
|
|
|
|
}
|