インターフェース
#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の解説 目次