openmp
Простой параллельный пример
Поиск…
Синтаксис
#pragma omp parallel
указывает, что следующий блок должен выполняться всеми потоками.int omp_get_num_threads (void)
: возвращает число потоков, работающих в параллельной области (aka team of threads).int omp_get_thread_num (void)
: возвращает идентификатор вызывающего потока (от 0 до N-1, где N ограниченоomp_get_num_threads()
).
замечания
Вы можете использовать OMP_NUM_THREADS
среды OMP_NUM_THREADS
или директиву num_threads
в #pragma parallel
чтобы указать количество выполняемых потоков для всего приложения или для указанной области, соответственно.
Параллельный мир привет с использованием OpenMP
В следующем C-коде используется модель параллельного программирования OpenMP для записи идентификатора потока и количества потоков в stdout
с использованием нескольких потоков.
#include <omp.h>
#include <stdio.h>
int main ()
{
#pragma omp parallel
{
// ID of the thread in the current team
int thread_id = omp_get_thread_num();
// Number of threads in the current team
int nthreads = omp_get_num_threads();
printf("I'm thread %d out of %d threads.\n", thread_id, nthreads);
}
return 0;
}
В Fortran 90+ эквивалентная программа выглядит так:
program Hello
use omp_lib, only: omp_get_thread_num, omp_get_num_threads
implicit none
integer :: thread_id
integer :: nthreads
!$omp parallel private( thread_id, nthreads )
! ID of the thread in the current team
thread_id = omp_get_thread_num()
! Number of threads in the current team
nthreads = omp_get_num_threads()
print *, "I'm thread", thread_id, "out of", nthreads, "threads."
!$omp end parallel
end program Hello