インターフェース
#include <omp.h>
int omp_in_parallel();
#pragma omp parallel内であれば1を、そうでなければ0を返します。
nest指定なしにparallel内でparallel指定された時には、
omp_get_num_threads()は1を返しますが、omp_in_parallel()も1を返します。
サンプルプログラム
サンプルソースコードを示します。
#include <iostream>
#include <omp.h>
int main()
{
std::cout << "ichigosample: in_parallel = "
<< omp_in_parallel()
<< ", num. threads = "
<< omp_get_num_threads() << std::endl;
#pragma omp parallel
{
#pragma omp master
{
#pragma omp critical(crit_cout)
{
std::cout << "ichigosample: in_parallel = "
<< omp_in_parallel()
<< ", num. threads = "
<< omp_get_num_threads() << std::endl;
}
}
#pragma omp barrier
#pragma omp parallel
{
#pragma omp master
{
#pragma omp critical(crit_cout)
{
std::cout << "ichigosample: in_parallel = "
<< omp_in_parallel()
<< ", num. threads = "
<< omp_get_num_threads() << std::endl;
}
}
}
#pragma omp barrier
}
return 0;
}
実行結果の1例を示します。
parallel内でparallel指定された部分は外側のparallelによって4つのスレッドで実行されます。
各スレッドにおいて、内部のparallelの中はそれぞれ1つのスレッドで実行されます。
その結果、master指定をしてもstd::coutへの出力は4回行われます。
ichigosample: in_parallel = 0, num. threads = 1
ichigosample: in_parallel = 1, num. threads = 4
ichigosample: in_parallel = 1, num. threads = 1
ichigosample: in_parallel = 1, num. threads = 1
ichigosample: in_parallel = 1, num. threads = 1
ichigosample: in_parallel = 1, num. threads = 1
関連ページ
OpenMPの解説 目次