是否可以在运行时启用或禁用 OpenMP 并行化?我有一些代码应该在某些情况下并行运行,而不是在不同情况下并行运行。同时,其他线程中的其他计算也使用 OpenMP,应该始终并行运行。有没有办法告诉 OpenMP 不要在当前线程中并行化?我知道 omp_set_num_threads
,但我假设全局设置 OpenMP 使用的线程数。
最佳答案
您可以使用的替代方法是将 if
条件添加到 #pragma omp
结构中。只要条件为假,这些将跳过对从编译指示派生的 OpenMP 运行时调用的调用。
考虑以下使用基于变量 t
和 f
(分别为 true 和 false)的条件的程序:
#include <omp.h>
#include <stdio.h>
int main (void)
{
int t = (0 == 0); // true value
int f = (1 == 0); // false value
#pragma omp parallel if (f)
{ printf ("FALSE: I am thread %d\n", omp_get_thread_num()); }
#pragma omp parallel if (t)
{ printf ("TRUE : I am thread %d\n", omp_get_thread_num()); }
return 0;
}
它的输出是:
$ OMP_NUM_THREADS=4 ./test
FALSE: I am thread 0
TRUE : I am thread 0
TRUE : I am thread 1
TRUE : I am thread 3
TRUE : I am thread 2
关于c++ - 在运行时本地启用/禁用 OpenMP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39116329/