Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/exchangeAMRDonors.C
Original file line number Diff line number Diff line change
Expand Up @@ -342,7 +342,7 @@ void tioga::checkComm(void)
sndPack[i].intData[1]=1;
}
//
pc_cart->sendRecvPackets(sndPack,rcvPack);
pc_cart->sendRecvPackets2(sndPack,rcvPack);
pc_cart->clearPackets(sndPack,rcvPack);
TIOGA_FREE(sndMap);
TIOGA_FREE(rcvMap);
Expand Down
2 changes: 1 addition & 1 deletion src/exchangeBoxes.C
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ void tioga::exchangeBoxes(void)
// << std::setw(3) << key_recv << " "
// << std::setw(3) << key_send << std::endl;
}
pc->sendRecvPackets(sndPack,rcvPack);
pc->sendRecvPackets2(sndPack,rcvPack);

for (int k=0; k<nrecv; k++) {
int m=0;
Expand Down
10 changes: 5 additions & 5 deletions src/exchangeDonors.C
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ void tioga::exchangeDonors(void)
// and receiving
//
pc->getMap(&nsend,&nrecv,&sndMap,&rcvMap);
if (nsend == 0) return;
//
// create packets to send and receive
// and initialize them to zero
Expand Down Expand Up @@ -74,7 +73,8 @@ void tioga::exchangeDonors(void)
//
// communicate donors (comm1)
//
pc->sendRecvPackets(sndPack,rcvPack);
pc->sendRecvPackets2(sndPack,rcvPack);
//if (nsend == 0) return;
// Initialize linked lists and populate donor data from rcvPack
for (int ib=0;ib<nblocks;ib++) {
auto& mb = mblocks[ib];
Expand Down Expand Up @@ -156,7 +156,7 @@ void tioga::exchangeDonors(void)
// comm 2
// notify donors that they are accepted (for now)
//
pc->sendRecvPackets(sndPack,rcvPack);
pc->sendRecvPackets2(sndPack,rcvPack);

std::vector<int> ninterp(nblocks,0);
for(int k=0;k<nrecv;k++)
Expand Down Expand Up @@ -228,7 +228,7 @@ void tioga::exchangeDonors(void)
//
// communciate cancellation data comm 3
//
pc->sendRecvPackets(sndPack,rcvPack);
pc->sendRecvPackets2(sndPack,rcvPack);

for (int k=0; k<nrecv; k++) {
int m = 0;
Expand Down Expand Up @@ -279,7 +279,7 @@ void tioga::exchangeDonors(void)
// comm 4
// final receptor data to set iblanks
//
pc->sendRecvPackets(sndPack,rcvPack);
pc->sendRecvPackets2(sndPack,rcvPack);
//
for(int ib=0;ib<nblocks;ib++)
mblocks[ib]->clearIblanks();
Expand Down
2 changes: 1 addition & 1 deletion src/exchangeSearchData.C
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ void tioga::exchangeSearchData(int at_points)
sndPack[k].realData[m++] = real_data[ii][j];
}
}
pc->sendRecvPackets(sndPack, rcvPack);
pc->sendRecvPackets2(sndPack, rcvPack);

// Reset MeshBlock data structures
for (int ib=0;ib<nblocks;ib++) {
Expand Down
133 changes: 133 additions & 0 deletions src/parallelComm.C
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,139 @@ void parallelComm::sendRecvPacketsAll(PACKET *sndPack, PACKET *rcvPack)
// TIOGA_FREE(status);
// }

void parallelComm::sendRecvPackets2(PACKET *sndPack,PACKET *rcvPack)
{
int i;
int *sint,*sreal,*rint,*rreal;
//
sint=(int *)malloc(sizeof(int)*numprocs);
sreal=(int *) malloc(sizeof(int)*numprocs);
rint=(int *)malloc(sizeof(int)*numprocs);
rreal=(int *) malloc(sizeof(int)*numprocs);
// remove when using stl vectors and just init the vectors to 0
for(i=0;i<numprocs;i++){
sint[i]=sreal[i]=0;
rint[i]=rreal[i]=0;
}
for(i=0;i<nsend;i++){
sint[sndMap[i]]=sndPack[i].nints;
sreal[sndMap[i]]=sndPack[i].nreals;
}
//
MPI_Alltoall(sint,1,MPI_INT,rint,1,MPI_INT,scomm);
MPI_Alltoall(sreal,1,MPI_INT,rreal,1,MPI_INT,scomm);
//
for(i=0;i<nrecv;i++) {
rcvPack[i].nints=rint[rcvMap[i]];
rcvPack[i].nreals=rreal[rcvMap[i]];
}

int all_snd_nints = std::accumulate(sint, sint + numprocs, 0);
int all_rcv_nints = std::accumulate(rint, rint + numprocs, 0);
int *all_snd_intData, *all_rcv_intData;
all_snd_intData=(int *) malloc(sizeof(int)*all_snd_nints);
all_rcv_intData=(int *) malloc(sizeof(int)*all_rcv_nints);
for (int i = 0; i < all_snd_nints; i++) {

Check notice

Code scanning / CodeQL

Declaration hides variable

Variable i hides another variable of the same name (on [line 217](1)).
all_snd_intData[i] = 0;
}
for (int i = 0; i < all_rcv_nints; i++) {

Check notice

Code scanning / CodeQL

Declaration hides variable

Variable i hides another variable of the same name (on [line 217](1)).
all_rcv_intData[i] = 0;
}
std::vector<int> snd_int_displs(numprocs+1, 0);
std::vector<int> rcv_int_displs(numprocs+1, 0);
for (int i=1; i <= numprocs; i++) {

Check notice

Code scanning / CodeQL

Declaration hides variable

Variable i hides another variable of the same name (on [line 217](1)).
snd_int_displs[i] = snd_int_displs[i-1] + sint[i-1];
rcv_int_displs[i] = rcv_int_displs[i-1] + rint[i-1];
}
for (int i=0; i < nsend; i++) {

Check notice

Code scanning / CodeQL

Declaration hides variable

Variable i hides another variable of the same name (on [line 217](1)).
int displ = snd_int_displs[sndMap[i]];
for(int j=0; j < sint[sndMap[i]]; j++){
all_snd_intData[displ+j] = sndPack[i].intData[j];
}
}
MPI_Request int_request;
MPI_Ialltoallv(all_snd_intData,
sint,
snd_int_displs.data(),
MPI_INT,
all_rcv_intData,
rint,
rcv_int_displs.data(),
MPI_INT,
scomm,
&int_request);

int all_snd_nreals = std::accumulate(sreal, sreal + numprocs, 0);
int all_rcv_nreals = std::accumulate(rreal, rreal + numprocs, 0);
REAL *all_snd_realData, *all_rcv_realData;
all_snd_realData=(REAL *) malloc(sizeof(REAL)*all_snd_nreals);
all_rcv_realData=(REAL *) malloc(sizeof(REAL)*all_rcv_nreals);
for (int i = 0; i < all_snd_nreals; i++) {

Check notice

Code scanning / CodeQL

Declaration hides variable

Variable i hides another variable of the same name (on [line 217](1)).
all_snd_realData[i] = 0;
}
for (int i = 0; i < all_rcv_nreals; i++) {

Check notice

Code scanning / CodeQL

Declaration hides variable

Variable i hides another variable of the same name (on [line 217](1)).
all_rcv_realData[i] = 0;
}
std::vector<int> snd_real_displs(numprocs+1, 0);
std::vector<int> rcv_real_displs(numprocs+1, 0);
for (int i=1; i <= numprocs; i++) {

Check notice

Code scanning / CodeQL

Declaration hides variable

Variable i hides another variable of the same name (on [line 217](1)).
snd_real_displs[i] = snd_real_displs[i-1] + sreal[i-1];
rcv_real_displs[i] = rcv_real_displs[i-1] + rreal[i-1];
}
for (int i=0; i < nsend; i++) {

Check notice

Code scanning / CodeQL

Declaration hides variable

Variable i hides another variable of the same name (on [line 217](1)).
int displ = snd_real_displs[sndMap[i]];
for(int j=0; j < sreal[sndMap[i]]; j++){
all_snd_realData[displ+j] = sndPack[i].realData[j];
}
}
MPI_Request real_request;
MPI_Ialltoallv(all_snd_realData,
sreal,
snd_real_displs.data(),
MPI_DOUBLE,
all_rcv_realData,
rreal,
rcv_real_displs.data(),
MPI_DOUBLE,
scomm,
&real_request);

// FIXME: here and above I think I should move this a bit lower

Check notice

Code scanning / CodeQL

FIXME comment

FIXME comment: here and above I think I should move this a bit lower
MPI_Wait(&int_request, MPI_STATUS_IGNORE);
for(i=0;i<nrecv;i++){
if (rcvPack[i].nints > 0) {
rcvPack[i].intData=(int *) malloc(sizeof(int)*rcvPack[i].nints);
}
if (rcvPack[i].nreals > 0) {
rcvPack[i].realData=(REAL *) malloc(sizeof(REAL)*rcvPack[i].nreals);
}
}

// FIXME: here and above I think I should move this a bit lower

Check notice

Code scanning / CodeQL

FIXME comment

FIXME comment: here and above I think I should move this a bit lower
MPI_Wait(&real_request, MPI_STATUS_IGNORE);
for (int i=0; i < nrecv; i++) {

Check notice

Code scanning / CodeQL

Declaration hides variable

Variable i hides another variable of the same name (on [line 217](1)).
int displ = rcv_int_displs[rcvMap[i]];
for(int j=0; j < rint[rcvMap[i]]; j++){
rcvPack[i].intData[j] = all_rcv_intData[displ+j];
}
}
for (int i=0; i < nrecv; i++) {

Check notice

Code scanning / CodeQL

Declaration hides variable

Variable i hides another variable of the same name (on [line 217](1)).
int displ = rcv_real_displs[rcvMap[i]];
for(int j=0; j < rreal[rcvMap[i]]; j++){
rcvPack[i].realData[j] = all_rcv_realData[displ+j];
}
}

TIOGA_FREE(all_snd_intData);
TIOGA_FREE(all_rcv_intData);
TIOGA_FREE(all_snd_realData);
TIOGA_FREE(all_rcv_realData);
TIOGA_FREE(sint);
TIOGA_FREE(sreal);
TIOGA_FREE(rint);
TIOGA_FREE(rreal);
}

void parallelComm::sendRecvPackets(PACKET *sndPack,PACKET *rcvPack)
{
int i;
Expand Down
2 changes: 2 additions & 0 deletions src/parallelComm.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,8 @@ class parallelComm {

void sendRecvPacketsAll(PACKET *sndPack, PACKET *rcvPack);

void sendRecvPackets2(PACKET *sndPack, PACKET *rcvPack);

void sendRecvPackets(PACKET *sndPack, PACKET *rcvPack);

void sendRecvPacketsCheck(PACKET *sndPack, PACKET *rcvPack);
Expand Down
15 changes: 8 additions & 7 deletions src/tioga.C
Original file line number Diff line number Diff line change
Expand Up @@ -492,7 +492,8 @@ void tioga::performConnectivity(void)
this->myTimer("tioga::exchangeDonors",1);
//this->reduce_fringes();
//outputStatistics();
MPI_Allreduce(&ihigh,&ihighGlobal,1,MPI_INT,MPI_MAX,scomm);
//MPI_Allreduce(&ihigh,&ihighGlobal,1,MPI_INT,MPI_MAX,scomm);
ihighGlobal = 0;
//if (ihighGlobal) {
this->myTimer("tioga::getCellIblanks",0);
for (int ib=0;ib<nblocks;ib++) {
Expand Down Expand Up @@ -743,7 +744,7 @@ void tioga::dataUpdate(int nvar,int interptype, int at_points)
fp=NULL;
//
pc->getMap(&nsend,&nrecv,&sndMap,&rcvMap);
if (nsend==0) return;
//if (nsend==0) return;

Check notice

Code scanning / CodeQL

Commented-out code

This comment appears to contain commented-out code.
sndPack=(PACKET *)malloc(sizeof(PACKET)*nsend);
rcvPack=(PACKET *)malloc(sizeof(PACKET)*nrecv);
//
Expand Down Expand Up @@ -807,7 +808,7 @@ void tioga::dataUpdate(int nvar,int interptype, int at_points)
//
// communicate the data across
//
pc->sendRecvPackets(sndPack,rcvPack);
pc->sendRecvPackets2(sndPack,rcvPack);
//
// decode the packets and update the data
//
Expand Down Expand Up @@ -968,7 +969,7 @@ void tioga::getReceptorInfo(std::vector<int>& receptors)

if (nsend == 0) {
receptors.clear();
return;
//return;

Check notice

Code scanning / CodeQL

Commented-out code

This comment appears to contain commented-out code.
}

//
Expand Down Expand Up @@ -1037,7 +1038,7 @@ void tioga::getReceptorInfo(std::vector<int>& receptors)
}
}

pc->sendRecvPackets(sndPack, rcvPack);
pc->sendRecvPackets2(sndPack, rcvPack);

int rsize=0;
for (int k=0; k<nrecv; k++) {
Expand Down Expand Up @@ -1225,7 +1226,7 @@ void tioga::reduce_fringes(void)
//
// communciate cancellation data comm 3
//
pc->sendRecvPackets(sndPack,rcvPack);
pc->sendRecvPackets2(sndPack,rcvPack);
//
for (int k=0; k<nrecv; k++) {
int m = 0;
Expand Down Expand Up @@ -1275,7 +1276,7 @@ void tioga::reduce_fringes(void)
// comm 4
// final receptor data to set iblanks
//
pc->sendRecvPackets(sndPack,rcvPack);
pc->sendRecvPackets2(sndPack,rcvPack);
//
for(int ib=0;ib<nblocks;ib++)
mblocks[ib]->clearIblanks();
Expand Down