Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
发送字符串数组MPI C_C_Arrays_Mpi - Fatal编程技术网

发送字符串数组MPI C

发送字符串数组MPI C,c,arrays,mpi,C,Arrays,Mpi,我试图在MPI中向从属进程发送一个字符串数组,但我不知道怎么做。我有一个很大的字符串数组,我从一个文件中读取了这个数组,我需要将这个数组的一部分发送给从属文件。我正在分配一个新数组,其中包含主数组中的一些元素,并尝试发送此数组。以下是代码的发送部分: int w = 0; int division = size / (procs -1); for(i=1; i<procs; i++){ //allocating char **array1 = (char**) malloc

我试图在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项目,因为没有人回答这个问题,所以我会尽我所能。我认为在您的实现中,您传递一个指针列表,每个指针指向一个字符列表,因此MPI_send本质上发送一个数组地址列表。因此,数据类型“char”将不匹配,或者它可能只在每个数组中找到第一个char

就我的经验而言,顺序malloc不能保证记忆的连续性

2D数组在内存中不连续,MPI无法以“标准”方式传输它

有关问题的说明,请参见以下内容:


虽然代码没有编译,但2D数组是在连续内存中分配的。
MPI_SEND(&array[0][0] ...)