Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Even more possible optimizations #33

Open
wants to merge 2 commits into
base: exawind
Choose a base branch
from
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 @@
// 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 Note

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

Check notice

Code scanning / CodeQL

Declaration hides variable Note

Variable i hides another variable of the same name (on
line 217
).
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 Note

Variable i hides another variable of the same name (on
line 217
).
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 Note

Variable i hides another variable of the same name (on
line 217
).
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 Note

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

Check notice

Code scanning / CodeQL

Declaration hides variable Note

Variable i hides another variable of the same name (on
line 217
).
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 Note

Variable i hides another variable of the same name (on
line 217
).
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 Note

Variable i hides another variable of the same name (on
line 217
).
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 Note

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 Note

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 Note

Variable i hides another variable of the same name (on
line 217
).
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 Note

Variable i hides another variable of the same name (on
line 217
).
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 @@
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 @@
fp=NULL;
//
pc->getMap(&nsend,&nrecv,&sndMap,&rcvMap);
if (nsend==0) return;
//if (nsend==0) return;

Check notice

Code scanning / CodeQL

Commented-out code Note

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 @@
//
// 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 @@

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

Check notice

Code scanning / CodeQL

Commented-out code Note

This comment appears to contain commented-out code.
}

//
Expand Down Expand Up @@ -1037,7 +1038,7 @@
}
}

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 @@
//
// 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 @@
// 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
Loading