[英]MPI not receiving the same buffer I sent with blocking send/recv
我沒有收到與發送相同的緩沖區。 即使阻止發送/接收。 我使用連續分配的緩沖區。
我基本上在每個消息中都更改了該緩沖區中的第一行。 由主機發送后,具有更改的緩沖區可以,但是在從屬設備中接收到緩沖區后,它是錯誤的。
我已經花了15多個小時。 任何幫助表示贊賞。
這是我在1個主控+ 1個從屬情況下的許多消息。 注意主節點上的第一行如何更改,但緩沖區的其余部分保持不變。 在從站側,其余緩沖區也將更改。 它是: 日志消息
size_t order = 0;
floattype **getWork(floattype **work, floattype **tmatrix)
{
size_t tmp = 1;
// leading row
work[0] = tmatrix[order++];
// get needed rows
for(size_t row = 1; row < 5; row++)
{
work[tmp++] = tmatrix[row];
}
return work;
}
void master(size_t chunksize, floattype **extendedmatrix, size_t paramcount, size_t rowcount)
{
int ntasks, node;
size_t reply;
floattype **tmatrix = transponeMatrix(extendedmatrix, paramcount, rowcount);
floattype **work = AllocMatrix(rowcount, chunksize + 1);
MPI_Status status;
MPI_Comm_size(MPI_COMM_WORLD, &ntasks);
// init all slaves
for (node = 1; node < ntasks; ++node)
{
getWork(work, tmatrix);
MPI_Send(work[0], 32, MPI_DOUBLE, node, WORKTAG, MPI_COMM_WORLD);
}
size_t rpt = 0;
while (rpt < 3)
{
rpt++;
MPI_Recv(&reply, 1, MPI_UNSIGNED_LONG, MPI_ANY_SOURCE, INFOTAG, MPI_COMM_WORLD, &status);
getWork(work, tmatrix);
MPI_Send(work[0], 32, MPI_DOUBLE, status.MPI_SOURCE, WORKTAG, MPI_COMM_WORLD);
}
}
void slave(size_t chunksize, size_t paramcount, size_t rowcount)
{
floattype **received = AllocMatrix(rowcount, chunksize + 1);
size_t reply = 0;
MPI_Status status;
while (true) {
MPI_Recv(received[0], 32, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
// lets finish
if (status.MPI_TAG == DIETAG) {
FreeMatrix(received);
return;
}
MPI_Send(&reply, 1, MPI_UNSIGNED_LONG, 0, INFOTAG, MPI_COMM_WORLD);
}
}
錯誤的內存分配...應該使用memcpy()將內存塊從一個緩沖區復制到getWork()中的另一個緩沖區。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.