我正在编写混合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'。 –