Max*_*axB 5 c c++ linux multithreading openmp
运行程序为
$ OMP_NUM_TRHEADS=4 ./a.out
Run Code Online (Sandbox Code Playgroud)
将激活的OpenMP线程数限制为4,如所示htop。但是,如果不是将OMP_NUM_THREADS环境变量绑定到中Bash,则调用
setenv("OMP_NUM_THREADS", "4", 1);
Run Code Online (Sandbox Code Playgroud)
从main调用任何启用OpenMP的功能开始之前,这似乎没有任何效果。
为什么会这样呢?如果有可能,如何在程序中设置OpenMP线程数?
有两种方法1可以用来从程序中设置线程数:
num_threads在打开并行区域的指令中使用子句:
#pragma omp parallel num_threads(number_of_threads)
Run Code Online (Sandbox Code Playgroud)
在并行区域开始之前使用omp_set_num_threadsAPI 函数:
#include <omp.h>
// ...
omp_set_num_threads(number_of_threads);
#pragma omp parallel
Run Code Online (Sandbox Code Playgroud)
注意:这两个选项都优先于 OMP_NUM_THREADS 环境变量,但num_threads子句优先于omp_set_num_threads.
为什么 setenv 没有任何效果?
这在OpenMP 规范(重点是我的)中有介绍:
第 4 章
环境变量
[...]程序启动后对环境变量的修改,即使由程序本身修改,也会被OpenMP 实现忽略。但是,某些 ICV 的设置可以在 OpenMP 程序执行期间通过使用适当的指令子句或 OpenMP API 例程进行修改。[...]
1)还有第三个运行时选项,它允许改变执行并行区域的线程数,然后将其重置为1(仅限主线程)或 fromnum_threads子句或omp_set_num_threads调用的数量,这是if指令中的子句条款属于。
| 归档时间: |
|
| 查看次数: |
1728 次 |
| 最近记录: |