MPI-3 リモート メモリ アクセス機能を備えたハイブリッド MPI/OpenMP コードを作成しています。MPI_THREAD_SERIALIZED が利用可能であると想定しています。
これはできますか?
MPI_Win_lock_all(0, win);
#pragma omp parallel
{
...
#pragma omp critical(getRemoteData)
{
MPI_Get(buf, len, MPI_UINT64_T, t_rank, localOffset, len, MPI_UINT64_T, win);
MPI_Win_flush(t_rank, win);
}
...
}
MPI_Win_unlock_all(win);
ここで、メイン スレッドは、MPI プロセス全体に対して lock と unlock を 1 回呼び出します。OMP スレッドは、必要に応じて MPI_Get を呼び出します。MPI_Get ごとに lock と unlock を呼び出すこともできますが、時間がかかると思います。
動作しているようです。しかし、これが正しい使い方かどうかはわかりません。