Sun Studio 12 Update 1:Fortran 用户指南

附录 D Fortran 指令摘要

本附录汇总了 f95 Fortran 编译器可识别的指令:

D.1 通用 Fortran 指令

2.3 指令部分对 f95 接受的通用指令进行了说明。

表 D–1 通用 Fortran 指令摘要

格式

C$PRAGMA keyword ( a [ , a ] … ) [ , keyword ( a [ , a ] … ) ] ,…

C$PRAGMA SUN keyword ( a [ , a ] … ) [ , keyword ( a [ , a ] … ) ] ,…

C$PRAGMA SPARC keyword ( a [ , a ] … ) [ , keyword ( a [ , a ] … ) ] ,…

第一列中的注释指示符可以是 cC!*。(在这些示例中使用的是 Cf95 自由格式必须使用 !。)

C 指令

C$PRAGMA C(list)

将一系列外部函数的名称声明为 C 语言例程。 

IGNORE_TKR 指令

C$PRAGMA IGNORE_TKR {name {, name} ...}

在解析特定调用时,编译器会忽略在通用过程接口中出现的指定哑元参数名称的类型、种类和等级。 

UNROLL 指令

C$PRAGMA SUN UNROLL=n

建议编译器将下面的循环解开为指定的长度 n

WEAK 指令

C$PRAGMA WEAK(name[=name2])

name 声明为弱符号,或者声明为 name2 的别名。

OPT 指令

C$PRAGMA SUN OPT=n

将子程序的优化级别设置为 n

PIPELOOP 指令

C$PRAGMA SUN PIPELOOP[= n]

断言循环中在间隔为 n 的迭代之间存在依赖性。

PREFETCH 指令

C$PRAGMA SUN_PREFETCH_READ_ONCE (name)

C$PRAGMA SUN_PREFETCH_READ_MANY (name)

C$PRAGMA SUN_PREFETCH_WRITE_ONCE (name)

C$PRAGMA SUN_PREFETCH_WRITE_MANY (name)

请求编译器为名称引用生成预取指令。(需要使用 -xprefetch 选项,缺省情况下启用该选项。编译时使用 —xprefetch=no 可以禁用预取指令。目标体系结构也必须支持预取指令,而且编译器优化级别必须设置为大于 —xO2。)

ASSUME 指令

C$PRAGMA [BEGIN} ASSUME (expression [,probability])

C$PRAGMA END ASSUME

断言编译器可假定程序中某些点处的条件为真。 

D.2 特殊的 Fortran 指令

下列指令仅用于 f95。有关详细信息,请参见4.8.2 FIXEDFREE 指令

表 D–2 特殊的 Fortran 指令

格式

!DIR$ directive: 初始行

!DIR$& ...:续行

对于固定格式源代码,也可以接受 C 作为指令指示符:

CDIR$ directive...

该行必须在第 1 列开始。对于自由格式的源文件,该行之前可以有空格。 

FIXED/FREE 指令

!DIR$ FREE!DIR$ FIXED

这些指令指定指令后面的行的源代码格式。它们适用于所在源代码文件的其余部分,或者在遇到下一个 FREEFIXED 指令之前的部分。

D.3 Fortran OpenMP 指令

Sun Studio Fortran 编译器支持 OpenMP 3.0 Fortran API。-openmp 编译器标志允许使用这些指令。(请参见3.4.149 –xopenmp[={ parallel|noopt|none}])。

有关完整的详细信息,请参见《OpenMP API 用户指南》。

D.4 Sun 并行化指令


注 –

传统的 Sun 和 Cray 并行化指令现已过时,将被忽略。在 Solaris SPARC 和 x86 平台上,最好使用 OpenMP API 进行并行化。有关将传统应用程序迁移到 OpenMP 的信息,请参见《OpenMP API 用户指南》。


OpenMP 并行化对于 Fortran 是首选并行化模型。此处针对传统应用程序对 Sun 样式并行化指令进行了说明。

