我想为每个进程生成一个字符串,然后收集所有内容。但是在每个过程中创建的字符串都是通过追加int和chars来创建的。用MPI_Gather收集字符串openmpi c
我仍然无法正确收集所有内容。我可以逐个打印所有部分字符串,但是如果我尝试打印rcv_string,我只会得到一个部分字符串或者可能是分段错误。
我已经尝试在memset的字符串的末尾放置零,动态和静态地为字符串保留内存......但我没有找到方法。
如果有人知道如何初步化弦并为实现目标进行适当聚拢,那将会很棒。
int main(int argc, char *argv[]) {
int rank;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
char *string; // ????????????
char *rcv_string; // ????????????
if (rank == 0) {
sprintf(string+strlen(string), "%dr%dg%db%dl\n",255,255,255,0);
}
else if (rank == 1) {
sprintf(string+strlen(string), "%dr%dg%db%dl\n",255,255,255,0);
}
else if (rank == 2) {
sprintf(string+strlen(string), "%dr%dg%db%dl\n",255,255,255,0);
}
else if (rank == 3) {
sprintf(string+strlen(string), "%dr%dg%db%dl\n",255,255,255,0);
}
else if (rank == 4) {
sprintf(string+strlen(string), "%dr%dg%db%dl\n",255,255,255,0);
}
else if (rank == 5) {
sprintf(string+strlen(string), "%dr%dg%db%dl\n",255,255,255,0);
}
MPI_Gather(string,???,MPI_CHAR,rcv_string,???,MPI_CHAR,0,MPI_COMM_WORLD);
if (rank == 0) {
printf("%s",rcv_string);
}
MPI_Finalize();
return 0;
}
为了避免XY-问题:一般来说,要收集实际数据(例如{255,255,255,0})而不是C字符串要简单得多。您的应用程序中是否有任何基本要求您交流C字符串而非底层数据的内容? – Zulan