Я пишу гибридный код openMP/MPI. Впервые я продемонстрировал openMP только на 8 потоках. Затем я добавил слой MPI как следующийболее медленное время работы с гибридным 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 является стандартом OpenMP цикл
#pragma omp parallel for schedule(dynamic,chunk) private(i)
for(i=0;i<n;i++){
//loop code here
}
Я составил гибридный код и запустить его на одном процессоре, как этот
mpirun -np 1 -x OMP_NUM_THREADS=8 ./program
только понять, что время работы в 5 раз медленнее, чем openMP (на одном CPU обязательно). Я сравниваю стену с использованием bash time
функция. Любые предложения?
Я использую OpenMP 3.1 с mpicc
EDIT
Я использую OpenMPI v1.10.3
Это невозможно сказать, не видя фактического кода и фактических результатов измерений. – Zulan
Да, действительно. 1 процессор и 8 потоков. – Marouen
Вы явно используете Open MPI. Попробуйте добавить '--bind-to none' в список опций' mpirun'. –