发送字符串数组MPI C.

时间:2013-11-02 17:00:57

标签: c arrays mpi

我正在尝试向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] ...)

它可以工作,但我需要为每个进程发送多个字符串。

2 个答案:

答案 0 :(得分:1)

我正在研究一个MPI项目,因为没有人回答这个问题,我会尽力而为。我认为在你的实现中,你传递一个指针列表,每个指针指向一个char列表,​​因此MPI_send实质上发出了一个数组地址列表。因此,data_type“char”将不匹配,或者它可能只找到每个数组中的第一个char。

答案 1 :(得分:-1)

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

您的2D数组在内存中不连续,并且MPI无法以“标准”方式进行传输。

为澄清问题,您可以在这里查看:

Sending and receiving 2D array over MPI

sending blocks of 2D array in C using MPI