1

我正在尝试将字符串数组发送到 MPI 中的从属进程,但我不知道该怎么做。我有一大堆字符串,我从文件中读取了这些字符串,我需要将这个数组的一部分发送给从站。我正在分配一个新数组,其中包含主数组中的一些元素并尝试发送它。这是代码的发送部分:

int w = 0;
int division = size / (procs -1);
for(i=1; i<procs; i++){
    //allocating
    char **array1 = (char**) malloc(sizeof(*array1) * division);
    array1[0] = (char*) malloc(sizeof(*array1[0]) * division * buf);
    for(j=1; j<division; j++)
        array1[i] = &(array1[0][i*buf]);

    // filling it up
    for(j=0; j<division; j++)
        array1[j] = array[w++];

    // sending
    MPI_Send(&array1, division[i], MPI_CHAR, i, tag, MPI_COMM_WORLD);

    // clearing memory
    free(array1);
}
printf("%d: All Sent\n", rank);

如果我将发送方法更改为这样

MPI_SEND(&array[0][0] ...)

它有效,但我需要为每个进程发送多个字符串。

4

2 回答 2

1

我也在做一个 MPI 项目,因为没有人回答这个问题,我会尽力而为。我认为在您的实现中,您传递了一个指针列表,每个指针指向一个字符列表,因此 MPI_send 本质上发送了一个数组地址列表。结果 data_type "char" 将不匹配,或者它可能只能找到每个数组中的第一个 char。

于 2013-12-17T03:45:47.523 回答
-1

就我的经验而言,顺序 malloc 不能保证内存的连续性。

您的二维数组在内存中不连续,MPI 无法以“标准”方式传输它。

为了澄清这个问题,你可以看这里:

通过 MPI 发送和接收二维数组

使用 MPI 在 C 中发送二维数组块

于 2018-11-20T12:16:06.190 回答