在运行时在本地启用/禁用OpenMP

bwe*_*ber 5 c c++ multithreading openmp

是否可以在运行时启用或禁用OpenMP并行化?我有一些代码应该在某些情况下并行运行,而不是在不同情况下并行运行.同时,在其他线程中还有其他计算也使用OpenMP,并且应始终并行运行.有没有办法告诉OpenMP不要在当前线程中并行化?我知道omp_set_num_threads,但我认为全局设置OpenMP使用的线程数.

Har*_*ald 11

您可以使用的替代方法是为构造添加if条件#pragma omp.只要条件为假,这些将跳过从pragma派生的OpenMP运行时调用的调用.

考虑以下使用基于变量tf(分别为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;
}
Run Code Online (Sandbox Code Playgroud)

它的输出是:

$ 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
Run Code Online (Sandbox Code Playgroud)