JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris Studio 12.2:OpenMP API 用户指南
search filter icon
search icon

文档信息

前言

1.  OpenMP API 简介

2.  编译并运行 OpenMP 程序

3.  实现定义的行为

4.  嵌套并行操作

5.  任务处理

6.  自动确定变量的作用域

7.  作用域检查

8.  性能注意事项

A.  子句在指令中的放置

B.  转换为 OpenMP

B.1 转换传统 Fortran 指令

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

B.1.1.1 Sun 风格的 Fortran 指令和 OpenMP 指令间的问题

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

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

B.2 转换传统 C Pragma

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

索引

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 等效的指令。