发送字符串数组MPIÇ(Sending string array MPI C)

2019-09-29 05:55发布

我试图将字符串发送到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] ...)

它的工作原理,但我需要发送每个进程不止一个字符串。

Answer 1:

我工作的一个项目MPI过,因为没有人回答这个问题,我会给我最好的拍摄。 我想在您的实施,通过指针的列表,每个指针指向字符的列表,从而MPI_SEND本质发出阵列的地址的列表。 作为结果,DATA_TYPE“CHAR”将不匹配,或者它可以仅发现每个阵列中的第一个字符。



Answer 2:

连续的malloc不内存保证工作的连续性就我的经验而言。

您的2D阵列不在存储器中连续的,并且MPI不能在“标准”的方式将其传送。

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

发送和接收的2D阵列上方MPI

使用MPI发送2D阵列的块用C



文章来源: Sending string array MPI C
标签: c arrays mpi