mvapich2でMPI_THREAD_MULTIPLEを使いたいとき
mvapich2をマルチスレッドアプリケーション内で使いたいときは、環境変数 MV_ENABLE_AFFINITY=0 を設定する必要がある。
その上で、通常通り MPI_Init_thread() を呼び出す。
#include <assert.h> #include <mpi.h> int main(int argc, char **argv) { int required = MPI_THREAD_MULTIPLE; int provided = 0; MPI_Init_thread(&argc, &argv, required, &provided); assert(provided >= required); MPI_Finalize(); return 0; }
なお、Open MPIは、1.8の現在でもMPI_THREAD_MULTIPLEはちゃんとサポートしていない。MPI_Init_thread()を呼ぶと、ちゃんとMPI_THREAD_MULTIPLEが返ってくるが、実際に走らせると高確率でクラッシュする。
マルチスレッドを使いたいならmpichもしくはmvapichを選択する必要がある。