NEURON
nrnmpidec.h
Go to the documentation of this file.
1 /*
2 This file is processed by mkdynam.sh and so it is important that
3 the prototypes be of the form "type foo(type arg, ...)"
4 */
5 
6 #ifndef nrnmpidec_h
7 #define nrnmpidec_h
8 #include <nrnmpiuse.h>
9 #include <cstdint>
10 typedef long double longdbl;
11 #if NRNMPI
12 #include <stdlib.h>
13 #if defined(__cplusplus)
14 extern "C" {
15 #endif
16 
17 /* from bbsmpipack.cpp */
18 typedef struct bbsmpibuf {
19  char* buf;
20  int size;
21  int pkposition;
22  int upkpos;
23  int keypos;
24  int refcount;
25 } bbsmpibuf;
26 
27 // clang-format off
28 extern bbsmpibuf* nrnmpi_newbuf(int size);
29 extern void nrnmpi_copy(bbsmpibuf* dest, bbsmpibuf* src);
30 extern void nrnmpi_ref(bbsmpibuf* buf);
31 extern void nrnmpi_unref(bbsmpibuf* buf);
32 
33 extern void nrnmpi_upkbegin(bbsmpibuf* buf);
34 extern char* nrnmpi_getkey(bbsmpibuf* buf);
35 extern int nrnmpi_getid(bbsmpibuf* buf);
36 extern int nrnmpi_upkint(bbsmpibuf* buf);
37 extern double nrnmpi_upkdouble(bbsmpibuf* buf);
38 extern void nrnmpi_upkvec(int n, double* x, bbsmpibuf* buf);
39 extern char* nrnmpi_upkstr(bbsmpibuf* buf);
40 extern char* nrnmpi_upkpickle(size_t* size, bbsmpibuf* buf);
41 
42 extern void nrnmpi_pkbegin(bbsmpibuf* buf);
43 extern void nrnmpi_enddata(bbsmpibuf* buf);
44 extern void nrnmpi_pkint(int i, bbsmpibuf* buf);
45 extern void nrnmpi_pkdouble(double x, bbsmpibuf* buf);
46 extern void nrnmpi_pkvec(int n, double* x, bbsmpibuf* buf);
47 extern void nrnmpi_pkstr(const char* s, bbsmpibuf* buf);
48 extern void nrnmpi_pkpickle(const char* s, size_t size, bbsmpibuf* buf);
49 
50 extern int nrnmpi_iprobe(int* size, int* tag, int* source);
51 extern void nrnmpi_probe(int* size, int* tag, int* source);
52 extern void nrnmpi_bbssend(int dest, int tag, bbsmpibuf* r);
53 extern int nrnmpi_bbsrecv(int source, bbsmpibuf* r);
54 extern int nrnmpi_bbssendrecv(int dest, int tag, bbsmpibuf* s, bbsmpibuf* r);
55 
56 /* from nrnmpi.cpp */
57 extern void nrnmpi_init(int nrnmpi_under_nrncontrol, int* pargc, char*** pargv);
58 extern int nrnmpi_wrap_mpi_init(int* flag);
59 extern double nrnmpi_wtime();
60 extern void nrnmpi_terminate();
61 extern void nrnmpi_abort(int errcode);
62 extern void nrnmpi_subworld_size(int n);
63 
64 
65 /* from mpispike.cpp */
66 extern void nrnmpi_spike_initialize();
67 extern int nrnmpi_spike_exchange();
68 extern int nrnmpi_spike_exchange_compressed();
69 extern double nrnmpi_mindelay(double maxdel);
70 extern int nrnmpi_int_allmax(int i);
71 extern void nrnmpi_int_gather(int* s, int* r, int cnt, int root);
72 extern void nrnmpi_int_gatherv(int* s, int scnt, int* r, int* rcnt, int* rdispl, int root);
73 extern void nrnmpi_char_gatherv(char* s, int scnt, char* r, int* rcnt, int* rdispl, int root);
74 extern void nrnmpi_int_scatter(int* s, int* r, int cnt, int root);
75 extern void nrnmpi_char_scatterv(char* s, int* scnt, int* sdispl, char* r, int rcnt, int root);
76 extern void nrnmpi_int_allgather(int* s, int* r, int n);
77 extern void nrnmpi_int_allgather_inplace(int* srcdest, int n);
78 extern void nrnmpi_int_allgatherv_inplace(int* srcdest, int* n, int* dspl);
79 extern void nrnmpi_int_allgatherv(int* s, int* r, int* n, int* dspl);
80 extern void nrnmpi_char_allgatherv(char* s, char* r, int* n, int* dspl);
81 extern void nrnmpi_int_alltoall(int* s, int* r, int n);
82 extern void nrnmpi_int_alltoallv(int* s, int* scnt, int* sdispl, int* r, int* rcnt, int* rdispl);
83 extern void nrnmpi_int_alltoallv_sparse(int* s, int* scnt, int* sdispl, int* r, int* rcnt, int* rdispl);
84 extern void nrnmpi_long_allgatherv(int64_t* s, int64_t* r, int* n, int* dspl);
85 extern void nrnmpi_long_allgatherv_inplace(long* srcdest, int* n, int* dspl);
86 extern void nrnmpi_long_alltoallv(int64_t* s, int* scnt, int* sdispl, int64_t* r, int* rcnt, int* rdispl);
87 extern void nrnmpi_long_alltoallv_sparse(int64_t* s, int* scnt, int* sdispl, int64_t* r, int* rcnt, int* rdispl);
88 extern void nrnmpi_dbl_allgatherv(double* s, double* r, int* n, int* dspl);
89 extern void nrnmpi_dbl_allgatherv_inplace(double* srcdest, int* n, int* dspl);
90 extern void nrnmpi_dbl_alltoallv(double* s, int* scnt, int* sdispl, double* r, int* rcnt, int* rdispl);
91 extern void nrnmpi_dbl_alltoallv_sparse(double* s, int* scnt, int* sdispl, double* r, int* rcnt, int* rdispl);
92 extern void nrnmpi_char_alltoallv(char* s, int* scnt, int* sdispl, char* r, int* rcnt, int* rdispl);
93 extern void nrnmpi_dbl_broadcast(double* buf, int cnt, int root);
94 extern void nrnmpi_int_broadcast(int* buf, int cnt, int root);
95 extern void nrnmpi_char_broadcast(char* buf, int cnt, int root);
96 extern void nrnmpi_char_broadcast_world(char** pstr, int root);
97 extern int nrnmpi_int_sum_reduce(int in);
98 extern void nrnmpi_assert_opstep(int opstep, double t);
99 extern double nrnmpi_dbl_allmin(double x);
100 extern int nrnmpi_pgvts_least(double* t, int* op, int* init);
101 extern void nrnmpi_send_doubles(double* pd, int cnt, int dest, int tag);
102 extern void nrnmpi_recv_doubles(double* pd, int cnt, int src, int tag);
103 extern void nrnmpi_postrecv_doubles(double* pd, int cnt, int src, int tag, void** request);
104 extern void nrnmpi_wait(void** request);
105 extern void nrnmpi_barrier();
106 extern double nrnmpi_dbl_allreduce(double x, int type);
107 
108 extern void nrnmpi_dbl_allreduce_vec(double* src, double* dest, int cnt, int type);
109 extern void nrnmpi_longdbl_allreduce_vec(longdbl* src, longdbl* dest, int cnt, int type);
110 extern void nrnmpi_long_allreduce_vec(long* src, long* dest, int cnt, int type);
111 
112 extern void nrnmpi_dbl_allgather(double* s, double* r, int n);
113 #if BGPDMA
114 extern void nrnmpi_bgp_comm();
115 extern void nrnmpi_bgp_multisend(NRNMPI_Spike* spk, int n, int* hosts);
116 extern int nrnmpi_bgp_single_advance(NRNMPI_Spike* spk);
117 extern int nrnmpi_bgp_conserve(int nsend, int nrecv);
118 #endif
119 // clang-format on
120 
121 #if defined(__cplusplus)
122 }
123 #endif
124 
125 #endif
126 #endif
static void nrnmpi_int_alltoallv(int *s, int *scnt, int *sdispl, int *r, int *rcnt, int *rdispl)
static void nrnmpi_dbl_alltoallv(double *s, int *scnt, int *sdispl, double *r, int *rcnt, int *rdispl)
static void nrnmpi_dbl_allgatherv(double *s, double *r, int *n, int *dspl)
static void nrnmpi_int_allgather(int *s, int *r, int n)
static void nrnmpi_barrier()
static void nrnmpi_int_allgatherv(int *s, int *r, int *n, int *dspl)
static int nrnmpi_int_allmax(int x)
void nrnmpi_bgp_multisend(NRNMPI_Spike *, int, int *)
int nrnmpi_bgp_conserve(int nsend, int nrecv)
void nrnmpi_bgp_comm()
int nrnmpi_bgp_single_advance(NRNMPI_Spike *)
short type
Definition: cabvars.h:9
double t
Definition: cvodeobj.cpp:59
char buf[512]
Definition: init.cpp:13
#define i
Definition: md1redef.h:12
void init()
Definition: init.cpp:291
static void nrnmpi_postrecv_doubles(double *, int, int, int, void **)
Definition: multisplit.cpp:51
static void nrnmpi_wait(void **)
Definition: multisplit.cpp:53
static double nrnmpi_wtime()
Definition: multisplit.cpp:55
static void nrnmpi_send_doubles(double *, int, int, int)
Definition: multisplit.cpp:52
int const size_t const size_t n
Definition: nrngsl.h:11
void nrnmpi_init(int nrnmpi_under_nrncontrol, int *pargc, char ***pargv)
Definition: nrnmpi.cpp:58
void nrnmpi_abort(int errcode)
Definition: nrnmpi.cpp:205
void nrnmpi_terminate()
Definition: nrnmpi.cpp:180
long double longdbl
Definition: nrnmpidec.h:10
static void nrnmpi_dbl_broadcast(double *, int, int)
Definition: ocbbs.cpp:62
static void nrnmpi_char_broadcast(char *, int, int)
Definition: ocbbs.cpp:61
static void nrnmpi_int_broadcast(int *, int, int)
Definition: ocbbs.cpp:60
#define root
Definition: rbtqueue.cpp:53
#define cnt
Definition: spt2queue.cpp:19