omp_set_num_threads

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

インターフェース

#include <omp.h>
void omp_set_num_threads(int num_threads);
parallel指定されていない時に、OpenMPで使うスレッド数を設定します。 並列実行中にこの関数を呼び出してはいけません。 #pragmaにnum_threadsを含める場合は、ここで設定した値よりもnum_threadsの数値が優先されます。
引数内容
num_threads1以上のスレッド数です。

サンプルプログラム

サンプルソースコードを示します。
#include <iostream>
#include <omp.h>

void process_sample()
{
    std::cout << "ichigosample: in_parallel = "
              << omp_in_parallel() << std::endl;
    std::cout << "ichigosample: num. threads = " << omp_get_num_threads()
              << " , thread number = " << omp_get_thread_num()
              << std::endl;
}

int main()
{
    std::cout << "ichigosample: max. threads = "
              << omp_get_max_threads() << std::endl;
    std::cout << "ichigosample: num. threads = "
              << omp_get_num_threads() << std::endl;

    std::cout << "ichigosample: in_parallel = "
              << omp_in_parallel() << std::endl;

    omp_set_num_threads(2);

    #pragma omp parallel
    {
        #pragma omp critical(crit_cout)
        {
            process_sample();
        }
        #pragma omp barrier
    }

    omp_set_num_threads(3);

    #pragma omp parallel num_threads(2)
    {
        #pragma omp critical(crit_cout)
        {
            process_sample();
        }
        #pragma omp barrier
    }

    #pragma omp parallel
    {
        #pragma omp critical(crit_cout)
        {
            process_sample();
        }
        #pragma omp barrier
    }

    return 0;
}
実行結果の1例を示します。
ichigosample: max. threads = 4
ichigosample: num. threads = 1
ichigosample: in_parallel = 0
ichigosample: in_parallel = 1
ichigosample: num. threads = 2 , thread number = 0
ichigosample: in_parallel = 1
ichigosample: num. threads = 2 , thread number = 1
ichigosample: in_parallel = 1
ichigosample: num. threads = 2 , thread number = 0
ichigosample: in_parallel = 1
ichigosample: num. threads = 2 , thread number = 1
ichigosample: in_parallel = 1
ichigosample: num. threads = 3 , thread number = 0
ichigosample: in_parallel = 1
ichigosample: num. threads = 3 , thread number = 1
ichigosample: in_parallel = 1
ichigosample: num. threads = 3 , thread number = 2

関連ページ

  • OpenMPの解説 目次