本当は怖いHPC

HPC屋の趣味&実益ブログ

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を選択する必要がある。

【広告】