这似乎是一个愚蠢的问题,但我正在学习 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 开头”。这意味着单词parallel和for(和其他)是结构。然而,与此同时,在上面的同一行中,他们directive-name紧跟在 pragma 之后。
如果有人可以澄清,那就太好了:D
如果我没看错的话,指令就是 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)