15 #error "This implementation can only be included once"
51 #define HAVEWANT_t int
63 displ[
i + 1] = displ[
i] +
cnt[
i];
72 nrnmpi_int_alltoall(srccnt, destcnt, 1);
77 destcnt[
i] = srccnt[
i];
97 for (
int i = 0;
i < size; ++
i) {
98 int r = (*rendezvous_rank)(
data[
i]);
111 for (
int i = 0;
i < size; ++
i) {
112 int r = (*rendezvous_rank)(
data[
i]);
113 sdata[sdispl[r] + scnt[r]] =
data[
i];
133 int*& send_to_want_cnt,
134 int*& send_to_want_displ,
136 int*& recv_from_have_cnt,
137 int*& recv_from_have_displ,
146 int *have_s_cnt, *have_s_displ, *have_r_cnt, *have_r_displ;
160 for (
int i = 0;
i < have_r_cnt[r]; ++
i) {
162 if (havekey2rank.find(
key) != havekey2rank.end()) {
166 "key %lld owned by multiple ranks\n",
170 havekey2rank[
key] = r;
173 delete[] have_s_data;
175 delete[] have_s_displ;
176 delete[] have_r_data;
178 delete[] have_r_displ;
181 int *want_s_cnt, *want_s_displ, *want_r_cnt, *want_r_displ;
197 int* want_r_ownerranks =
new int[
n];
199 for (
int i = 0;
i < want_r_cnt[r]; ++
i) {
200 int ix = want_r_displ[r] +
i;
202 if (havekey2rank.find(
key) == havekey2rank.end()) {
206 "key = %lld is wanted but does not exist\n",
210 want_r_ownerranks[ix] = havekey2rank[
key];
213 delete[] want_r_data;
233 want_s_ownerranks[
i] = want_r_ownerranks[
i];
236 delete[] want_r_ownerranks;
238 delete[] want_r_displ;
248 delete[] want_s_displ;
255 for (
int i = 0;
i <
n; ++
i) {
256 int r = want_s_ownerranks[
i];
263 for (
int i = 0;
i <
n; ++
i) {
264 int r = want_s_ownerranks[
i];
266 want_s_data[want_s_displ[r] + want_s_cnt[r]] =
key;
269 delete[] want_s_ownerranks;
270 delete[] old_want_s_data;
277 want_s_data, want_s_cnt, want_s_displ, want_r_data, want_r_cnt, want_r_displ);
282 want_r_data[
i] = want_s_data[
i];
288 send_to_want = want_r_data;
289 send_to_want_cnt = want_r_cnt;
290 send_to_want_displ = want_r_displ;
291 recv_from_have = want_s_data;
292 recv_from_have_cnt = want_s_cnt;
293 recv_from_have_displ = want_s_displ;
static void nrnmpi_int_alltoallv(const int *s, const int *scnt, const int *sdispl, int *r, int *rcnt, int *rdispl)
int rendezvous_rank(const T &key)
THIS FILE IS AUTO GENERATED DONT MODIFY IT.
static void have_to_want(HAVEWANT_t *have, int have_size, HAVEWANT_t *want, int want_size, HAVEWANT_t *&send_to_want, int *&send_to_want_cnt, int *&send_to_want_displ, HAVEWANT_t *&recv_from_have, int *&recv_from_have_cnt, int *&recv_from_have_displ, int(*rendezvous_rank)(HAVEWANT_t))
static int default_rendezvous(HAVEWANT_t key)
void hoc_execerror(const char *s1, const char *s2)
static int * srccnt2destcnt(int *srccnt)
static void rendezvous_rank_get(HAVEWANT_t *data, int size, HAVEWANT_t *&sdata, int *&scnt, int *&sdispl, HAVEWANT_t *&rdata, int *&rcnt, int *&rdispl, int(*rendezvous_rank)(HAVEWANT_t))
static int * cnt2displ(int *cnt)
corenrn_parameters corenrn_param
Printing method.
int const size_t const size_t n
#define HAVEWANT_alltoallv
bool mpi_enable
Initialization seed for random number generator (int)