【发布时间】:2020-01-18 09:09:10
【问题描述】:
我正在通过 MPI 发送一个 2D 数组,为了使其正常工作,该数组需要在内存中连续分配。
我是这样分配的:
int **array;
array = malloc(size1 * sizeof( *(array) );
for (int k = 0; k < size1; k++)
array[k] = malloc(size2 * sizeof(**(array));
那我想用:
MPI_Send(array, size1*size2, MPI_INT, target_pe, tag, MPI_COMM_WORLD);
如何确保数组是连续分配的?
目前我正在尝试这个:
for (int k = 0; k < size1; k++)
MPI_Send(array[k], size2, MPI_INT, target_pe, tag, MPI_COMM_WORLD);
这会导致稍后在程序的不相关部分中出现段错误。但是,如果我将元素一一发送,它就可以工作。
【问题讨论】:
-
你不能那样做。顺便说一句,这不是二维数组,而是指针数组
-
*(int)的意思是*array吗?否则没有多大意义。 -
另外,您尝试创建的是jagged array。您可以分配一个
size1 * size2元素数组并使用简单的算术来访问这些元素。 -
确实应该是
*(array),我修好了。因此,如果我malloc (size*size2 * sizeof int)那将是一个一维数组并且使用 MPI 的行为与预期一样,但我的程序始终访问数组 [i] [j],因此它需要进行重大重构。我在当前方法中添加了一些其他问题。