bwe*_*ber 5 c c++ multithreading openmp
是否可以在运行时启用或禁用OpenMP并行化?我有一些代码应该在某些情况下并行运行,而不是在不同情况下并行运行.同时,在其他线程中还有其他计算也使用OpenMP,并且应始终并行运行.有没有办法告诉OpenMP不要在当前线程中并行化?我知道omp_set_num_threads,但我认为全局设置OpenMP使用的线程数.
Har*_*ald 11
您可以使用的替代方法是为构造添加if条件#pragma omp.只要条件为假,这些将跳过从pragma派生的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;
}
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)