52 static inline int MPIDBG_Get_rank(
void) {
55 #define MPIDBG_RANK MPIDBG_Get_rank()
62 static inline void MPIDBG_Out(
const char *file,
int line,
const char *func,
const char *fmt, ...) {
66 sprintf(buf,
"*** [%d] %10s %4d @ %-16s: ", MPIDBG_RANK, file, line, func);
67 vsprintf(buf + strlen(buf), fmt, ap);
70 fprintf(stderr,
"%s\n", buf);
72 #define MPIDBG_Out(...) MPIDBG_Out(file, line, func, __VA_ARGS__)
79 static inline void MPIDBG_sprint_requests(
char *buf,
int count,
const MPI_Request *requests)
82 buf += sprintf(buf,
"(");
84 for ( i = 0; i < count; i++ ) {
89 buf += sprintf(buf,
",");
91 if ( requests[i] != MPI_REQUEST_NULL ) {
92 buf += sprintf(buf,
"%d", i);
95 buf += sprintf(buf,
"*");
98 buf += sprintf(buf,
")");
106 static inline void MPIDBG_sprint_statuses(
char *buf,
int count,
const MPI_Request *old_requests,
const MPI_Request *new_requests,
const MPI_Status *statuses)
109 buf += sprintf(buf,
"(");
111 for ( i = 0; i < count; i++ ) {
116 buf += sprintf(buf,
",");
118 if ( old_requests[i] != MPI_REQUEST_NULL && new_requests[i] == MPI_REQUEST_NULL ) {
120 MPI_Get_count((MPI_Status *)&statuses[i], MPI_BYTE, &ret_size);
121 buf += sprintf(buf,
"(source=%d,tag=%d,size=%d)", statuses[i].MPI_SOURCE, statuses[i].MPI_TAG, ret_size);
123 buf += sprintf(buf,
"*");
126 buf += sprintf(buf,
")");
139 #define MPIDBG_EXTARG const char *file, int line, const char *func
145 static inline int MPIDBG_Send(
void *buf,
int count, MPI_Datatype datatype,
int dest,
int tag, MPI_Comm comm, MPIDBG_EXTARG)
147 MPIDBG_Out(
"MPI_Send: src=%d dest=%d tag=%d count=%d", MPIDBG_RANK, dest, tag, count);
148 int ret = MPI_Send(buf, count, datatype, dest, tag, comm);
149 if ( ret == MPI_SUCCESS ) {
150 MPIDBG_Out(
"MPI_Send: OK");
153 MPIDBG_Out(
"MPI_Send: Failed");
157 #define MPI_Send(...) MPIDBG_Send(__VA_ARGS__, __FILE__, __LINE__, __func__)
164 static inline int MPIDBG_Recv(
void* buf,
int count, MPI_Datatype datatype,
int source,
int tag, MPI_Comm comm, MPI_Status *status, MPIDBG_EXTARG)
166 MPIDBG_Out(
"MPI_Recv: src=%d dest=%d tag=%d", source, MPIDBG_RANK, tag);
167 int ret = MPI_Recv(buf, count, datatype, source, tag, comm, status);
168 if ( ret == MPI_SUCCESS ) {
170 MPI_Get_count(status, datatype, &ret_count);
171 MPIDBG_Out(
"MPI_Recv: OK src=%d dest=%d tag=%d count=%d", status->MPI_SOURCE, MPIDBG_RANK, status->MPI_TAG, ret_count);
174 MPIDBG_Out(
"MPI_Recv: Failed");
178 #define MPI_Recv(...) MPIDBG_Recv(__VA_ARGS__, __FILE__, __LINE__, __func__)
185 static inline int MPIDBG_Bsend(
void* buf,
int count, MPI_Datatype datatype,
int dest,
int tag, MPI_Comm comm, MPIDBG_EXTARG)
187 MPIDBG_Out(
"MPI_Bsend: src=%d dest=%d tag=%d count=%d", MPIDBG_RANK, dest, tag, count);
188 int ret = MPI_Bsend(buf, count, datatype, dest, tag, comm);
189 if ( ret == MPI_SUCCESS ) {
190 MPIDBG_Out(
"MPI_Bsend: OK");
193 MPIDBG_Out(
"MPI_Bsend: Failed");
197 #define MPI_Bsend(...) MPIDBG_Bsend(__VA_ARGS__, __FILE__, __LINE__, __func__)
204 static inline int MPIDBG_Ssend(
void* buf,
int count, MPI_Datatype datatype,
int dest,
int tag, MPI_Comm comm, MPIDBG_EXTARG)
206 MPIDBG_Out(
"MPI_Ssend: src=%d dest=%d tag=%d count=%d", MPIDBG_RANK, dest, tag, count);
207 int ret = MPI_Ssend(buf, count, datatype, dest, tag, comm);
208 if ( ret == MPI_SUCCESS ) {
209 MPIDBG_Out(
"MPI_Ssend: OK");
212 MPIDBG_Out(
"MPI_Ssend: Failed");
216 #define MPI_Ssend(...) MPIDBG_Ssend(__VA_ARGS__, __FILE__, __LINE__, __func__)
223 static inline int MPIDBG_Rsend(
void* buf,
int count, MPI_Datatype datatype,
int dest,
int tag, MPI_Comm comm, MPIDBG_EXTARG)
225 MPIDBG_Out(
"MPI_Rsend: src=%d dest=%d tag=%d count=%d", MPIDBG_RANK, dest, tag, count);
226 int ret = MPI_Rsend(buf, count, datatype, dest, tag, comm);
227 if ( ret == MPI_SUCCESS ) {
228 MPIDBG_Out(
"MPI_Rsend: OK");
231 MPIDBG_Out(
"MPI_Rsend: Failed");
235 #define MPI_Rsend(...) MPIDBG_Rsend(__VA_ARGS__, __FILE__, __LINE__, __func__)
242 static inline int MPIDBG_Isend(
void* buf,
int count, MPI_Datatype datatype,
int dest,
int tag, MPI_Comm comm, MPI_Request *request, MPIDBG_EXTARG)
244 MPIDBG_Out(
"MPI_Isend: src=%d dest=%d tag=%d count=%d", MPIDBG_RANK, dest, tag, count);
245 int ret = MPI_Isend(buf, count, datatype, dest, tag, comm, request);
246 if ( ret == MPI_SUCCESS ) {
247 MPIDBG_Out(
"MPI_Isend: OK");
250 MPIDBG_Out(
"MPI_Isend: Failed");
254 #define MPI_Isend(...) MPIDBG_Isend(__VA_ARGS__, __FILE__, __LINE__, __func__)
261 static inline int MPIDBG_Ibsend(
void* buf,
int count, MPI_Datatype datatype,
int dest,
int tag, MPI_Comm comm, MPI_Request *request, MPIDBG_EXTARG)
263 MPIDBG_Out(
"MPI_Ibsend: src=%d dest=%d tag=%d count=%d", MPIDBG_RANK, dest, tag, count);
264 int ret = MPI_Ibsend(buf, count, datatype, dest, tag, comm, request);
265 if ( ret == MPI_SUCCESS ) {
266 MPIDBG_Out(
"MPI_Ibsend: OK");
269 MPIDBG_Out(
"MPI_Ibsend: Failed");
273 #define MPI_Ibsend(...) MPIDBG_Ibsend(__VA_ARGS__, __FILE__, __LINE__, __func__)
280 static inline int MPIDBG_Issend(
void* buf,
int count, MPI_Datatype datatype,
int dest,
int tag, MPI_Comm comm, MPI_Request *request, MPIDBG_EXTARG)
282 MPIDBG_Out(
"MPI_Issend: src=%d dest=%d tag=%d count=%d", MPIDBG_RANK, dest, tag, count);
283 int ret = MPI_Issend(buf, count, datatype, dest, tag, comm, request);
284 if ( ret == MPI_SUCCESS ) {
285 MPIDBG_Out(
"MPI_Issend: OK");
288 MPIDBG_Out(
"MPI_Issend: Failed");
292 #define MPI_Issend(...) MPIDBG_Issend(__VA_ARGS__, __FILE__, __LINE__, __func__)
299 static inline int MPIDBG_Irsend(
void* buf,
int count, MPI_Datatype datatype,
int dest,
int tag, MPI_Comm comm, MPI_Request *request, MPIDBG_EXTARG)
301 MPIDBG_Out(
"MPI_Irsend: src=%d dest=%d tag=%d count=%d", MPIDBG_RANK, dest, tag, count);
302 int ret = MPI_Irsend(buf, count, datatype, dest, tag, comm, request);
303 if ( ret == MPI_SUCCESS ) {
304 MPIDBG_Out(
"MPI_Irsend: OK");
307 MPIDBG_Out(
"MPI_Irsend: Failed");
311 #define MPI_Irsend(...) MPIDBG_Irsend(__VA_ARGS__, __FILE__, __LINE__, __func__)
318 static inline int MPIDBG_Irecv(
void* buf,
int count, MPI_Datatype datatype,
int source,
int tag, MPI_Comm comm, MPI_Request *request, MPIDBG_EXTARG)
320 MPIDBG_Out(
"MPI_Irecv: src=%d dest=%d tag=%d", source, MPIDBG_RANK, tag);
321 int ret = MPI_Irecv(buf, count, datatype, source, tag, comm, request);
322 if ( ret == MPI_SUCCESS ) {
323 MPIDBG_Out(
"MPI_Irecv: OK dest=%d", MPIDBG_RANK);
326 MPIDBG_Out(
"MPI_Irecv: Failed");
330 #define MPI_Irecv(...) MPIDBG_Irecv(__VA_ARGS__, __FILE__, __LINE__, __func__)
337 static inline int MPIDBG_Wait(MPI_Request *request, MPI_Status *status, MPIDBG_EXTARG)
340 MPI_Request old_request = *request;
341 MPIDBG_sprint_requests(buf, 1, request);
342 MPIDBG_Out(
"MPI_Wait: rank=%d request=%s", MPIDBG_RANK, buf);
343 int ret = MPI_Wait(request, status);
344 if ( ret == MPI_SUCCESS ) {
345 MPIDBG_sprint_statuses(buf, 1, request, &old_request, status);
346 MPIDBG_Out(
"MPI_Wait: OK rank=%d result=%s", MPIDBG_RANK, buf);
349 MPIDBG_Out(
"MPI_Wait: Failed");
353 #define MPI_Wait(...) MPIDBG_Wait(__VA_ARGS__, __FILE__, __LINE__, __func__)
360 static inline int MPIDBG_Test(MPI_Request *request,
int *flag, MPI_Status *status, MPIDBG_EXTARG)
363 MPI_Request old_request = *request;
364 MPIDBG_sprint_requests(buf, 1, request);
365 MPIDBG_Out(
"MPI_Test: rank=%d request=%s", MPIDBG_RANK, buf);
366 int ret = MPI_Test(request, flag, status);
367 if ( ret == MPI_SUCCESS ) {
369 MPIDBG_sprint_statuses(buf, 1, request, &old_request, status);
370 MPIDBG_Out(
"MPI_Test: OK rank=%d result=%s", MPIDBG_RANK, buf);
373 MPIDBG_Out(
"MPI_Test: OK flag=false");
377 MPIDBG_Out(
"MPI_Test: Failed");
381 #define MPI_Test(...) MPIDBG_Test(__VA_ARGS__, __FILE__, __LINE__, __func__)
388 static inline int MPIDBG_Waitany(
int count, MPI_Request *array_of_requests,
int *index, MPI_Status *status, MPIDBG_EXTARG)
391 MPI_Request old_requests[count];
392 memcpy(old_requests, array_of_requests,
sizeof(MPI_Request) * count);
393 MPIDBG_sprint_requests(buf, count, array_of_requests);
394 MPIDBG_Out(
"MPI_Waitany: rank=%d request=%s", MPIDBG_RANK, buf);
395 int ret = MPI_Waitany(count, array_of_requests, index, status);
396 if ( ret == MPI_SUCCESS ) {
397 MPI_Status statuses[count];
398 statuses[*index] = *status;
399 MPIDBG_sprint_statuses(buf, count, old_requests, array_of_requests, statuses);
400 MPIDBG_Out(
"MPI_Waitany: OK rank=%d result=%s", MPIDBG_RANK, buf);
403 MPIDBG_Out(
"MPI_Waitany: Failed");
407 #define MPI_Waitany(...) MPIDBG_Waitany(__VA_ARGS__, __FILE__, __LINE__, __func__)
414 static inline int MPIDBG_Testany(
int count, MPI_Request *array_of_requests,
int *index,
int *flag, MPI_Status *status, MPIDBG_EXTARG)
417 MPI_Request old_requests[count];
418 memcpy(old_requests, array_of_requests,
sizeof(MPI_Request) * count);
419 MPIDBG_sprint_requests(buf, count, array_of_requests);
420 MPIDBG_Out(
"MPI_Testany: rank=%d request=%s", MPIDBG_RANK, buf);
421 int ret = MPI_Testany(count, array_of_requests, index, flag, status);
422 if ( ret == MPI_SUCCESS ) {
424 MPI_Status statuses[count];
425 statuses[*index] = *status;
426 MPIDBG_sprint_statuses(buf, count, old_requests, array_of_requests, statuses);
427 MPIDBG_Out(
"MPI_Testany: OK rank=%d result=%s", MPIDBG_RANK, buf);
430 MPIDBG_Out(
"MPI_Testany: OK flag=false");
434 MPIDBG_Out(
"MPI_Testany: Failed");
438 #define MPI_Testany(...) MPIDBG_Testany(__VA_ARGS__, __FILE__, __LINE__, __func__)
445 static inline int MPIDBG_Waitall(
int count, MPI_Request *array_of_requests, MPI_Status *array_of_statuses, MPIDBG_EXTARG)
447 char buf[256 * count];
448 MPI_Request old_requests[count];
449 memcpy(old_requests, array_of_requests,
sizeof(MPI_Request) * count);
450 MPIDBG_sprint_requests(buf, count, array_of_requests);
451 MPIDBG_Out(
"MPI_Waitall: rank=%d request=%s", MPIDBG_RANK, buf);
452 int ret = MPI_Waitall(count, array_of_requests, array_of_statuses);
453 if ( ret == MPI_SUCCESS ) {
454 MPIDBG_sprint_statuses(buf, count, old_requests, array_of_requests, array_of_statuses);
455 MPIDBG_Out(
"MPI_Waitall: OK rank=%d result=%s", MPIDBG_RANK, buf);
458 MPIDBG_Out(
"MPI_Waitall: Failed");
462 #define MPI_Waitall(...) MPIDBG_Waitall(__VA_ARGS__, __FILE__, __LINE__, __func__)
469 static inline int MPIDBG_Testall(
int count, MPI_Request *array_of_requests,
int *flag, MPI_Status *array_of_statuses, MPIDBG_EXTARG)
471 char buf[256 * count];
472 MPI_Request old_requests[count];
473 memcpy(old_requests, array_of_requests,
sizeof(MPI_Request) * count);
474 MPIDBG_sprint_requests(buf, count, array_of_requests);
475 MPIDBG_Out(
"MPI_Testall: rank=%d request=%s", MPIDBG_RANK, buf);
476 int ret = MPI_Testall(count, array_of_requests, flag, array_of_statuses);
477 if ( ret == MPI_SUCCESS ) {
479 MPIDBG_sprint_statuses(buf, count, old_requests, array_of_requests, array_of_statuses);
480 MPIDBG_Out(
"MPI_Testall: OK rank=%d result=%s", MPIDBG_RANK, buf);
483 MPIDBG_Out(
"MPI_Testall: OK flag=false");
487 MPIDBG_Out(
"MPI_Testall: Failed");
491 #define MPI_Testall(...) MPIDBG_Testall(__VA_ARGS__, __FILE__, __LINE__, __func__)
498 static inline int MPIDBG_Waitsome(
int incount, MPI_Request *array_of_requests,
int *outcount,
int *array_of_indices, MPI_Status *array_of_statuses, MPIDBG_EXTARG)
500 char buf[256 * incount];
501 MPI_Request old_requests[incount];
502 memcpy(old_requests, array_of_requests,
sizeof(MPI_Request) * incount);
503 MPIDBG_sprint_requests(buf, incount, array_of_requests);
504 MPIDBG_Out(
"MPI_Waitsome: rank=%d request=%s", MPIDBG_RANK, buf);
505 int ret = MPI_Waitsome(incount, array_of_requests, outcount, array_of_indices, array_of_statuses);
506 if ( ret == MPI_SUCCESS ) {
507 MPIDBG_sprint_statuses(buf, incount, old_requests, array_of_requests, array_of_statuses);
508 MPIDBG_Out(
"MPI_Waitsome: OK rank=%d result=%s", MPIDBG_RANK, buf);
511 MPIDBG_Out(
"MPI_Waitsome: Failed");
515 #define MPI_Waitsome(...) MPIDBG_Waitsome(__VA_ARGS__, __FILE__, __LINE__, __func__)
522 static inline int MPIDBG_Testsome(
int incount, MPI_Request *array_of_requests,
int *outcount,
int *array_of_indices, MPI_Status *array_of_statuses, MPIDBG_EXTARG)
524 char buf[256 * incount];
525 MPI_Request old_requests[incount];
526 memcpy(old_requests, array_of_requests,
sizeof(MPI_Request) * incount);
527 MPIDBG_sprint_requests(buf, incount, array_of_requests);
528 MPIDBG_Out(
"MPI_Testsome: rank=%d request=%s", MPIDBG_RANK, buf);
529 int ret = MPI_Testsome(incount, array_of_requests, outcount, array_of_indices, array_of_statuses);
530 if ( ret == MPI_SUCCESS ) {
531 MPIDBG_sprint_statuses(buf, incount, old_requests, array_of_requests, array_of_statuses);
532 MPIDBG_Out(
"MPI_Testsome: OK rank=%d result=%s", MPIDBG_RANK, buf);
535 MPIDBG_Out(
"MPI_Testsome: Failed");
539 #define MPI_Testsome(...) MPIDBG_Testsome(__VA_ARGS__, __FILE__, __LINE__, __func__)
546 static inline int MPIDBG_Iprobe(
int source,
int tag, MPI_Comm comm,
int *flag, MPI_Status *status, MPIDBG_EXTARG)
548 MPIDBG_Out(
"MPI_Iprobe: src=%d dest=%d tag=%d", source, MPIDBG_RANK, tag);
549 int ret = MPI_Iprobe(source, tag, comm, flag, status);
550 if ( ret == MPI_SUCCESS ) {
553 MPI_Get_count(status, MPI_BYTE, &ret_size);
554 MPIDBG_Out(
"MPI_Iprobe: OK src=%d dest=%d tag=%d size=%d", status->MPI_SOURCE, MPIDBG_RANK, status->MPI_TAG, ret_size);
557 MPIDBG_Out(
"MPI_Iprobe: OK flag=false");
561 MPIDBG_Out(
"MPI_Iprobe: Failed");
565 #define MPI_Iprobe(...) MPIDBG_Iprobe(__VA_ARGS__, __FILE__, __LINE__, __func__)
572 static inline int MPIDBG_Probe(
int source,
int tag, MPI_Comm comm, MPI_Status *status, MPIDBG_EXTARG)
574 MPIDBG_Out(
"MPI_Probe: src=%d dest=%d tag=%d", source, MPIDBG_RANK, tag);
575 int ret = MPI_Probe(source, tag, comm, status);
576 if ( ret == MPI_SUCCESS ) {
578 MPI_Get_count(status, MPI_BYTE, &ret_size);
579 MPIDBG_Out(
"MPI_Probe: OK src=%d dest=%d tag=%d size=%d", status->MPI_SOURCE, MPIDBG_RANK, status->MPI_TAG, ret_size);
582 MPIDBG_Out(
"MPI_Probe: Failed");
586 #define MPI_Probe(...) MPIDBG_Probe(__VA_ARGS__, __FILE__, __LINE__, __func__)
593 static inline int MPIDBG_Cancel(MPI_Request *request, MPIDBG_EXTARG)
595 MPIDBG_Out(
"MPI_Cancel: rank=%d", MPIDBG_RANK);
596 int ret = MPI_Cancel(request);
597 if ( ret == MPI_SUCCESS ) {
598 MPIDBG_Out(
"MPI_Cancel: OK");
601 MPIDBG_Out(
"MPI_Cancel: Failed");
605 #define MPI_Cancel(...) MPIDBG_Cancel(__VA_ARGS__, __FILE__, __LINE__, __func__)
612 static inline int MPIDBG_Test_cancelled(MPI_Status *status,
int *flag, MPIDBG_EXTARG)
614 MPIDBG_Out(
"MPI_Test_cancelled: rank=%d", MPIDBG_RANK);
615 int ret = MPI_Test_cancelled(status, flag);
616 if ( ret == MPI_SUCCESS ) {
618 MPIDBG_Out(
"MPI_Test_cancelled: OK flag=true");
621 MPIDBG_Out(
"MPI_Test_cancelled: OK flag=false");
625 MPIDBG_Out(
"MPI_Test_cancelled: Failed");
629 #define MPI_Test_cancelled(...) MPIDBG_Test_cancelled(__VA_ARGS__, __FILE__, __LINE__, __func__)
636 static inline int MPIDBG_Barrier(MPI_Comm comm, MPIDBG_EXTARG)
638 MPIDBG_Out(
"MPI_Barrier: rank=%d", MPIDBG_RANK);
639 int ret = MPI_Barrier(comm);
640 if ( ret == MPI_SUCCESS ) {
641 MPIDBG_Out(
"MPI_Barrier: OK");
644 MPIDBG_Out(
"MPI_Barrier: Failed");
648 #define MPI_Barrier(...) MPIDBG_Barrier(__VA_ARGS__, __FILE__, __LINE__, __func__)
655 static inline int MPIDBG_Bcast(
void* buffer,
int count, MPI_Datatype datatype,
int root, MPI_Comm comm, MPIDBG_EXTARG)
657 MPIDBG_Out(
"MPI_Bcast: root=%d count=%d", root, count);
658 int ret = MPI_Bcast(buffer, count, datatype, root, comm);
659 if ( ret == MPI_SUCCESS ) {
660 MPIDBG_Out(
"MPI_Bcast: OK");
663 MPIDBG_Out(
"MPI_Bcast: Failed");
667 #define MPI_Bcast(...) MPIDBG_Bcast(__VA_ARGS__, __FILE__, __LINE__, __func__)