Skip to content

Commit bbe3658

Browse files
committed
Use 'unsigned long' to hold buffer sizes in bytes.
1 parent f585f53 commit bbe3658

File tree

1 file changed

+12
-10
lines changed

1 file changed

+12
-10
lines changed

src/Infrastructure/VM/src/ESMCI_VMKernel.C

+12-10
Original file line numberDiff line numberDiff line change
@@ -6998,7 +6998,9 @@ int VMK::alltoall(void *in, int inCount, void *out, int outCount,
69986998
// Step-1: SSI root PETs gather xfer data on their SSI.
69996999
// - Each PET prepares an xferBuffer to send its "in" data that is
70007000
// destined for PETs outside the local SSI to its SSI root PET.
7001-
std::vector<char> xferBuffer((npets-ssiLocalPetCount)*inCount*size);
7001+
unsigned long bufferSize = inCount * size;
7002+
bufferSize *= npets - ssiLocalPetCount;
7003+
std::vector<char> xferBuffer(bufferSize);
70027004
char *xferBC = (char *)&(xferBuffer[0]);
70037005
char *inC = (char *)in;
70047006
int j=0;
@@ -7017,17 +7019,18 @@ int VMK::alltoall(void *in, int inCount, void *out, int outCount,
70177019
char *xferSsiBC = NULL;
70187020
std::vector<char> xferSsiBuffer;
70197021
if (mpi_c_ssi_roots != MPI_COMM_NULL){
7020-
xferSsiBuffer.resize((npets-ssiLocalPetCount)
7021-
*inCount*size*ssiLocalPetCount);
7022+
bufferSize = inCount * size;
7023+
bufferSize *= npets - ssiLocalPetCount;
7024+
bufferSize *= ssiLocalPetCount;
7025+
xferSsiBuffer.resize(bufferSize);
70227026
xferSsiBC = (char *)&(xferSsiBuffer[0]);
70237027
}
70247028
MPI_Gather(xferBC, (npets-ssiLocalPetCount)*inCount, mpitype,
70257029
xferSsiBC, (npets-ssiLocalPetCount)*outCount, mpitype, 0, mpi_c_ssi);
70267030
{
70277031
std::stringstream msg;
70287032
msg << "VMK::alltoall(): line=" << __LINE__
7029-
<< " gathered into xferSsiBuffer bytes =" << (npets-ssiLocalPetCount)
7030-
*inCount*size*ssiLocalPetCount;
7033+
<< " gathered into xferSsiBuffer bytes =" << bufferSize;
70317034
ESMC_LogDefault.Write(msg.str(), ESMC_LOGMSG_DEBUG);
70327035
}
70337036
// Total exchange between SSI roots
@@ -7065,8 +7068,10 @@ int VMK::alltoall(void *in, int inCount, void *out, int outCount,
70657068
}
70667069
}
70677070
// - SSI roots collate data into SSI blocks for sending
7068-
std::vector<char> xferSsiSendBuffer((npets-ssiLocalPetCount)
7069-
*inCount*size*ssiLocalPetCount);
7071+
bufferSize = inCount * size;
7072+
bufferSize *= npets - ssiLocalPetCount;
7073+
bufferSize *= ssiLocalPetCount;
7074+
std::vector<char> xferSsiSendBuffer(bufferSize);
70707075
char *xferSsiSBC = (char *)&(xferSsiSendBuffer[0]);
70717076
int localSsi; // rank of local SSI's root, same as SSI index
70727077
MPI_Comm_rank(mpi_c_ssi_roots, &localSsi);
@@ -7076,7 +7081,6 @@ int VMK::alltoall(void *in, int inCount, void *out, int outCount,
70767081
<< " localSsi=" << localSsi;
70777082
ESMC_LogDefault.Write(msg.str(), ESMC_LOGMSG_DEBUG);
70787083
}
7079-
70807084
std::vector<int> xferInCounts(ssiCount);
70817085
std::vector<int> xferInOffsets(ssiCount);
70827086
std::vector<int> xferOutCounts(ssiCount);
@@ -7108,12 +7112,10 @@ int VMK::alltoall(void *in, int inCount, void *out, int outCount,
71087112
}
71097113
}
71107114
}
7111-
#if 1
71127115
// - Alltoallv xferSsiSendBuffer -> xferSsiBuffer
71137116
MPI_Alltoallv(xferSsiSBC, &(xferInCounts[0]), &(xferInOffsets[0]),
71147117
mpitype, xferSsiBC, &(xferOutCounts[0]), &(xferOutOffsets[0]),
71157118
mpitype, mpi_c_ssi_roots);
7116-
#endif
71177119
}
71187120
}
71197121
MPI_Barrier(mpi_c); //TODO: remove once implementation done

0 commit comments

Comments
 (0)