表 D–3 Sun 风格并行化指令摘要

格式

C$PAR directive [optional_qualifiers]:初始行C$PAR& [more_qualifiers]:续行

固定格式,指令指示符可以是 C(如此处所示)、c*!。使用逗号分隔多个限定符。除非指定了 -e 编译器选项,否则将忽略第 72 列后面的字符。

TASKCOMMON 指令

C$PAR TASKCOMMON block_name

将通用块 block_name 中的变量声明为线程专用: 线程专用,但线程内为全局。在声明通用块 TASKCOMMON 时,要求此指令出现在该块的每个公共声明的后面。

DOALL 指令

C$PAR DOALL [qualifiers]

并行化处理后面的 DO 循环。限定符为: 

PRIVATE(list) 将列表上的名称声明为 PRIVATE

SHARED(list) 将列表上的名称声明为 SHARED

MAXCPUS(n) 使用不多于 n 个线程

READONLY(list) 在循环中没有修改列出的变量

SAVELAST 保存所有专用变量的最后一个值

STOREBACK(list) 保存列出变量的最后一个值

REDUCTION(list) 列出变量是约简变量

SCHEDTYPE(type) 使用调度类型: (缺省设置为 STATIC

STATIC

SELF(nchunk)

FACTORING[(m)]

GSS[(m)]

DOSERIAL 指令

C$PAR DOSERIAL

禁用对后面的循环进行并行化处理。 

DOSERIAL* 指令

C$PAR DOSERIAL*

禁用对后面的循环嵌套进行并行化处理。 

D.5 Cray 并行化指令


注 –

传统的 Sun 和 Cray 并行化指令现已过时,将被忽略。在 Solaris SPARC 和 x86 平台上,最好使用 OpenMP API 进行并行化。有关将传统应用程序迁移到 OpenMP 的信息,请参见《OpenMP API 用户指南》。


Fortran 编程指南》的“并行化”一章中详细介绍了 Cray 风格的并行化指令。要求使用 -mp=cray 编译器选项。

表 D–4 Cray 并行化指令摘要

格式

CMIC$ directive qualifiers: 初始行

CMIC$& [more_qualifiers]: 续行

固定格式。指令指示符可以是 C(如此处所示)、c*!。对于 f95 自由格式,可以在 !MIC$ 前面出现前导空格。

DOALL 指令

CMIC$ DOALL SHARED(list), PRIVATE(list) [, more_qualifiers ]

并行化处理后面的循环。限定符为: 

要求使用作用域限定符(除非 list 为空)-循环中的所有变量必须出现在 PRIVATESHARED 子句中:

PRIVATE(list) 将列表上的名称声明为 PRIVATE

SHARED(list) 将列表上的名称声明为 SHARED

AUTOSCOPE 自动确定变量的范围

以下限定符是可选的: 

MAXCPUS(n) 使用不多于 n 个线程

SAVELAST 保存所有专用变量的最后一个值只能出现一个调度限定符:

GUIDED 等效于 Sun 风格的GSS(64)

SINGLE 等效于 Sun 风格的 SELF(1)

CHUNKSIZE(n) 等效于 Sun 风格的 SELF(n)

NUMCHUNKS(m) 等效于 Sun 风格的 SELF(n/m)

缺省调度为 Sun 风格的 STATIC,它没有等价的 Cray 风格限定符。对于这些 Sun 和 Cray 风格的调度限定符,它们的解释是不同的。有关详细信息,请参见《Fortran 编程指南》。

TASKCOMMON 指令

CMIC$ TASKCOMMON block_name

将命名通用块中的变量声明为线程专用-线程专用,但线程内为全局。在声明通用块 TASKCOMMON 时,要求此指令紧跟在该块的每个公共声明的后面。

DOSERIAL 指令

CMIC$ DOSERIAL

禁用对后面的循环进行并行化处理。 

DOSERIAL* 指令

CMIC$ DOSERIAL*

禁用对后面的循环嵌套进行并行化处理。