Sun Studio 12:OpenMP API 用户指南

B.1 转换传统 Fortran 指令

传统 Fortran 程序使用 Sun 或 Cray 风格的并行化指令。《Fortran 编程指南》的“并行化”一章中有对这些指令的描述。

B.1.1 转换 Sun 风格的 Fortran 指令

下列各表提供了与 Sun 并行化指令及其子子句几乎等效的 OpenMP 指令和子子句。这些只是建议值。

表 B–1 将 Sun 并行化指令转换为 OpenMP

Sun 指令 

等效 OpenMP 指令 

C$PAR DOALL [qualifiers]

!$omp parallel do [qualifiers]

C$PAR DOSERIAL

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

!$omp master

loop

!$omp end master

C$PAR DOSERIAL*

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

!$omp master

loopnest

!$omp end master

C$PAR TASKCOMMON block[,...]

!$omp threadprivate (/block/[,...])

DOALL 指令可带有下列可选的限定符子句。

表 B–2 DOALL 限定符子句和等效的 OpenMP 子句

Sun DOALL 子句 

等效的 OpenMP PARALLEL DO 子句 

PRIVATE(v1,v2,...)

private(v1,v2,...)

SHARED(v1,v2,...)

shared(v1,v2,...)

MAXCPUS(n)

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

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–3

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

表 B–3 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.1.1.1 Sun 风格的 Fortran 指令和 OpenMP 指令间的问题

B.1.2 转换 Cray 风格的 Fortran 指令

Cray 风格的 Fortran 并行化指令与 Sun 风格的并行化指令几乎完全相同,只不过标识这些指定的标记是 !MIC$。此外,!MIC$ DOALL 上的限定符子句集也不同。

表 B–4 Cray 风格的 DOALL 限定符子句的等效 OpenMP 子句

Cray DOALL 子句 

等效的 OpenMP PARALLEL DO 子句 

SHARED(v1,v2,...)

SHARED(v1,v2,...)

PRIVATE(v1,v2,...)

PRIVATE(v1,v2,...)

AUTOSCOPE

无等效子句。必须显式确定作用域,或者使用 DEFAULT 子句或 __AUTO 子句。

SAVELAST

无完全等效指令。使用 lastprivate 可以获得相同效果。

MAXCPUS(n)

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

GUIDED

schedule(guided, m)

缺省 m 为 1。

SINGLE

schedule(dynamic,1)

CHUNKSIZE(n)

schedule(dynamic,n)

NUMCHUNKS(m)

schedule(dynamic,n/m) 其中 n 为迭代次数

B.1.2.1 Cray 风格的 Fortran 指令和 OpenMP 指令间的问题

差别基本上与和 Sun 风格指令的差别相同,只不过没有与 Cray AUTOSCOPE 等效的指令。