OpenMP - 指令和构造之间的区别

Sai*_*irl 5 openmp

这似乎是一个愚蠢的问题,但我正在学习 OpenMP,并且对术语有些困惑。指令和构造是一回事吗?或者指令是一个包罗万象的词,包括构造和孤立指令?

我见过像PARALLEL Directive但也这样的词 PARALLEL Region Construct 在一些教程Work Sharing Constructs中列在OpenMP Directives.

微软页让我觉得,可能是整个下一行是一个指令:

 #pragma omp directive-name  [clause[ [,] clause]...] new-line
Run Code Online (Sandbox Code Playgroud)

由于声明,“每个指令都以#pragma omp 开头”。这意味着单词parallelfor(和其他)是结构。然而,与此同时,在上面的同一行中,他们directive-name紧跟在 pragma 之后。

如果有人可以澄清,那就太好了:D

chr*_*ock 2

如果我没看错的话,指令就是 OpenMP 语句,例如

#pragma omp for
Run Code Online (Sandbox Code Playgroud)

或者

#pragma omp parallel private(th_id) shared(nthreads)
Run Code Online (Sandbox Code Playgroud)

指令可以包含子句,如private上面的语句 或schedule(dynamic, CHUNKSIZE)

指令与代码结合形成一个构造。也就是说,构造是完成某事的模式。因此,“并行构造”是一个parallel指令、其可选子句以及要执行的任何代码:

#pragma omp parallel
  printf("Hello, world.\n");
Run Code Online (Sandbox Code Playgroud)

“工作共享构造”是一个parallel for指令,后跟循环代码:

#pragma omp parallel for
for (i = 0; i < N; i++)
    a[i] = 2 * i;
Run Code Online (Sandbox Code Playgroud)