c - MPI 错误 : (Segmentation fault: 11)

标签 c pointers parallel-processing mpi

我在这里看到了许多类似的线程,但我的问题是,我的程序实际上是针对不同的设置运行的。

例如:当我的矩阵为 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/

相关文章:

c - Doxygen 枚举表生成错误

java - HotSpot中Ordinary Object Pointer是指针还是对象结构?

r - 带plyr的多核,MC

c - 指向矩阵

c - 探索 getchar() 函数

c - 检索与文件指针关联的文件的名称

java - 我想使用两个线程打印斐波那契数列。就像第一个数字应该由第一个线程打印,然后第二个数字由第二个线程打印等等

multithreading - 缺少的 “Comparison of Parallel Processing API”。如何选择多线程库?

无法加载模块 libdb2.a(shr.o)

C数组衰减消歧