164
164
return returnVal;
167
#if defined(HAVE_MPITHRD) && HAVE_MPITHRD
169
/* -- MPI_Init_thread -- */
171
int MPI_Init_thread( int* argc, char*** argv,
172
int required, int* provided )
174
int returnVal, numprocs, me, i;
179
/* shall I trace MPI events? */
180
vt_mpi_trace_is_on = vt_mpitrace = vt_env_mpitrace();
183
-> initialize VT and enter dummy function 'user' */
187
time = vt_pform_wtime();
188
vt_enter_user(&time);
189
vt_enter_user_called = 1;
196
time = vt_pform_wtime();
197
vt_enter(&time, vt_mpi_regid[VT__MPI_INIT_THREAD]);
199
returnVal = PMPI_Init_thread(argc, argv, required, provided);
203
case MPI_THREAD_SINGLE:
204
case MPI_THREAD_FUNNELED:
206
case MPI_THREAD_SERIALIZED:
207
case MPI_THREAD_MULTIPLE:
208
if (*provided == MPI_THREAD_SERIALIZED ||
209
*provided == MPI_THREAD_MULTIPLE)
211
vt_error_msg("MPI thread support levels MPI_THREAD_SERIALIZED and "
212
"MPI_THREAD_MULTIPLE not yet supported");
216
vt_error_msg("Unknown level of MPI thread support required");
220
/* initialize mpi event handling */
223
PMPI_Comm_size(MPI_COMM_WORLD, &numprocs);
224
PMPI_Comm_rank(MPI_COMM_WORLD, &me);
226
grpc = numprocs / 8 + (numprocs % 8 ? 1 : 0);
228
/* define communicator for MPI_COMM_WORLD */
229
grpv = (unsigned char*)calloc(grpc, sizeof(unsigned char));
230
for (i = 0; i < numprocs; i++)
231
grpv[i / 8] |= (1 << (i % 8));
232
vt_def_mpi_comm(0, grpc, grpv);
234
memset(grpv, 0, grpc);
236
/* define communicator for MPI_COMM_SELF */
237
grpv[me / 8] |= (1 << (me % 8));
238
vt_def_mpi_comm(1, grpc, grpv);
242
/* initialize communicator management */
245
time = vt_pform_wtime();
252
returnVal = PMPI_Init_thread(argc, argv, required, provided);
254
/* initialize mpi event handling */
257
PMPI_Comm_size(MPI_COMM_WORLD, &numprocs);
258
PMPI_Comm_rank(MPI_COMM_WORLD, &me);
260
grpc = numprocs / 8 + (numprocs % 8 ? 1 : 0);
262
/* define communicator for MPI_COMM_WORLD */
263
grpv = (unsigned char*)calloc(grpc, sizeof(unsigned char));
264
for (i = 0; i < numprocs; i++)
265
grpv[i / 8] |= (1 << (i % 8));
266
vt_def_mpi_comm(0, grpc, grpv);
268
memset(grpv, 0, grpc);
270
/* define communicator for MPI_COMM_SELF */
271
grpv[me / 8] |= (1 << (me % 8));
272
vt_def_mpi_comm(1, grpc, grpv);
276
/* initialize communicator management */
283
#endif /* HAVE_MPITHRD */
167
285
/* -- MPI_Finalize -- */
169
287
int MPI_Finalize()