サーチ…


構文

  • #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