インターフェース
#include <omp.h>
void omp_set_num_threads(int num_threads);
parallel指定されていない時に、OpenMPで使うスレッド数を設定します。
並列実行中にこの関数を呼び出してはいけません。
#pragmaにnum_threadsを含める場合は、ここで設定した値よりもnum_threadsの数値が優先されます。
引数 | 内容 |
num_threads | 1以上のスレッド数です。 |
サンプルプログラム
サンプルソースコードを示します。
#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の解説 目次