@@ -53,7 +53,7 @@ static char *PrependDir(IOR_param_t *, char *);
53
53
static char * * ParseFileName (char * , int * );
54
54
static void InitTests (IOR_test_t * , MPI_Comm );
55
55
static void TestIoSys (IOR_test_t * );
56
- static void ValidateTests (IOR_param_t * );
56
+ static void ValidateTests (IOR_param_t * params , MPI_Comm com );
57
57
static IOR_offset_t WriteOrRead (IOR_param_t * test , IOR_results_t * results ,
58
58
aiori_fd_t * fd , const int access ,
59
59
IOR_io_buffers * ioBuffers );
@@ -107,12 +107,11 @@ IOR_test_t * ior_run(int argc, char **argv, MPI_Comm world_com, FILE * world_out
107
107
IOR_test_t * tptr ;
108
108
out_logfile = world_out ;
109
109
out_resultfile = world_out ;
110
- mpi_comm_world = world_com ;
111
110
112
- MPI_CHECK (MPI_Comm_rank (mpi_comm_world , & rank ), "cannot get rank" );
111
+ MPI_CHECK (MPI_Comm_rank (world_com , & rank ), "cannot get rank" );
113
112
114
113
/* setup tests, and validate parameters */
115
- tests_head = ParseCommandLine (argc , argv );
114
+ tests_head = ParseCommandLine (argc , argv , world_com );
116
115
InitTests (tests_head , world_com );
117
116
118
117
PrintHeader (argc , argv );
@@ -147,20 +146,19 @@ int ior_main(int argc, char **argv)
147
146
/*
148
147
* check -h option from commandline without starting MPI;
149
148
*/
150
- tests_head = ParseCommandLine (argc , argv );
149
+ tests_head = ParseCommandLine (argc , argv , MPI_COMM_WORLD );
151
150
152
151
/* start the MPI code */
153
152
MPI_CHECK (MPI_Init (& argc , & argv ), "cannot initialize MPI" );
154
153
155
- mpi_comm_world = MPI_COMM_WORLD ;
156
- MPI_CHECK (MPI_Comm_rank (mpi_comm_world , & rank ), "cannot get rank" );
154
+ MPI_CHECK (MPI_Comm_rank (MPI_COMM_WORLD , & rank ), "cannot get rank" );
157
155
158
156
/* set error-handling */
159
157
/*MPI_CHECK(MPI_Errhandler_set(mpi_comm_world, MPI_ERRORS_RETURN),
160
158
"cannot set errhandler"); */
161
159
162
160
/* setup tests, and validate parameters */
163
- InitTests (tests_head , mpi_comm_world );
161
+ InitTests (tests_head , MPI_COMM_WORLD );
164
162
165
163
PrintHeader (argc , argv );
166
164
@@ -201,7 +199,7 @@ int ior_main(int argc, char **argv)
201
199
/*
202
200
* Initialize an IOR_param_t structure to the defaults
203
201
*/
204
- void init_IOR_Param_t (IOR_param_t * p )
202
+ void init_IOR_Param_t (IOR_param_t * p , MPI_Comm com )
205
203
{
206
204
const char * default_aiori = aiori_default ();
207
205
assert (NULL != default_aiori );
@@ -231,7 +229,8 @@ void init_IOR_Param_t(IOR_param_t * p)
231
229
p -> transferSize = 262144 ;
232
230
p -> randomSeed = -1 ;
233
231
p -> incompressibleSeed = 573 ;
234
- p -> testComm = mpi_comm_world ;
232
+ p -> testComm = com ; // this com might change for smaller tests
233
+ p -> mpi_comm_world = com ;
235
234
236
235
p -> URI = NULL ;
237
236
}
@@ -567,7 +566,7 @@ static void DestroyTests(IOR_test_t *tests_head)
567
566
/*
568
567
* Distribute IOR_HINTs to all tasks' environments.
569
568
*/
570
- void DistributeHints (void )
569
+ static void DistributeHints (MPI_Comm com )
571
570
{
572
571
char hint [MAX_HINTS ][MAX_STR ], fullHint [MAX_STR ], hintVariable [MAX_STR ];
573
572
int hintCount = 0 , i ;
@@ -589,9 +588,9 @@ void DistributeHints(void)
589
588
}
590
589
}
591
590
592
- MPI_CHECK (MPI_Bcast (& hintCount , sizeof (hintCount ), MPI_BYTE , 0 , testComm ), "cannot broadcast hints" );
591
+ MPI_CHECK (MPI_Bcast (& hintCount , sizeof (hintCount ), MPI_BYTE , 0 , com ), "cannot broadcast hints" );
593
592
for (i = 0 ; i < hintCount ; i ++ ) {
594
- MPI_CHECK (MPI_Bcast (& hint [i ], MAX_STR , MPI_BYTE , 0 , testComm ),
593
+ MPI_CHECK (MPI_Bcast (& hint [i ], MAX_STR , MPI_BYTE , 0 , com ),
595
594
"cannot broadcast hints" );
596
595
strcpy (fullHint , hint [i ]);
597
596
strcpy (hintVariable , strtok (fullHint , "=" ));
@@ -973,7 +972,7 @@ static void InitTests(IOR_test_t *tests, MPI_Comm com)
973
972
* task 0 has the environment settings for the hints, pass
974
973
* the hint=value pair to everyone else in mpi_comm_world
975
974
*/
976
- DistributeHints ();
975
+ DistributeHints (com );
977
976
978
977
/* check validity of tests and create test queue */
979
978
while (tests != NULL ) {
@@ -1002,7 +1001,7 @@ static void InitTests(IOR_test_t *tests, MPI_Comm com)
1002
1001
params -> expectedAggFileSize =
1003
1002
params -> blockSize * params -> segmentCount * params -> numTasks ;
1004
1003
1005
- ValidateTests (& tests -> params );
1004
+ ValidateTests (& tests -> params , com );
1006
1005
tests = tests -> next ;
1007
1006
}
1008
1007
@@ -1069,7 +1068,7 @@ static void file_hits_histogram(IOR_param_t *params)
1069
1068
}
1070
1069
1071
1070
MPI_CHECK (MPI_Gather (& rankOffset , 1 , MPI_INT , rankoffs ,
1072
- 1 , MPI_INT , 0 , mpi_comm_world ),
1071
+ 1 , MPI_INT , 0 , params -> testComm ),
1073
1072
"MPI_Gather error" );
1074
1073
1075
1074
if (rank != 0 )
@@ -1225,21 +1224,21 @@ static void TestIoSys(IOR_test_t *test)
1225
1224
IOR_io_buffers ioBuffers ;
1226
1225
1227
1226
/* set up communicator for test */
1228
- MPI_CHECK (MPI_Comm_group (mpi_comm_world , & orig_group ),
1227
+ MPI_CHECK (MPI_Comm_group (params -> mpi_comm_world , & orig_group ),
1229
1228
"MPI_Comm_group() error" );
1230
1229
range [0 ] = 0 ; /* first rank */
1231
1230
range [1 ] = params -> numTasks - 1 ; /* last rank */
1232
1231
range [2 ] = 1 ; /* stride */
1233
1232
MPI_CHECK (MPI_Group_range_incl (orig_group , 1 , & range , & new_group ),
1234
1233
"MPI_Group_range_incl() error" );
1235
- MPI_CHECK (MPI_Comm_create (mpi_comm_world , new_group , & testComm ),
1234
+ MPI_CHECK (MPI_Comm_create (params -> mpi_comm_world , new_group , & testComm ),
1236
1235
"MPI_Comm_create() error" );
1237
1236
MPI_CHECK (MPI_Group_free (& orig_group ), "MPI_Group_Free() error" );
1238
1237
MPI_CHECK (MPI_Group_free (& new_group ), "MPI_Group_Free() error" );
1239
1238
params -> testComm = testComm ;
1240
1239
if (testComm == MPI_COMM_NULL ) {
1241
1240
/* tasks not in the group do not participate in this test */
1242
- MPI_CHECK (MPI_Barrier (mpi_comm_world ), "barrier error" );
1241
+ MPI_CHECK (MPI_Barrier (params -> mpi_comm_world ), "barrier error" );
1243
1242
return ;
1244
1243
}
1245
1244
if (rank == 0 && verbose >= VERBOSE_1 ) {
@@ -1536,17 +1535,16 @@ static void TestIoSys(IOR_test_t *test)
1536
1535
free (hog_buf );
1537
1536
1538
1537
/* Sync with the tasks that did not participate in this test */
1539
- MPI_CHECK (MPI_Barrier (mpi_comm_world ), "barrier error" );
1540
-
1538
+ MPI_CHECK (MPI_Barrier (params -> mpi_comm_world ), "barrier error" );
1541
1539
}
1542
1540
1543
1541
/*
1544
1542
* Determine if valid tests from parameters.
1545
1543
*/
1546
- static void ValidateTests (IOR_param_t * test )
1544
+ static void ValidateTests (IOR_param_t * test , MPI_Comm com )
1547
1545
{
1548
1546
IOR_param_t defaults ;
1549
- init_IOR_Param_t (& defaults );
1547
+ init_IOR_Param_t (& defaults , com );
1550
1548
1551
1549
if (test -> repetitions <= 0 )
1552
1550
WARN_RESET ("too few test repetitions" ,
0 commit comments