我想爲每個進程生成一個字符串,然後收集所有內容。但是在每個過程中創建的字符串都是通過追加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