0
ここに問題があります。私はいくつかの "小さな"配列を持っていますが、これはMPI_Gatherには大したものではありませんが、root(0)スレッドに大きなものを割り当てたいだけです。MPIでのシングルスタックアレイの割り当て、C++
#include <mpi.h>
#include <iostream>
int main(int argc, char **argv) {
int rank, numprocs;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
MPI_Status status;
int N = 5;
int x[N] = {1,2,3,4,5};
int big_x[numprocs*N];
MPI_Gather(x, N, MPI_INT, big_x, N, MPI_INT, 0, MPI_COMM_WORLD);
if (rank == 0) {
for (int i=0; i<numprocs*N; ++i)
std::cout << big_x[i] << std::endl;
}
MPI_Finalize();
return 0;
}
これは動作コードですが、わかりますように、すべてのスレッドにbig_xが割り当てられています。 1つのスレッドでのみ割り当てたいのですが?私はスコープエラーを取得します。私はちょうど動的メモリを使用する必要がありますか?
こんにちは、petrmikheev、答えてくれてありがとう、それはかなり明確です。そして、配列の次元はコンパイラの前段階で知っているはずですが、私は例を書いただけであり、興味深いのはこのことです。それはなぜそうであることができるのですか? (私はコンパイル前の段階の寸法で未知のことについて話しています) – user2923317
これはC99の機能であり(間違っていなければ)C++ 11です。 'gcc' /' g ++ 'はデフォルトでそれをサポートしていますが、他のコンパイラではサポートしていないかもしれません。 http://stackoverflow.com/questions/26441916/dynamic-array-allocation-on-stack-in-c – petrmikheev
私はそれをチェックしようとしました参照してください。可変長配列は、C++ 11、C++ 14、C++ 17のいずれにも含まれていません。しかし 'g ++'はそれをサポートしています。 別のリンク:http://stackoverflow.com/questions/1887097/variable-length-arrays-in-c#1887178 – petrmikheev