17#ifndef __STARPU_MPI_PRIVATE_H__
18#define __STARPU_MPI_PRIVATE_H__
21#include <common/config.h>
23#include <starpu_mpi.h>
38extern starpu_pthread_wait_t _starpu_mpi_thread_wait;
39extern starpu_pthread_queue_t _starpu_mpi_thread_dontsleep;
45 starpu_pthread_queue_t *queue;
49int _starpu_mpi_simgrid_mpi_test(
unsigned *done,
int *flag);
50void _starpu_mpi_simgrid_wait_req(MPI_Request *request, MPI_Status *status, starpu_pthread_queue_t *queue,
unsigned *done);
53extern int _starpu_debug_rank;
54char *_starpu_mpi_get_mpi_error_code(
int code);
55extern int _starpu_mpi_comm_debug;
57#ifdef STARPU_MPI_VERBOSE
58extern int _starpu_debug_level_min;
59extern int _starpu_debug_level_max;
60void _starpu_mpi_set_debug_level_min(
int level);
61void _starpu_mpi_set_debug_level_max(
int level);
63extern int _starpu_mpi_fake_world_size;
64extern int _starpu_mpi_fake_world_rank;
65extern int _starpu_mpi_use_prio;
66extern int _starpu_mpi_nobind;
67extern int _starpu_mpi_thread_cpuid;
68extern int _starpu_mpi_use_coop_sends;
69void _starpu_mpi_env_init(
void);
71#ifdef STARPU_NO_ASSERT
72# define STARPU_MPI_ASSERT_MSG(x, msg, ...) do { if (0) { (void) (x); }} while(0)
74# if defined(__CUDACC__) && defined(STARPU_HAVE_WINDOWS)
75int _starpu_debug_rank;
76# define STARPU_MPI_ASSERT_MSG(x, msg, ...) \
79 if (STARPU_UNLIKELY(!(x))) \
81 if (_starpu_debug_rank == -1) starpu_mpi_comm_rank(MPI_COMM_WORLD, &_starpu_debug_rank); \
82 fprintf(stderr, "\n[%d][starpu_mpi][%s][assert failure] " msg "\n\n", _starpu_debug_rank, __starpu_func__, ## __VA_ARGS__); *(int*)NULL = 0; \
86# define STARPU_MPI_ASSERT_MSG(x, msg, ...) \
89 if (STARPU_UNLIKELY(!(x))) \
91 if (_starpu_debug_rank == -1) starpu_mpi_comm_rank(MPI_COMM_WORLD, &_starpu_debug_rank); \
92 fprintf(stderr, "\n[%d][starpu_mpi][%s][assert failure] " msg "\n\n", _starpu_debug_rank, __starpu_func__, ## __VA_ARGS__); \
100#define _STARPU_MPI_MALLOC(ptr, size) do { ptr = malloc(size); STARPU_MPI_ASSERT_MSG(ptr != NULL, "Cannot allocate %ld bytes\n", (long) (size)); } while (0)
101#define _STARPU_MPI_CALLOC(ptr, nmemb, size) do { ptr = calloc(nmemb, size); STARPU_MPI_ASSERT_MSG(ptr != NULL, "Cannot allocate %ld bytes\n", (long) (nmemb*size)); } while (0)
102#define _STARPU_MPI_REALLOC(ptr, size) do { void *_new_ptr = realloc(ptr, size); STARPU_MPI_ASSERT_MSG(_new_ptr != NULL, "Cannot reallocate %ld bytes\n", (long) (size)); ptr = _new_ptr; } while (0)
104#ifdef STARPU_MPI_VERBOSE
105# define _STARPU_MPI_COMM_DEBUG(ptr, count, datatype, node, tag, utag, comm, way) \
108 if (_starpu_mpi_comm_debug) \
111 char _comm_name[128]; \
112 int _comm_name_len; \
114 starpu_mpi_comm_rank(comm, &_rank); \
115 MPI_Type_size(datatype, &__size); \
116 MPI_Comm_get_name(comm, _comm_name, &_comm_name_len); \
117 fprintf(stderr, "[%d][starpu_mpi] :%d:%s:%d:%d:%ld:%s:%p:%ld:%d:%s:%d\n", _rank, _rank, way, node, tag, utag, _comm_name, ptr, count, __size, __starpu_func__ , __LINE__); \
121# define _STARPU_MPI_COMM_TO_DEBUG(ptr, count, datatype, dest, tag, utag, comm) _STARPU_MPI_COMM_DEBUG(ptr, count, datatype, dest, tag, utag, comm, "-->")
122# define _STARPU_MPI_COMM_FROM_DEBUG(ptr, count, datatype, source, tag, utag, comm) _STARPU_MPI_COMM_DEBUG(ptr, count, datatype, source, tag, utag, comm, "<--")
123# define _STARPU_MPI_DEBUG(level, fmt, ...) \
126 if (!_starpu_silent && _starpu_debug_level_min <= level && level <= _starpu_debug_level_max) \
128 if (_starpu_debug_rank == -1) starpu_mpi_comm_rank(MPI_COMM_WORLD, &_starpu_debug_rank); \
129 fprintf(stderr, "%*s[%d][starpu_mpi][%s:%d] " fmt , (_starpu_debug_rank+1)*4, "", _starpu_debug_rank, __starpu_func__ , __LINE__,## __VA_ARGS__); \
134# define _STARPU_MPI_COMM_DEBUG(ptr, count, datatype, node, tag, utag, comm, way) do { } while(0)
135# define _STARPU_MPI_COMM_TO_DEBUG(ptr, count, datatype, dest, tag, utag, comm) do { } while(0)
136# define _STARPU_MPI_COMM_FROM_DEBUG(ptr, count, datatype, source, tag, utag, comm) do { } while(0)
137# define _STARPU_MPI_DEBUG(level, fmt, ...) do { } while(0)
140#define _STARPU_MPI_DISP(fmt, ...) do { if (!_starpu_silent) { \
141 if (_starpu_debug_rank == -1) starpu_mpi_comm_rank(MPI_COMM_WORLD, &_starpu_debug_rank); \
142 fprintf(stderr, "%*s[%d][starpu_mpi][%s:%d] " fmt , (_starpu_debug_rank+1)*4, "", _starpu_debug_rank, __starpu_func__ , __LINE__ ,## __VA_ARGS__); \
143 fflush(stderr); }} while(0);
144#define _STARPU_MPI_MSG(fmt, ...) do { if (_starpu_debug_rank == -1) starpu_mpi_comm_rank(MPI_COMM_WORLD, &_starpu_debug_rank); \
145 fprintf(stderr, "[%d][starpu_mpi][%s:%d] " fmt , _starpu_debug_rank, __starpu_func__ , __LINE__ ,## __VA_ARGS__); \
146 fflush(stderr); } while(0);
148#ifdef STARPU_MPI_EXTRA_VERBOSE
149# define _STARPU_MPI_LOG_IN() do { if (!_starpu_silent) { \
150 if (_starpu_debug_rank == -1) starpu_mpi_comm_rank(MPI_COMM_WORLD, &_starpu_debug_rank); \
151 fprintf(stderr, "%*s[%d][starpu_mpi][%s:%d] -->\n", (_starpu_debug_rank+1)*4, "", _starpu_debug_rank, __starpu_func__ , __LINE__); \
152 fflush(stderr); }} while(0)
153# define _STARPU_MPI_LOG_OUT() do { if (!_starpu_silent) { \
154 if (_starpu_debug_rank == -1) starpu_mpi_comm_rank(MPI_COMM_WORLD, &_starpu_debug_rank); \
155 fprintf(stderr, "%*s[%d][starpu_mpi][%s:%d] <--\n", (_starpu_debug_rank+1)*4, "", _starpu_debug_rank, __starpu_func__, __LINE__ ); \
156 fflush(stderr); }} while(0)
158# define _STARPU_MPI_LOG_IN()
159# define _STARPU_MPI_LOG_OUT()
162enum _starpu_mpi_request_type
182 starpu_mpi_tag_t data_tag;
190 struct _starpu_mpi_req_multilist_coop_sends reqs;
197 unsigned redirects_sent;
213struct _starpu_mpi_data *_starpu_mpi_data_get(starpu_data_handle_t data_handle);
219 starpu_data_handle_t data_handle;
224 MPI_Datatype datatype;
227 starpu_ssize_t count;
228 int registered_datatype;
237 struct _starpu_mpi_req_multilist_coop_sends coop_sends;
255 void (*callback)(
void *);
259 int sequential_consistency;
262 long post_sync_jobid;
265 MPI_Status status_store;
266 starpu_pthread_queue_t queue;
277void _starpu_mpi_submit_ready_request(
void *arg);
284void _starpu_mpi_coop_send(starpu_data_handle_t data_handle,
struct _starpu_mpi_req *req,
enum starpu_data_access_mode mode,
int sequential_consistency);
294void _starpu_mpi_submit_coop_sends(
struct _starpu_mpi_coop_sends *coop_sends,
int submit_control,
int submit_data);
298struct _starpu_mpi_req * _starpu_mpi_request_fill(starpu_data_handle_t data_handle,
299 int srcdst, starpu_mpi_tag_t data_tag, MPI_Comm comm,
300 unsigned detached,
unsigned sync,
int prio,
void (*callback)(
void *),
void *arg,
302 int sequential_consistency,
304 starpu_ssize_t count);
309int _starpu_mpi_wait(starpu_mpi_req *public_req, MPI_Status *status);
310int _starpu_mpi_test(starpu_mpi_req *public_req,
int *flag, MPI_Status *status);
311int _starpu_mpi_barrier(MPI_Comm comm);
327void _starpu_mpi_progress_shutdown(
void **value);
330void _starpu_mpi_wait_for_initialization();
332void _starpu_mpi_data_flush(starpu_data_handle_t data_handle);
339 void (*_starpu_mpi_backend_init)(
struct starpu_conf *conf);
340 void (*_starpu_mpi_backend_shutdown)(void);
341 int (*_starpu_mpi_backend_reserve_core)(void);
343 void (*_starpu_mpi_backend_request_fill)(
struct _starpu_mpi_req *req, MPI_Comm comm,
int is_internal_req);
344 void (*_starpu_mpi_backend_request_destroy)(
struct _starpu_mpi_req *req);
345 void (*_starpu_mpi_backend_data_clear)(starpu_data_handle_t data_handle);
346 void (*_starpu_mpi_backend_data_register)(starpu_data_handle_t data_handle, starpu_mpi_tag_t data_tag);
347 void (*_starpu_mpi_backend_comm_register)(MPI_Comm comm);
#define struct
Definition: list.h:172
Definition: starpu_mpi_mpi_backend.h:52
char ** fargv
Definition: starpu_mpi_private.h:322
int fargc
Definition: starpu_mpi_private.h:320
Definition: starpu_mpi_private.h:314
Definition: starpu_mpi_private.h:188
Definition: starpu_mpi_private.h:202
Definition: starpu_mpi_private.h:174
Definition: starpu_mpi_private.h:180
Definition: starpu_mpi_private.h:42
Definition: starpu_spinlock.h:82
Definition: starpu_mpi_private.h:338
Definition: starpu_mpi_private.h:217
enum _starpu_mpi_request_type request_type
Definition: starpu_mpi_private.h:246