16 f =
fopen(fname,
"a");
20 for (
const auto& iter: map) {
28 void alltoalldebug(
const char* p,
int*
s,
int* scnt,
int* sdispl,
int* r,
int* rcnt,
int* rdispl){
32 f =
fopen(fname,
"a");
37 fprintf(f,
" s%d : %d %d :",
i, scnt[
i], sdispl[i]);
38 for (
int j = sdispl[
i];
j < sdispl[
i+1]; ++
j) {
44 fprintf(f,
" r%d : %d %d :",
i, rcnt[
i], rdispl[i]);
45 for (
int j = rdispl[
i];
j < rdispl[
i+1]; ++
j) {
54 void alltoalldebug(
const char* p,
int* s,
int* scnt,
int* sdispl,
int* r,
int* rcnt,
int* rdispl){}
62 f =
fopen(fname,
"a");
80 f =
fopen(fname,
"a");
82 for (
const auto& iter:
gid2in_) {
97 static void del(
int* a) {
104 if (size == 0) {
return 0; }
105 int* x =
new int[size];
106 for (
int i=0;
i < size; ++
i) {
113 int* aoff =
new int[size+1];
115 for (
int i=0;
i < size; ++
i) {
116 aoff[
i+1] = aoff[
i] + acnt[
i];
140 #define all2allv_perf 0 145 static void all2allv_int(
int* s,
int* scnt,
int* sdispl,
int*& r,
int*& rcnt,
int*& rdispl,
const char* dmes) {
161 printf(
"all2allv_int %s space=%d total=%llu time=%g\n", dmes, nb,
nrn_mallinfo(0), tm);
170 virtual void alloc();
181 using Int2TarList = std::unordered_map<int, std::unique_ptr<TarList>>;
215 static int iran(
int i1,
int i2) {
218 if (i1 == i2) {
return i1; }
234 for (
int i=0;
i <
n; ++
i) {
242 for (
int i=0;
i <
n; ++
i) {
246 int i3 =
iran(i1, i2);
247 int itar = tl->
list[i1];
285 for (
const auto& iter:
gid2in_) {
287 ps->bgp.srchost_ = 0;
305 for (
int i = 0;
i < sz;) {
314 ps->bgp.dma_send_phase2_ = bsp;
319 for (
int j = 0;
j <
size; ++
j) {
339 for (
int j = 0;
j <
size; ++
j) {
354 if (max_ntarget_host < bs->ntarget_hosts_) {
365 if (bsp && max_multisend_targets < bsp->ntarget_hosts_phase2_) {
374 int *
s, *r, *scnt, *rcnt, *sdispl, *rdispl;
387 for (
const auto& iter:
gid2in_) {
388 int gid = iter.first;
395 for (
const auto& iter: gid2in_) {
396 int gid = iter.first;
397 s[sdispl[gid%
nhost]++] = gid;
403 all2allv_int(s, scnt, sdispl, r, rcnt, rdispl,
"gidin to intermediate");
412 for (
int i=0;
i < rdispl[
nhost]; ++
i) {
413 const int gid = r[
i];
414 auto& tl = gid2tarlist[gid];
435 for (
auto& iter: gid2tarlist) {
436 TarList* tl = iter.second.get();
443 int b = rdispl[
rank];
444 int e = rdispl[rank + 1];
445 for (
int i=b;
i <
e; ++
i) {
446 const auto iter = gid2tarlist.find(r[
i]);
447 if (iter != gid2tarlist.end()) {
448 TarList* tl = iter->second.get();
471 int gid = iter.first;
480 for (
const auto& iter: gid2out_) {
482 int gid = iter.first;
484 s[sdispl[gid%
nhost]++] = gid;
490 all2allv_int(s, scnt, sdispl, r, rcnt, rdispl,
"gidout");
496 int b = rdispl[
rank];
497 int e = rdispl[rank+1];
498 for (
int i=b;
i <
e; ++
i) {
504 const auto iter = gid2tarlist.find(r[
i]);
505 if (iter != gid2tarlist.end()) {
506 TarList* tl = iter->second.get();
515 for (
const auto& iter: gid2tarlist) {
516 TarList* tl = iter.second.get();
539 for (
const auto& iter: gid2tarlist) {
540 TarList* tl = iter.second.get();
556 for (
int i=0;
i < tl->
size; ++
i) {
574 for (
const auto& iter: gid2tarlist) {
575 int gid = iter.first;
576 TarList* tl = iter.second.get();
581 s[sdispl[tl->
rank]++] = gid;
586 for (
int i = 0;
i < tl->
size; ++
i) {
589 for (
int i = 0;
i < tl->
size; ++
i) {
591 s[sdispl[
rank]++] = gid;
600 s[sdispl[tl->
rank]++] = gid;
605 for (
int i = 0;
i < tl->
size; ++
i) {
612 all2allv_int(s, scnt, sdispl, r, rcnt, rdispl,
"lists");
618 int sz = rdispl[
nhost];
std::unordered_map< int, std::unique_ptr< TarList > > Int2TarList
void bgpdma_cleanup_presyn(PreSyn *ps)
static int max_multisend_targets
static int * newintval(int val, int size)
static Gid2PreSyn gid2out_
static int max_ntarget_host
void alltoalldebug(const char *p, int *s, int *scnt, int *sdispl, int *r, int *rcnt, int *rdispl)
static void all2allv_helper(int *scnt, int *sdispl, int *&rcnt, int *&rdispl)
static double nhost(void *v)
sprintf(buf," if (secondorder) {\ " int _i;\" " for(_i=0;_i< %d;++_i) {\" " _p[_slist%d[_i]]+=dt *_p[_dlist%d[_i]];\" " }}\", numeqn, listnum, listnum)
static int * newoffset(int *acnt, int size)
int ntarget_hosts_phase1_
static void setup_presyn_dma_lists()
unsigned long long nrn_mallinfo(int)
uint32_t nrnisaac_uint32_pick(void *v)
static void all2allv_int(int *s, int *scnt, int *sdispl, int *&r, int *&rcnt, int *&rdispl, const char *dmes)
void nrnisaac_init(void *v, unsigned long int seed)
static double map(void *v)
static unsigned int get_random()
int const size_t const size_t n
static const char * fname(const char *name)
static Gid2PreSyn gid2in_
static void nrnmpi_int_alltoallv(int *s, int *scnt, int *sdispl, int *r, int *rcnt, int *rdispl)
fprintf(stderr, "Don't know the location of params at %p\, pp)
static void fill_dma_send_lists(int, int *)
#define NTARGET_HOSTS_PHASE1
void * nrnisaac_new(void)
std::unordered_map< int, PreSyn * > Gid2PreSyn
static int setup_target_lists(int **)
static double nrnmpi_wtime()
static void random_init(int i)
static void phase2organize(TarList *tl)
int * target_hosts_phase2_
int ntarget_hosts_phase2_
void celldebug(const char *p, Gid2PreSyn &map)
static int iran(int i1, int i2)