我在这里看到了许多类似的线程,但我的问题是,我的程序实际上是针对不同的设置运行的。
例如:当我的矩阵为 1024x1024
对于 2 核:错误 11
对于 4、8、16 等来说效果很好。
矩阵2048x2048
:
对于任何核心设置:错误 11。
我不明白为什么会发生这种情况,每个进程都需要 2048/(总进程) X 2028 矩阵来计算。它应该可以正常工作。
这就是我声明矩阵的方式:
int temp[wp][hp];
对于接收:
rc = MPI_Recv(&temp[0][0], wp*hp, MPI_INT, i, tag, MPI_COMM_WORLD, &status);
对于发送:
rc = MPI_Send(&temp[0][0], wp*hp, MPI_INT, 0, tag, MPI_COMM_WORLD);
我不明白,它应该可以工作。您认为这可能是内存问题而不是与指针相关吗?
最佳答案
我将使用 malloc 创建数组
int *temp =(int*)malloc(wp * hp * sizeof(int));
然后我将其他行更改为
rc = MPI_Recv(temp, wp*hp, MPI_INT, i, tag, MPI_COMM_WORLD, &status);
和
rc = MPI_Send(temp, wp*hp, MPI_INT, 0, tag, MPI_COMM_WORLD);
当我使用完数组后,我释放它。
free(temp)
就像一位评论者已经说过的那样,按照你的方式分配数组在 c++ 中是不合法的。
编辑:
如果您想访问二维数组,请使用以下模式:
temp[rowToAccess * numberOfColumns + columnToAcess]
关于c - MPI 错误 : (Segmentation fault: 11),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42101028/