openmp
単純な並列例
サーチ…
構文
#pragma omp parallel
は、次のブロックがすべてのスレッドによって実行されることを示します。int omp_get_num_threads (void)
:並列領域で動作しているスレッドの数を返します。int omp_get_thread_num (void)
:呼び出しスレッドの識別子を返します(0からN-1の範囲で、Nはomp_get_num_threads()
バインドされomp_get_num_threads()
)。
備考
#pragma parallel
内のOMP_NUM_THREADS
環境変数またはnum_threads
ディレクティブを使用して、アプリケーション全体または指定された領域の実行スレッド数をそれぞれ指定することができます。
OpenMPを使用した並列hello world
次のCコードでは、OpenMP並列プログラミングモデルを使用して、複数のスレッドを使用してスレッドIDとスレッド数を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
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow