int nrnmpi_spike_exchange() { int i, n; #if nrn_spikebuf_size > 0 int n1, novfl; #endif if (!displs) { np = nrnmpi_numprocs; displs = (int*)emalloc(np*sizeof(int)); displs[0] = 0; #if nrn_spikebuf_size > 0 make_spikebuf_type(); #endif } #if nrn_spikebuf_size == 0 MPI_Allgather(&nout_, 1, MPI_INT, nin_, 1, MPI_INT, nrnmpi_comm); n = nin_[0]; for (i=1; i < np; ++i) { displs[i] = n; n += nin_[i]; } if (n) { if (icapacity_ < n) { icapacity_ = n + 10; free(spikein_); spikein_ = (NRNMPI_Spike*)emalloc(icapacity_ * sizeof(NRNMPI_Spike)); } MPI_Allgatherv(spikeout_, nout_, spike_type, spikein_, nin_, displs, spike_type, nrnmpi_comm); } #else MPI_Allgather(spbufout_, 1, spikebuf_type, spbufin_, 1, spikebuf_type, nrnmpi_comm); novfl = 0; n = spbufin_[0].nspike; if (n > nrn_spikebuf_size) { nin_[0] = n - nrn_spikebuf_size; novfl += nin_[0]; }else{ nin_[0] = 0; } for (i=1; i < np; ++i) { displs[i] = novfl; n1 = spbufin_[i].nspike; n += n1; if (n1 > nrn_spikebuf_size) { nin_[i] = n1 - nrn_spikebuf_size; novfl += nin_[i]; }else{ nin_[i] = 0; } } if (novfl) { if (icapacity_ < novfl) { icapacity_ = novfl + 10; free(spikein_); spikein_ = (NRNMPI_Spike*)hoc_Emalloc(icapacity_ * sizeof(NRNMPI_Spike)); hoc_malchk(); } n1 = (nout_ > nrn_spikebuf_size) ? nout_ - nrn_spikebuf_size : 0; MPI_Allgatherv(spikeout_, n1, spike_type, spikein_, nin_, displs, spike_type, nrnmpi_comm); } ovfl_ = novfl; #endif return n; }
void *_graphgetmem(unsigned size) { char *p; p= hoc_Emalloc(size), hoc_malchk() ; return p; }