LoginSignup
1
1

More than 5 years have passed since last update.

異世界(Kコンピューター)に行って(sshして)ら標準入力から得た値をMPI_bcastしようとしたら停止した件

Last updated at Posted at 2016-03-05

なろう系異世界俺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に突っ込めるようなので、これを使うべきなのであろう…。

おしまい?

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1