gpt4 book ai didi

c++ - MPI C++ - 排名变化

转载 作者:行者123 更新时间:2023-11-30 02:37:23 26 4
gpt4 key购买 nike

我已经对我的代码进行了并行处理,其中的一部分有一个我无法理解的奇怪行为。代码片段如下:

int SizeEdgeForNewNodes_int;

{
MPI_Request send_request[mpi_size - 1], recv_request;
MPI_Status send_status[mpi_size - 1], recv_status;
MPI_Barrier(MPI_COMM_WORLD);

if (myrank == 0) {
for (int m = 1; m < mpi_size; ++m){
int sendTag = m;
MPI_Isend(&SizeEdgeForNewNodes[m], 1, MPI_INT64_T, m, sendTag, MPI_COMM_WORLD, &send_request[m - 1]);
cout << myrank << " - SizeEdgeForNewNodes[m] = " << SizeEdgeForNewNodes[m] << endl;
}
}
MPI_Barrier(MPI_COMM_WORLD);

if (myrank > 0) {
int recvTag = myrank;
cout << "within b4 - myrank = " << myrank << endl;
MPI_Irecv(&SizeEdgeForNewNodes_int, 1, MPI_INT64_T, 0, recvTag, MPI_COMM_WORLD, &recv_request); // 1st non blocking receive
cout << "within after - myrank = " << myrank << endl;
}
MPI_Barrier(MPI_COMM_WORLD);

if (myrank != 0){
MPI_Wait(&recv_request, &recv_status);
}
MPI_Barrier(MPI_COMM_WORLD);

if (myrank == 0){
MPI_Waitall(mpi_size - 1, send_request, send_status);
}
MPI_Barrier(MPI_COMM_WORLD);
}

在 Debug 版本中运行代码时一切正常,获得的输出为:

0 - SizeEdgeForNewNodes[m] = 0
within b4 - myrank = 1
within after - myrank = 1

在 Release 中运行时,我获得以下输出:

0 - SizeEdgeForNewNodes[m] = 0
within b4 - myrank = 1
within after - myrank = 0

我使用的是 intel-15.0 编译器,MPI 实现是 mvapich2/2.1。谢谢你的帮助,

JB

最佳答案

您收到一个 64 位的 int,但您的缓冲区分配的是 32 位的!所以接收到的值会覆盖你的局部变量(myrank)。要解决此问题,请更改接收缓冲区的数据类型(SizeEdgeForNewNodes_int)

关于c++ - MPI C++ - 排名变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31630817/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com