我正在編寫混合openMP/MPI代碼段。 我首先在8個線程上對openMP單獨進行了標記。 然後,我加入像下面混合OpenMP/MPI與OpenMP單獨運行時間較慢
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Get_processor_name(processor_name, &namelen);
//the following function has OPENMP for loop embedded
parallelfunction(args);//should I add condition on rank?
MPI_finalize();
OpenMP的功能的MPI層是用於循環標準的openmp
#pragma omp parallel for schedule(dynamic,chunk) private(i)
for(i=0;i<n;i++){
//loop code here
}
我編譯混合代碼和一個CPU上運行它像這樣
mpirun -np 1 -x OMP_NUM_THREADS=8 ./program
只能意識到運行時間比單獨使用openMP慢5倍(在一個CPU上)。 我使用bash time
函數對牆壁時間進行基準測試。 有什麼建議嗎?
我使用OpenMP 3.1 mpicc
編輯
我用了openmpi v1.10.3
如果沒有看到實際的代碼和實際的測量結果是完全不可能的。 – Zulan
是的。 1個CPU和8個線程。 – Marouen
您明確使用Open MPI。嘗試在'mpirun'選項列表中添加'--bind-to none'。 –