Sun Studio 12 Update 1:OpenMP API 用户指南

B.2 转换传统 C Pragma

C 编译器接受传统 pragma 来进行显式并行化。《C 用户指南》中有对这些内容的描述。与 Fortran 指令相同,这些只是建议值。

传统并行化 pragma 为:

表 B–5 将传统 C 并行化 Pragma 转换为 OpenMP

传统 C Pragma  

等效的 OpenMP Pragma  

#pragma MP taskloop [clauses]

#pragma omp parallel for [clauses]

#pragma MP serial_loop

无完全等效指令。可以使用 

#pragma omp master

loop

#pragma MP serial_loop_nested

无完全等效指令。可以使用 

#pragma omp master

loopnest

taskloop pragma 可带有下列可选子句中的一个或多个子句。

表 B–6 taskloop 可选子句和等效的 OpenMP 子句

taskloop 子句

等效的 OpenMP parallel for 子句

maxcpus(n)

无完全等效指令。使用 num_threads(n)

private(v1,v2,...)

private(v1,v2,...)

shared(v1,v2,...)

shared(v1,v2,...)

readonly(v1,v2,...)

无完全等效指令。使用 firstprivate(v1,v2,...) 可以获得相同效果。

storeback(v1,v2,...)

使用 lastprivate(v1,v2,...) 可以获得相同效果。

savelast

无完全等效指令。使用 lastprivate(v1,v2,...) 可以获得相同效果。

reduction(v1,v2,...)

reduction(operator:v1,v2,...)。必须提供约简操作符和变量列表。

schedtype(spec)

schedule(spec)(请参见表 B–7

schedtype(spec) 子句接受下列调度规范。

表 B–7 SCHEDTYPE 调度和等效的 OpenMP schedule 子句

schedtype(spec)  

等效的 OpenMP schedule(spec) 子句

SCHEDTYPE(STATIC)

schedule(static)

SCHEDTYPE(SELF(chunksize))

schedule(dynamic,chunksize)

注意: 缺省 chunksize 为 1。

SCHEDTYPE(FACTORING(m))

无完全等效指令。 

SCHEDTYPE(GSS(m))

schedule(guided, m)

缺省 m 为 1。

B.2.1 传统 C Pragma 与 OpenMP 间的问题