QUDA  v0.7.0
A library for QCD on GPUs
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
comm_quda.h
Go to the documentation of this file.
1 #ifndef _COMM_QUDA_H
2 #define _COMM_QUDA_H
3 
4 #ifdef __cplusplus
5 extern "C" {
6 #endif
7 
8  typedef struct MsgHandle_s MsgHandle;
9  typedef struct Topology_s Topology;
10 
11  /* defined in quda.h; redefining here to avoid circular references */
12  typedef int (*QudaCommsMap)(const int *coords, void *fdata);
13 
14  /* implemented in comm_common.cpp */
15 
16  char *comm_hostname(void);
17  double comm_drand(void);
18  Topology *comm_create_topology(int ndim, const int *dims, QudaCommsMap rank_from_coords, void *map_data);
19  void comm_destroy_topology(Topology *topo);
20  int comm_ndim(const Topology *topo);
21  const int *comm_dims(const Topology *topo);
22  const int *comm_coords(const Topology *topo);
23  const int *comm_coords_from_rank(const Topology *topo, int rank);
24  int comm_rank_from_coords(const Topology *topo, const int *coords);
25  int comm_rank_displaced(const Topology *topo, const int displacement[]);
28  int comm_dim(int dim);
29  int comm_coord(int dim);
30 
38  MsgHandle *comm_declare_send_relative(void *buffer, int dim, int dir, size_t nbytes);
39 
47  MsgHandle *comm_declare_receive_relative(void *buffer, int dim, int dir, size_t nbytes);
48 
58  MsgHandle *comm_declare_strided_send_relative(void *buffer, int dim, int dir,
59  size_t blksize, int nblocks, size_t stride);
60 
70  MsgHandle *comm_declare_strided_receive_relative(void *buffer, int dim, int dir,
71  size_t blksize, int nblocks, size_t stride);
72 
73  void comm_finalize(void);
74  void comm_dim_partitioned_set(int dim);
75  int comm_dim_partitioned(int dim);
76 
77 
78  /* implemented in comm_single.cpp, comm_qmp.cpp, and comm_mpi.cpp */
79 
80  void comm_init(int ndim, const int *dims, QudaCommsMap rank_from_coords, void *map_data);
81  int comm_rank(void);
82  int comm_size(void);
83  int comm_gpuid(void);
84 
92  MsgHandle *comm_declare_send_displaced(void *buffer, const int displacement[], size_t nbytes);
93 
101  MsgHandle *comm_declare_receive_displaced(void *buffer, const int displacement[], size_t nbytes);
102 
111  MsgHandle *comm_declare_strided_send_displaced(void *buffer, const int displacement[],
112  size_t blksize, int nblocks, size_t stride);
113 
122  MsgHandle *comm_declare_strided_receive_displaced(void *buffer, const int displacement[],
123  size_t blksize, int nblocks, size_t stride);
124 
125  void comm_free(MsgHandle *mh);
126  void comm_start(MsgHandle *mh);
127  void comm_wait(MsgHandle *mh);
128  int comm_query(MsgHandle *mh);
129  void comm_allreduce(double* data);
130  void comm_allreduce_max(double* data);
131  void comm_allreduce_array(double* data, size_t size);
132  void comm_allreduce_int(int* data);
133  void comm_broadcast(void *data, size_t nbytes);
134  void comm_barrier(void);
135  void comm_abort(int status);
136 
137 #ifdef __cplusplus
138 }
139 #endif
140 
141 #endif /* _COMM_QUDA_H */
const int * comm_coords(const Topology *topo)
int comm_rank(void)
Definition: comm_mpi.cpp:80
void comm_finalize(void)
void comm_destroy_topology(Topology *topo)
MsgHandle * comm_declare_strided_send_relative(void *buffer, int dim, int dir, size_t blksize, int nblocks, size_t stride)
MsgHandle * comm_declare_receive_displaced(void *buffer, const int displacement[], size_t nbytes)
Definition: comm_mpi.cpp:117
Topology * comm_create_topology(int ndim, const int *dims, QudaCommsMap rank_from_coords, void *map_data)
Definition: comm_common.cpp:93
void comm_abort(int status)
Definition: comm_mpi.cpp:246
MsgHandle * comm_declare_strided_receive_displaced(void *buffer, const int displacement[], size_t blksize, int nblocks, size_t stride)
Definition: comm_mpi.cpp:155
int comm_dim(int dim)
MsgHandle * comm_declare_send_relative(void *buffer, int dim, int dir, size_t nbytes)
int comm_coord(int dim)
void comm_allreduce_array(double *data, size_t size)
Definition: comm_mpi.cpp:216
Topology * comm_default_topology(void)
const int * comm_coords_from_rank(const Topology *topo, int rank)
int comm_gpuid(void)
Definition: comm_mpi.cpp:92
int comm_rank_from_coords(const Topology *topo, const int *coords)
void comm_free(MsgHandle *mh)
Definition: comm_mpi.cpp:174
void comm_init(int ndim, const int *dims, QudaCommsMap rank_from_coords, void *map_data)
Definition: comm_mpi.cpp:31
MsgHandle * comm_declare_strided_send_displaced(void *buffer, const int displacement[], size_t blksize, int nblocks, size_t stride)
Definition: comm_mpi.cpp:133
int comm_size(void)
Definition: comm_mpi.cpp:86
char * comm_hostname(void)
Definition: comm_common.cpp:57
MsgHandle * comm_declare_send_displaced(void *buffer, const int displacement[], size_t nbytes)
Definition: comm_mpi.cpp:101
MsgHandle * comm_declare_strided_receive_relative(void *buffer, int dim, int dir, size_t blksize, int nblocks, size_t stride)
void comm_start(MsgHandle *mh)
Definition: comm_mpi.cpp:180
void comm_dim_partitioned_set(int dim)
int comm_rank_displaced(const Topology *topo, const int displacement[])
double comm_drand(void)
Definition: comm_common.cpp:81
int(* coords)[QUDA_MAX_DIM]
Definition: comm_common.cpp:11
MsgHandle * comm_declare_receive_relative(void *buffer, int dim, int dir, size_t nbytes)
const int * comm_dims(const Topology *topo)
void comm_broadcast(void *data, size_t nbytes)
Definition: comm_mpi.cpp:234
void comm_set_default_topology(Topology *topo)
int comm_ndim(const Topology *topo)
int comm_query(MsgHandle *mh)
Definition: comm_mpi.cpp:192
void comm_allreduce_int(int *data)
Definition: comm_mpi.cpp:225
int(* QudaCommsMap)(const int *coords, void *fdata)
Definition: comm_quda.h:12
void comm_wait(MsgHandle *mh)
Definition: comm_mpi.cpp:186
void comm_allreduce(double *data)
Definition: comm_mpi.cpp:201
void comm_allreduce_max(double *data)
Definition: comm_mpi.cpp:209
int comm_dim_partitioned(int dim)
void comm_barrier(void)
Definition: comm_mpi.cpp:240