omp_in_parallel

いちごパック > OpenMPの解説 > omp_in_parallel

インターフェース

#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の解説 目次