starpu_mpi_fxt.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. /* StarPU --- Runtime system for heterogeneous multicore architectures.
  2. *
  3. * Copyright (C) 2010-2020 Université de Bordeaux, CNRS (LaBRI UMR 5800), Inria
  4. * Copyright (C) 2019 Federal University of Rio Grande do Sul (UFRGS)
  5. *
  6. * StarPU is free software; you can redistribute it and/or modify
  7. * it under the terms of the GNU Lesser General Public License as published by
  8. * the Free Software Foundation; either version 2.1 of the License, or (at
  9. * your option) any later version.
  10. *
  11. * StarPU is distributed in the hope that it will be useful, but
  12. * WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  14. *
  15. * See the GNU Lesser General Public License in COPYING.LGPL for more details.
  16. */
  17. #ifndef __STARPU_MPI_FXT_H__
  18. #define __STARPU_MPI_FXT_H__
  19. #include <starpu.h>
  20. #include <common/config.h>
  21. #include <common/fxt.h>
  22. /** @file */
  23. #ifdef __cplusplus
  24. extern "C"
  25. {
  26. #endif
  27. #define _STARPU_MPI_FUT_START 0x5201
  28. #define _STARPU_MPI_FUT_STOP 0x5202
  29. #define _STARPU_MPI_FUT_BARRIER 0x5203
  30. #define _STARPU_MPI_FUT_ISEND_SUBMIT_BEGIN 0x5204
  31. #define _STARPU_MPI_FUT_ISEND_SUBMIT_END 0x5205
  32. #define _STARPU_MPI_FUT_IRECV_SUBMIT_BEGIN 0x5206
  33. #define _STARPU_MPI_FUT_IRECV_SUBMIT_END 0x5207
  34. #define _STARPU_MPI_FUT_ISEND_COMPLETE_BEGIN 0x5208
  35. #define _STARPU_MPI_FUT_ISEND_COMPLETE_END 0x5209
  36. #define _STARPU_MPI_FUT_DATA_SET_RANK 0x521a
  37. #define _STARPU_MPI_FUT_IRECV_TERMINATED 0x521b
  38. #define _STARPU_MPI_FUT_ISEND_TERMINATED 0x521c
  39. #define _STARPU_MPI_FUT_TESTING_DETACHED_BEGIN 0x521d
  40. #define _STARPU_MPI_FUT_TESTING_DETACHED_END 0x521e
  41. #define _STARPU_MPI_FUT_TEST_BEGIN 0x521f
  42. #define _STARPU_MPI_FUT_TEST_END 0x5220
  43. #define _STARPU_MPI_FUT_IRECV_COMPLETE_BEGIN 0x520a
  44. #define _STARPU_MPI_FUT_IRECV_COMPLETE_END 0x520b
  45. #define _STARPU_MPI_FUT_SLEEP_BEGIN 0x520c
  46. #define _STARPU_MPI_FUT_SLEEP_END 0x520d
  47. #define _STARPU_MPI_FUT_DTESTING_BEGIN 0x520e
  48. #define _STARPU_MPI_FUT_DTESTING_END 0x520f
  49. #define _STARPU_MPI_FUT_UTESTING_BEGIN 0x5210
  50. #define _STARPU_MPI_FUT_UTESTING_END 0x5211
  51. #define _STARPU_MPI_FUT_UWAIT_BEGIN 0x5212
  52. #define _STARPU_MPI_FUT_UWAIT_END 0x5213
  53. #define _STARPU_MPI_FUT_POLLING_BEGIN 0x5214
  54. #define _STARPU_MPI_FUT_POLLING_END 0x5215
  55. #define _STARPU_MPI_FUT_DRIVER_RUN_BEGIN 0x5216
  56. #define _STARPU_MPI_FUT_DRIVER_RUN_END 0x5217
  57. #define _STARPU_MPI_FUT_DATA_SET_TAG 0x5218
  58. #define _STARPU_MPI_FUT_CHECKPOINT_BEGIN 0x5221
  59. #define _STARPU_MPI_FUT_CHECKPOINT_END 0x5222
  60. #ifdef STARPU_USE_FXT
  61. #define _STARPU_MPI_TRACE_START(rank, worldsize) \
  62. FUT_DO_ALWAYS_PROBE3(_STARPU_MPI_FUT_START, (rank), (worldsize), _starpu_gettid());
  63. #define _STARPU_MPI_TRACE_STOP(rank, worldsize) \
  64. FUT_DO_ALWAYS_PROBE3(_STARPU_MPI_FUT_STOP, (rank), (worldsize), _starpu_gettid());
  65. #define _STARPU_MPI_TRACE_BARRIER(rank, worldsize, key) do {\
  66. if (_starpu_fxt_started) \
  67. FUT_DO_ALWAYS_PROBE4(_STARPU_MPI_FUT_BARRIER, (rank), (worldsize), (key), _starpu_gettid()); \
  68. } while (0)
  69. #define _STARPU_MPI_TRACE_ISEND_SUBMIT_BEGIN(dest, data_tag, size) \
  70. FUT_FULL_PROBE4(_STARPU_FUT_KEYMASK_MPI, _STARPU_MPI_FUT_ISEND_SUBMIT_BEGIN, (dest), (data_tag), (size), _starpu_gettid());
  71. #define _STARPU_MPI_TRACE_ISEND_SUBMIT_END(dest, data_tag, size, jobid, handle) \
  72. FUT_FULL_PROBE6(_STARPU_FUT_KEYMASK_MPI, _STARPU_MPI_FUT_ISEND_SUBMIT_END, (dest), (data_tag), (size), (jobid), (handle), _starpu_gettid());
  73. #define _STARPU_MPI_TRACE_IRECV_SUBMIT_BEGIN(src, data_tag) \
  74. FUT_FULL_PROBE3(_STARPU_FUT_KEYMASK_MPI, _STARPU_MPI_FUT_IRECV_SUBMIT_BEGIN, (src), (data_tag), _starpu_gettid());
  75. #define _STARPU_MPI_TRACE_IRECV_SUBMIT_END(src, data_tag) \
  76. FUT_FULL_PROBE3(_STARPU_FUT_KEYMASK_MPI, _STARPU_MPI_FUT_IRECV_SUBMIT_END, (src), (data_tag), _starpu_gettid());
  77. #define _STARPU_MPI_TRACE_ISEND_COMPLETE_BEGIN(dest, data_tag, size) \
  78. FUT_FULL_PROBE4(_STARPU_FUT_KEYMASK_MPI, _STARPU_MPI_FUT_ISEND_COMPLETE_BEGIN, (dest), (data_tag), (size), _starpu_gettid());
  79. #define _STARPU_MPI_TRACE_COMPLETE_BEGIN(type, rank, data_tag) \
  80. if (type == RECV_REQ) { _STARPU_MPI_TRACE_IRECV_COMPLETE_BEGIN((rank), (data_tag)); } else if (type == SEND_REQ) { _STARPU_MPI_TRACE_ISEND_COMPLETE_BEGIN((rank), (data_tag), 0); }
  81. #define _STARPU_MPI_TRACE_ISEND_COMPLETE_END(dest, data_tag, size) \
  82. FUT_FULL_PROBE4(_STARPU_FUT_KEYMASK_MPI, _STARPU_MPI_FUT_ISEND_COMPLETE_END, (dest), (data_tag), (size), _starpu_gettid());
  83. #define _STARPU_MPI_TRACE_IRECV_COMPLETE_BEGIN(src, data_tag) \
  84. FUT_FULL_PROBE3(_STARPU_FUT_KEYMASK_MPI, _STARPU_MPI_FUT_IRECV_COMPLETE_BEGIN, (src), (data_tag), _starpu_gettid());
  85. #define _STARPU_MPI_TRACE_IRECV_COMPLETE_END(src, data_tag) \
  86. FUT_FULL_PROBE3(_STARPU_FUT_KEYMASK_MPI, _STARPU_MPI_FUT_IRECV_COMPLETE_END, (src), (data_tag), _starpu_gettid());
  87. #define _STARPU_MPI_TRACE_COMPLETE_END(type, rank, data_tag) \
  88. if (type == RECV_REQ) { _STARPU_MPI_TRACE_IRECV_COMPLETE_END((rank), (data_tag)); } else if (type == SEND_REQ) { _STARPU_MPI_TRACE_ISEND_COMPLETE_END((rank), (data_tag), 0); }
  89. #define _STARPU_MPI_TRACE_TERMINATED(req, rank, data_tag) \
  90. if ((req)->request_type == RECV_REQ) FUT_FULL_PROBE5(_STARPU_FUT_KEYMASK_MPI, _STARPU_MPI_FUT_IRECV_TERMINATED, (rank), (data_tag), (req)->post_sync_jobid, _starpu_gettid(), (req)->data_handle); else \
  91. if ((req)->request_type == SEND_REQ) FUT_FULL_PROBE3(_STARPU_FUT_KEYMASK_MPI, _STARPU_MPI_FUT_ISEND_TERMINATED, (rank), (data_tag), _starpu_gettid());
  92. #define _STARPU_MPI_TRACE_SLEEP_BEGIN() \
  93. FUT_FULL_PROBE1(_STARPU_FUT_KEYMASK_MPI, _STARPU_MPI_FUT_SLEEP_BEGIN, _starpu_gettid());
  94. #define _STARPU_MPI_TRACE_SLEEP_END() \
  95. FUT_FULL_PROBE1(_STARPU_FUT_KEYMASK_MPI, _STARPU_MPI_FUT_SLEEP_END, _starpu_gettid());
  96. #define _STARPU_MPI_TRACE_DTESTING_BEGIN() \
  97. FUT_FULL_PROBE1(_STARPU_FUT_KEYMASK_MPI, _STARPU_MPI_FUT_DTESTING_BEGIN, _starpu_gettid());
  98. #define _STARPU_MPI_TRACE_DTESTING_END() \
  99. FUT_FULL_PROBE1(_STARPU_FUT_KEYMASK_MPI, _STARPU_MPI_FUT_DTESTING_END, _starpu_gettid());
  100. #define _STARPU_MPI_TRACE_UTESTING_BEGIN(src, data_tag) \
  101. FUT_FULL_PROBE3(_STARPU_FUT_KEYMASK_MPI, _STARPU_MPI_FUT_UTESTING_BEGIN, (src), (data_tag), _starpu_gettid());
  102. #define _STARPU_MPI_TRACE_UTESTING_END(src, data_tag) \
  103. FUT_FULL_PROBE3(_STARPU_FUT_KEYMASK_MPI, _STARPU_MPI_FUT_UTESTING_END, (src), (data_tag), _starpu_gettid());
  104. #define _STARPU_MPI_TRACE_UWAIT_BEGIN(src, data_tag) \
  105. FUT_FULL_PROBE3(_STARPU_FUT_KEYMASK_MPI, _STARPU_MPI_FUT_UWAIT_BEGIN, (src), (data_tag), _starpu_gettid());
  106. #define _STARPU_MPI_TRACE_UWAIT_END(src, data_tag) \
  107. FUT_FULL_PROBE3(_STARPU_FUT_KEYMASK_MPI, _STARPU_MPI_FUT_UWAIT_END, (src), (data_tag), _starpu_gettid());
  108. #define _STARPU_MPI_TRACE_DATA_SET_RANK(handle, rank) \
  109. FUT_FULL_PROBE3(_STARPU_FUT_KEYMASK_MPI, _STARPU_MPI_FUT_DATA_SET_RANK, (handle), (rank), _starpu_gettid());
  110. #define _STARPU_MPI_TRACE_DATA_SET_TAG(handle, data_tag) \
  111. FUT_FULL_PROBE3(_STARPU_FUT_KEYMASK_MPI, _STARPU_MPI_FUT_DATA_SET_TAG, (handle), (data_tag), _starpu_gettid());
  112. #if 0
  113. /* This is very expensive in the trace, only enable for debugging */
  114. #define _STARPU_MPI_TRACE_TESTING_DETACHED_BEGIN() \
  115. FUT_DO_PROBE1(_STARPU_MPI_FUT_TESTING_DETACHED_BEGIN, _starpu_gettid());
  116. #define _STARPU_MPI_TRACE_TESTING_DETACHED_END() \
  117. FUT_DO_PROBE1(_STARPU_MPI_FUT_TESTING_DETACHED_END, _starpu_gettid());
  118. #define _STARPU_MPI_TRACE_TEST_BEGIN(peer, data_tag) \
  119. FUT_DO_PROBE3(_STARPU_MPI_FUT_TEST_BEGIN, (peer), (data_tag), _starpu_gettid());
  120. #define _STARPU_MPI_TRACE_TEST_END(peer, data_tag) \
  121. FUT_DO_PROBE3(_STARPU_MPI_FUT_TEST_END, (peer), (data_tag), _starpu_gettid());
  122. #else
  123. #define _STARPU_MPI_TRACE_TESTING_DETACHED_BEGIN() do {} while(0)
  124. #define _STARPU_MPI_TRACE_TESTING_DETACHED_END() do {} while(0)
  125. #define _STARPU_MPI_TRACE_TEST_BEGIN(peer, data_tag) do {} while(0)
  126. #define _STARPU_MPI_TRACE_TEST_END(peer, data_tag) do {} while(0)
  127. #endif
  128. #define _STARPU_MPI_TRACE_POLLING_BEGIN() \
  129. if(!trace_loop) { \
  130. trace_loop = 1; \
  131. FUT_FULL_PROBE1(_STARPU_FUT_KEYMASK_MPI, _STARPU_MPI_FUT_POLLING_BEGIN, _starpu_gettid()); \
  132. }
  133. #define _STARPU_MPI_TRACE_POLLING_END() \
  134. if(trace_loop) { \
  135. trace_loop = 0; \
  136. FUT_FULL_PROBE1(_STARPU_FUT_KEYMASK_MPI, _STARPU_MPI_FUT_POLLING_END, _starpu_gettid()); \
  137. }
  138. #define _STARPU_MPI_TRACE_DRIVER_RUN_BEGIN() \
  139. FUT_FULL_PROBE1(_STARPU_FUT_KEYMASK_MPI, _STARPU_MPI_FUT_DRIVER_RUN_BEGIN, _starpu_gettid());
  140. #define _STARPU_MPI_TRACE_DRIVER_RUN_END() \
  141. FUT_FULL_PROBE1(_STARPU_FUT_KEYMASK_MPI, _STARPU_MPI_FUT_DRIVER_RUN_END, _starpu_gettid());
  142. #define _STARPU_MPI_TRACE_CHECKPOINT_BEGIN(cp_instance, cp_domain) \
  143. FUT_FULL_PROBE3(_STARPU_FUT_KEYMASK_EVENT, _STARPU_MPI_FUT_CHECKPOINT_BEGIN, (cp_instance), (cp_domain), _starpu_gettid());
  144. #define _STARPU_MPI_TRACE_CHECKPOINT_END(cp_instance, cp_domain) \
  145. FUT_FULL_PROBE3(_STARPU_FUT_KEYMASK_EVENT, _STARPU_MPI_FUT_CHECKPOINT_END, (cp_instance), (cp_domain), _starpu_gettid());
  146. #define TRACE
  147. #else
  148. #define _STARPU_MPI_TRACE_START(a, b) do {} while(0);
  149. #define _STARPU_MPI_TRACE_STOP(a, b) do {} while(0);
  150. #define _STARPU_MPI_TRACE_BARRIER(a, b, c) do {} while(0);
  151. #define _STARPU_MPI_TRACE_ISEND_SUBMIT_BEGIN(a, b, c) do {} while(0);
  152. #define _STARPU_MPI_TRACE_ISEND_SUBMIT_END(a, b, c, d, e) do {} while(0);
  153. #define _STARPU_MPI_TRACE_IRECV_SUBMIT_BEGIN(a, b) do {} while(0);
  154. #define _STARPU_MPI_TRACE_IRECV_SUBMIT_END(a, b) do {} while(0);
  155. #define _STARPU_MPI_TRACE_ISEND_COMPLETE_BEGIN(a, b, c) do {} while(0);
  156. #define _STARPU_MPI_TRACE_COMPLETE_BEGIN(a, b, c) do {} while(0);
  157. #define _STARPU_MPI_TRACE_COMPLETE_END(a, b, c) do {} while(0);
  158. #define _STARPU_MPI_TRACE_TERMINATED(a, b, c) do {} while(0);
  159. #define _STARPU_MPI_TRACE_ISEND_COMPLETE_END(a, b, c) do {} while(0);
  160. #define _STARPU_MPI_TRACE_IRECV_COMPLETE_BEGIN(a, b) do {} while(0);
  161. #define _STARPU_MPI_TRACE_IRECV_COMPLETE_END(a, b) do {} while(0);
  162. #define _STARPU_MPI_TRACE_SLEEP_BEGIN() do {} while(0);
  163. #define _STARPU_MPI_TRACE_SLEEP_END() do {} while(0);
  164. #define _STARPU_MPI_TRACE_DTESTING_BEGIN() do {} while(0);
  165. #define _STARPU_MPI_TRACE_DTESTING_END() do {} while(0);
  166. #define _STARPU_MPI_TRACE_UTESTING_BEGIN(a, b) do {} while(0);
  167. #define _STARPU_MPI_TRACE_UTESTING_END(a, b) do {} while(0);
  168. #define _STARPU_MPI_TRACE_UWAIT_BEGIN(a, b) do {} while(0);
  169. #define _STARPU_MPI_TRACE_UWAIT_END(a, b) do {} while(0);
  170. #define _STARPU_MPI_TRACE_DATA_SET_RANK(a, b) do {} while(0);
  171. #define _STARPU_MPI_TRACE_DATA_SET_TAG(a, b) do {} while(0);
  172. #define _STARPU_MPI_TRACE_TESTING_DETACHED_BEGIN() do {} while(0)
  173. #define _STARPU_MPI_TRACE_TESTING_DETACHED_END() do {} while(0)
  174. #define _STARPU_MPI_TRACE_TEST_BEGIN(peer, data_tag) do {} while(0)
  175. #define _STARPU_MPI_TRACE_TEST_END(peer, data_tag) do {} while(0)
  176. #define _STARPU_MPI_TRACE_POLLING_BEGIN() do {} while(0);
  177. #define _STARPU_MPI_TRACE_POLLING_END() do {} while(0);
  178. #define _STARPU_MPI_TRACE_DRIVER_RUN_BEGIN() do {} while(0);
  179. #define _STARPU_MPI_TRACE_DRIVER_RUN_END() do {} while(0);
  180. #define _STARPU_MPI_TRACE_CHECKPOINT_BEGIN(cp_instance, cp_domain) do {} while(0)
  181. #define _STARPU_MPI_TRACE_CHECKPOINT_END(cp_instance, cp_domain) do {} while(0)
  182. #endif
  183. #ifdef __cplusplus
  184. }
  185. #endif
  186. #endif // __STARPU_MPI_FXT_H__