Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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
C 字符串的MPI广播数组_C_Arrays_String_Mpi_Openmpi - Fatal编程技术网

C 字符串的MPI广播数组

C 字符串的MPI广播数组,c,arrays,string,mpi,openmpi,C,Arrays,String,Mpi,Openmpi,是否可以广播定义为的字符串数组 char **lines; lines = malloc(512 * sizeof(char*)); 我试过了 MPI_Bcast(lines, linesCount, MPI_BYTE, 0, MPI_COMM_WORLD); 及 其中lineScont是数组中的字符串数 如何实现?假设存储在行中的字符串大小可能不同,可以先广播每个字符串大小的int数组,然后分别广播每个字符串 /* Create an Array with length of each l

是否可以广播定义为的字符串数组

char **lines;
lines = malloc(512 * sizeof(char*));
我试过了

MPI_Bcast(lines, linesCount, MPI_BYTE, 0, MPI_COMM_WORLD);

其中lineScont是数组中的字符串数


如何实现?

假设存储在
行中的字符串大小可能不同,可以先广播每个字符串大小的int数组,然后分别广播每个字符串

/* Create an Array with length of each line 
   Broadcast it from process 0 */ 
int lin_siz[linesCount];
if (p_rank == 0)
    for (i=0; i < linesCount; i++)
        lin_siz[i] = strlen(lines[i])+1;
MPI_Bcast(&lin_siz, linesCount, MPI_INT, 0, MPI_COMM_WORLD);

/* Broadcast each line */
for (i=0; i < linesCount; i++)
    MPI_Bcast(&lines[i], lin_siz[i], MPI_CHAR, 0, MPI_COMM_WORLD);
p\u-rank
是通过
MPI\u-Comm\u-rank(MPI\u-Comm\u-WORLD,&p\u-rank)
获得的标准处理器等级。并最终成功打印为

/* Print */
printf("Process rank %d:\n", p_rank);
for (i=0; i < linesCount; i++)
     printf("%s\n", lines[i]);
/*打印*/
printf(“进程级别%d:\n”,p\u级别);
对于(i=0;i

如果您在实现我的答案时遇到问题,我可以发布整个测试用例。

字符串可能有点特殊,但它们只是一个指针数组。退房还有这个
char **lines;
lines = malloc(linesCount * sizeof(char*));

if (p_rank == 0){
    for (i=0; i<linesCount-2; i++)
        lines[i] = "This is a test.";
    lines[i++] = "More testing.";
    lines[i++] = "Even more..";
}
/* Print */
printf("Process rank %d:\n", p_rank);
for (i=0; i < linesCount; i++)
     printf("%s\n", lines[i]);