フラグ -Dparallel (並列部分を有効にするためにコードで使用) で問題が発生しました。私がそれを使用すると、もう1つのOpenMPスレッドを取得することはありません。
注意: MPI/OpenMP ハイブリッド コードを実行しています。
短いコード例:
#include <stdio.h>
#include "mpi.h"
#ifdef _OPENMP
#include <omp.h>
#else
#define omp_get_num_threads() 0
#define omp_get_thread_num() 0
#endif
int main(int argc, char **argv)
{
int nthreads, thread_id;
int rank, size, provided;
MPI_Init_thread(&argc, &argv, MPI_THREAD_FUNNELED, &provided); /* starts MPI */
MPI_Comm_rank (MPI_COMM_WORLD, &rank); /* get current process id */
MPI_Comm_size (MPI_COMM_WORLD, &size); /* get number of processes */
#pragma omp parallel private(nthreads, thread_id)
{
nthreads = omp_get_num_threads();
thread_id = omp_get_thread_num();
if (thread_id == 0)
printf("This is rank %d with %d threads.\n", rank,nthreads);
}
MPI_Finalize();
return 0;
}
私mpicc -o example -fopenmp example.c
が出力ショーでそれをコンパイルした場合:
$ mpirun -np 2 ./example
This is rank 1 with 6 threads.
This is rank 0 with 6 threads.
予想通り。
フラグを使用する場合-Dparallel
(行全体: mpicc -Dparallel -o example_parallel -fopenmp example.c
)
出力には次のように表示されます。
$ mpirun -np 2 ./example_parallel
This is rank 0 with 1 threads.
This is rank 1 with 1 threads.
-Dparallel
が OpenMP Threadfs を 1 に制限するのはなぜですか? これに関するドキュメントはどこにありますか?
完全を期すために:
- mpirun (オープン MPI) 1.4.1
- gcc (Ubuntu 4.4.3-4ubuntu5.1) 4.4.3
編集(おそらく解決策):私はそれをコンパイルするためにテストするだけです:
mpicc -Dparallel=parallel -o example_parallel -fopenmp example.c
期待どおりに動作します。だから、 -Dparallel は#pragma omp parallel
. 私は正しいですか?