MCPcopy Create free account
hub / github.com/QuEST-Kit/QuEST / receiveArray

Function receiveArray

quest/src/comm/comm_routines.cpp:269–290  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

267
268
269void receiveArray(qcomp* dest, qindex numElems, int pairRank) {
270#if COMPILE_MPI
271
272 // expect the data in multiple messages
273 auto [messageSize, numMessages] = dividePow2PayloadIntoMessages(numElems);
274
275 // create a request for each asynch receive below
276 vector<MPI_Request> requests(numMessages, MPI_REQUEST_NULL);
277
278 // listen to receive each uniquely-tagged message asynchronously (as per arxiv.org/abs/2308.07402)
279 for (qindex m=0; m<numMessages; m++) {
280 int tag = static_cast<int>(m); // gauranteed int, but m*messageSize needs qindex
281 MPI_Irecv(&dest[m*messageSize], messageSize, MPI_QCOMP, pairRank, tag, MPI_COMM_WORLD, &requests[m]);
282 }
283
284 // receivers wait for all messages to be received (while sender asynch proceeds)
285 MPI_Waitall(requests.size(), requests.data(), MPI_STATUSES_IGNORE);
286
287#else
288 error_commButEnvNotDistributed();
289#endif
290}
291
292
293

Callers 2

receiveArrayToGpuBufferFunction · 0.85

Tested by

no test coverage detected