なろう系異世界俺TSUEEEEEEタイトルにいようかと思ったんですが諦めました。
やとうとした事はタイトルにあるとおりで、Rank 0が標準入力からデータ受け取って、
それを他のRankにMPI放送するだけの簡単なコードなわけですが…
#include <iostream>
#include <mpi.h>
int main(int argc, char **argv){
MPI::Init(argc, argv);
const int rank = MPI::COMM_WORLD.Get_rank();
int test = 0;
if(rank == 0){
std::cout << "Input test..." << std::endl;
std::cin >> test;
}
MPI::COMM_WORLD.Bcast(&test, 1, MPI_INT, 0);
std::cout << "[" << rank << "]: " << test << std::endl;
MPI::Finalize();
return 0;
}
手元のLinuxサーバーで動かした時は問題なかったのに何故かKとかHOKUSAI上でやると、
Rank 0以外がBcastで停止する。
で、std::cinからじゃなくてin-situでデータ突っ込むと真面目に動く。
はてさて何がいけないのか。。。
解決?Mar. 7, 2016
まぁそもそも、MPIでstd::cinをする事があまりいいアイデアではないと。
openmpiとかに付属のmpirunだと、例えば
mpirun -stdin 0 ./a.out
とかでrank 0からstdinしろと明示的に言えるが、
富士通環境だとそうならないらしい。
この場合、
mpirun -stdin filename ./a.out
でfilenameの中身からstd::cinに突っ込めるようなので、これを使うべきなのであろう…。
おしまい?