各プロセスで文字列を生成し、すべてを収集したい。しかし、各プロセスで作成された文字列は、intとcharを付加することによって作成されます。MPI_Gatherで文字列を収集するopenmpi c
私はまだすべてを正しく収集することができません。すべての部分文字列を1つずつ印刷することができますが、rcv_stringを印刷しようとすると、部分文字列が1つだけ、またはセグメント化エラーが発生することがあります。
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の問題を回避するためには、C文字列ではなく実際のデータ({255,255,255,0}など)を中心に集めるのが一般的です。基本的なデータではなく、C文字列の通信を基本的に必要とするアプリケーションには何かがありますか? – Zulan