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]);