【发布时间】:2017-07-03 12:20:40
【问题描述】:
我想为每个进程生成一个字符串,然后收集所有内容。但是每个进程中创建的字符串是通过附加int和chars来创建的。
我仍然无法正确收集所有内容。我可以一一打印所有部分字符串,但如果我尝试打印 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 字符串而不是底层数据?