如何设置才能给生成的函数增加static 函数前缀

Fortran 编译器选项 (Sun Studio 12:Fortran 用户指南)
&& 第 3 章
Fortran 编译器选项Sun Studio 12:Fortran 用户指南第 3 章
Fortran 编译器选项
本章详细说明 f95 编译器的命令行选项。
从开始是对用于编译器选项标志的语法的描述。
从开始是按功能排列的选项的摘要。
从开始是详细说明每个编译器选项标志的完整参考。
3.1 命令语法
编译器命令行的通用语法如下:
f95 [options] list_of_files
additional_options
方括号内的项指示可选参数。方括号不是命令的一部分。options 是前面带有短划线 (&) 的选项关键字列表。一些关键字选项将列表中的下一项作为参数。list_of_files 是由空格分隔的源文件名、目标文件名或库文件名的列表。此外,有一些选项(例如,-B、-l 和 -L)必须出现在源文件列表之后,而且这些选项可以包括其他文件列表。
3.2 选项语法
典型的编译器选项格式如下:
&flagvalue
&flag=value
&xunroll=4
&flag value
&o outfile
在说明各个选项时使用以下印刷约定:
选项的印刷表示法
示例:文本/实例&
方括号包含的参数是可选的。&
花括号(大括号)包含必需选项的一组选择。&
"|" 或 "-" 符号用于分隔多个参数,只能选择其中一个参数。
-B{dynamic|static}
冒号与逗号类似,有时用于分隔多个参数。&
-Rdir[:dir]
-R/local/libs:/U/a
省略号表示一系列省略。&
-xinline=f1[,&fn]
-xinline=alpha,dos
括号、管道符和省略号是在选项描述中使用的元字符,它们不是选项本身的一部分。
选项的一些常规准则如下:
&lx 是用于与库 libx.a 链接的选项。将 -lx 放在文件名列表之后以确保搜索顺序库,始终是较为安全之举。
通常,按从左向右的顺序处理编译器选项,允许选择性地覆盖宏选项(包括其他选项的选项)。此规则不适用于链接程序选项。但是,当某些选项(例如 -I、-L 和 -R)在同一命令行上重复出现时,这些选项将累加值,而不是覆盖前面的值。
在可选选项列表(例如 -xhasc[={yes|no}])中,所列的第一个选项是出现在命令行上的选项标志不带值时所假定的值。例如,-xhasc 与 -xhasc=yes 等效。
源文件、目标文件和库按它们在命令行上出现的顺序进行编译和链接。
3.3 选项摘要
在本节中,为了便于参考,将按功能对编译器选项进行分组。有关详细信息,请参见以下几节中相应页面上的内容。
请注意,并非所有选项在 SPARC 和 x64/x86 平台上都可用。有关可用性的说明,请查看详细的参考部分。
下表按功能汇总了 f95 编译器选项。该表不包括已过时的和传统的选项标志。某些标志用于多个目的,因此出现多次。
按功能分组的编译器选项
编译模式:
仅编译;不生成可执行文件&
显示由驱动程序生成的命令,但不进行编译&
支持 Fortran 77 扩展和兼容性&
指定要将已编译的 .mod 模块文件写入的路径
-moddir=path
指定要编写的目标文件、库文件或可执行文件的名称&
-o filename
进行编译并只生成汇编代码&
将符号表与可执行文件分离&
禁止编译器消息(错误消息除外)&
定义临时文件所在目录的路径&
-temp=path
显示每个编译阶段占用的时间&
显示编译器的版本号及其阶段&
指定非标准别名情况&
-xalias=list
使用多个处理器进行编译&
已编译的代码:
对于外部名称,增加/删除尾随下划线&
-ext_names=x
内联指定的用户函数&
-inline=list
与编译位置无关的代码&
-KPIC/-kpic
内联某些数学库例程&
STOP 将整数状态值返回给 shell&
-stop_status[=yn]
指定代码地址空间&
启用预取指令。&
-xprefetch[=x]
指定可选寄存器的使用&
指定缺省数据映射&
-xtypemap=x
数据对齐:
指定对齐 COMMON 块中的数据&
-aligncommon[=n]
强制对齐 COMMON 块数据以允许双字获取/存储&
强制所有数据按 8 字节边界对齐&
-dbl_align_all
按 8 字节边界对齐 COMMON 块数据&
指定内存对齐和行为&
-xmemalign[=ab]
启用运行时下标范围检查&
为使用 dbx 调试而进行编译
为使用源浏览器浏览而进行编译&
-sb、-sbfast
标志未声明变量的使用&
检查 C$PRAGMA ASSUME 断言
-xassume_control=check
检查在运行时栈是否溢出&
-xcheck=stkovf
启用运行时任务普通检查&
-xcommonchk
为性能分析器进行编译&
生成交叉引用列表&
在没有目标文件的情况下启用调试&
标志非标准扩展名的使用&
禁止特定错误消息&
与错误消息一起显示错误标记名称&
显示编译器选项的摘要&
-flags、-help
显示编译器的版本号及其阶段&
冗余的并行化消息&
显示/禁止警告消息&
显示编译器自述文件&
-xhelp=readme
显示许可证服务器信息&
链接和库:
允许/要求动态/静态库&
只允许动态/静态库链接&
生成动态(共享对象)库&
为动态库指定名称&
将目录增加到库搜索路径&
与库 libname.a 或 libname.so 链接
将运行时库搜索路径生成到可执行文件中&
禁用递增链接程序 ild
与优化的数学库链接&
与 Sun 性能库链接&
-xlic_lib=sunperf
链接编辑器选项&
在不重定位的情况下生成纯库&
数字和浮点:
使用非标准浮点首选项&
选择 SPARC 非标准浮点&
启用输入过程中的运行时浮点溢出&
选择 IEEE 浮点舍入模式&
-fpround=r
选择浮点优化级别&
-fsimple=n
选择浮点捕获模式&
指定用于格式化输入/输出的舍入方法&
-iorounding=mode
将单精度常数提升为双精度常量&
启用区间运算并设置相应的浮点环境(包括 -xinterval)
启用区间运算扩展&
-xinterval[=e]
优化与性能:
分析循环以了解数据依赖性&
使用所选的选项进行优化&
指定优化级别&
填充数据布局以便高效使用高速缓存&
在内存栈上分配局部变量&
启用循环解开&
-unroll[=m]
启用跨源文件的优化&
-xcrossfile[=n]
调用过程间优化传递&
为 #pragma OPT 设置最高优化级别
-xmaxopt[=n]
针对编译后优化进行编译&
-xbinopt=prepare
启用/调整编译器生成的预取指令&
-xprefetch=list
控制预取指令的自动生成&
-xprefetch_level=n
启用性能文件配置数据的生成或使用&
-xprofile=p
断言不会出现基于内存的陷阱&
-xsafe=mem
不执行增加代码大小的优化&
自动生成对向量库函数的调用&
-xvector[=yn]
启用 DO 循环的自动并行化&
显示循环的并行化信息&
为手动编码的多线程编程进行编译&
接受 OpenMP API 指令并设置相应的环境&
-xopenmp[=keyword]
识别具有自动并行化的循环中的约简操作&
-reduction
冗余的并行化消息&
定义预处理程序符号&
-Dname[=val]
未定义预处理程序符号&
接受扩展(132 个字符)源行&
将预处理程序应用于 .F 和/或 .F90 及 .F95 文件,但不进行编译
接受 Fortran 95 固定格式输入&
使用 fpp 预处理程序对所有源文件进行预处理
接受 Fortran 95 自由格式输入&
将目录添加到 include 文件搜索路径&
将目录添加到模块搜索路径&
区分大小写&
在实际参数中将霍尔瑞斯常数视为字符&
-xhasc={yes|no}
选择要使用的预处理程序(cpp 或 fpp)
-xpp[={fpp|cpp}]
允许递归子程序调用&
-xrecursive
目标平台:
指定内存模型(32 位或 64 位)。&
-m32 | &m64
为优化器指定目标平台指令集&
为优化器指定目标高速缓存属性&
为优化器指定目标处理器&
为优化器指定目标平台&
-xtarget=a
3.3.1 常用选项
编译器有许多可通过可选命令行参数选择的功能。下面的简要列表列出了一些常用选项,让您一睹为快。
调试-为确保参数、通用块等的一致性而在例程之间进行的全局程序检查。&
调试-生成其他用于启用 dbx 和调试的符号表信息。
性能-调用优化器以生成运行速度更快的程序。&
性能-使用一组预先确定的选项,为本机平台生成高效的编译时和运行时。&
动态 (&Bdynamic) 或静态 (&Bstatic) 库绑定。
仅编译-禁止链接;为每个源文件生成一个 .o 文件。
输出文件-将可执行输出文件命名为 nm 而不是 a.out。
源代码-编译固定格式的 Fortran 源代码。&
3.3.2 宏标志
某些选项标志是可扩展为由其他标志组成的特定集合的宏。之所以提供这些选项标志,是为了便于指定通常一起用来选择某项功能的多个选项。
宏选项标志
-xmemalign=8s -aligncommon=16
-aligncommon=16
有关完整的当前扩展,请参见 &fast 说明。
-fns -ftrap=common
-xia=widestneed
-xinterval=widestneed -ftrap=%none -fns=no -fsimple=0
-xia=strict
-xinterval=strict -ftrap=%none -fns=no -fsimple=0
-xarch=a -xcache=b -xchip=c
命令行上跟在宏标志后面的设置将覆盖或增加宏扩展。
3.3.3 向后兼容性和传统选项
提供以下选项的目的是为了与早期发行版的编译器和某些 Fortran 传统功能向后兼容。
向后兼容性选项
允许为常量参数赋值。&
在调用参数列表中将霍尔瑞斯常数视为字符或无类型。&
-xhasc[={yes|no}]
支持 Fortran 77 扩展和约定&
非标准运算-允许非标准运算。&
为主机系统优化性能。&
DO 循环-使用单行程 DO 循环。
允许存在传统的别名情况&
-xalias=keywords
建议在生成可移植的 Fortran 95 程序时不要使用这些选项标志。
3.3.4 已过时的选项标志
下面的选项被认为是已过时的,不应使用它们。在编译器的以后发行版本中可能会删除这些选项。
过时的 f95 选项
-xprofile=tcov
-xtarget=ss2
-xtarget=ss1000
-explicitpar
使用 OpenMP 并行化;Sun/Cray 并行化已过时&
使用 OpenMP 并行化;Sun/Cray 并行化已过时&
-xtarget=native&
许可证排队。不再需要。&
文件配置。使用 -pg 或性能分析器
-xcode=pic13
-xcode=pic32
不再需要。&
不再需要。&
不再需要。&
3.4 选项参考
本节说明了所有的 f95 编译器命令行选项标志,包括各种风险、限制、警告、交互作用、示例和其他详细信息。
除非另行指明,否则每个选项在 SPARC 和 x64/x86 平台上都有效。仅在 SPARC 平台上有效的选项标志标有 (SPARC)。仅在 x64/x86 平台上有效的选项标志标有 (x86)。
标有(已过时)的选项标志已过时,不应使用。在许多情况下,它们已经被其他应该使用的选项或标志取代。
(已过时)使用 tcov 按基本块进行文件配置,这是旧式用法。
这是 tcov 的基本块文件配置的旧式用法。有关新式文件配置的信息,请参见 -xprofile=tcov;有关更多详细信息,请参见 tcov(1) 手册页。
3.4.2 &aligncommon[ ={1|2|4| 8|16}]
指定通用块和标准数值序列类型中数据的对齐。
此值表示通用块和标准数值序列类型中数据元素的最大对齐(以字节为单位)。
标准数值序列类型 是包含 SEQUENCE 语句以及唯一的缺省组件数据类型(INTEGER、REAL、DOUBLEPRECISION 和 COMPLEX,不带 KIND= 或 * size)的派生类型。任何其他类型(如 REAL*8)将使类型成为非标准类型。
例如,-aligncommon=4 会将自然对齐方式为 4 字节或大于 4 字节的数据元素与 4 字节边界对齐。
该选项不影响自然对齐方式小于指定大小的数据。
如果不使用 -aligncommon,则编译器会将通用块和数值序列类型中的元素与(最多)4 字节边界对齐。
如果指定不带值的 -aligncommon,则缺省值为 1-所有的通用块和数值序列类型元素都与字节边界对齐(元素之间无填充)。
在未启用 64 位的平台上,-aligncommon=16 恢复为 -aligncommon=8。
3.4.3 &ansi
标识许多非标准扩展。
如果在源代码中使用非标准 Fortran 95 扩展,则会发出警告消息。
3.4.4 &arg=local
通过 ENTRY 语句保留实际参数。
在使用此选项编译具有替换入口点的子程序时,f95 将使用复制/恢复功能保留哑元和实际参数之间的关联。
提供此选项的目的是与传统的 Fortran 77 程序兼容。依赖此选项的代码是非标准的。
3.4.5 &autopar
启用自动循环并行化。
查找相应的循环并使之并行化,以便在多个处理器上并行运行。分析循环以了解迭代间的数据依赖性并重构循环。如果未将优化级别指定为 -O3 或更高,则将它自动提升到 -O3。
在使用任何并行化选项(包括 -autopar)时,也要指定 -stackvar 选项。当使用 -autopar 时,-stackvar 选项可提供更好的性能,因为它可允许优化器为并行检测其他机会。有关如何为主线程栈和从线程栈设置大小的信息,请参见 -stackvar 选项描述。
如果程序已经包含对 libthread 线程库的显式调用,请避免使用 -autopar。请参见中的注释。
-autopar 选项不适用于单处理器系统,而且已编译代码的运行速度通常会更慢。
要在多线程环境中运行已并行化的程序,必须在执行之前设置 PARALLEL(或 OMP_NUM_THREADS)环境变量。这会将程序可以创建的最大线程数通知给运行时系统。缺省值为 1。通常会将 PARALLEL 或 OMP_NUM_THREADS 变量设置为目标平台上可用的虚拟处理器数,该值可使用 Solaris psrinfo(1) 命令确定。
如果使用 -autopar 并在同一步骤中进行编译和链接,则会自动链接多线程库和线程安全的 Fortran 运行时库。如果使用 -autopar 并在不同的步骤中进行编译和链接,则还必须使用 -autopar 进行链接以确保链接相应的库。
&reduction 选项与 &autopar 一起使用也可能是很有用的。
有关并行化的更多信息,请参阅《Fortran 编程指南》。有关用户控制的显式并行化,则使用 OpenMP 指令和 &xopenmp 选项。
3.4.6 &B{static|dynamic}
首选动态库链接或要求静态库链接。
在 -B 与 dynamic 或 static 之间不允许有空格。如果未指定 -B,则缺省值为 -Bdynamic。
&Bdynamic:首选动态链接(试图找到共享库)。
&Bstatic:要求静态链接(无共享库)。
另请注意:
如果指定 static,但是链接程序仅找到动态库,则不链接该库,同时发出警告&未找到库&。
如果指定 dynamic,但链接程序仅找到静态版本的库,则链接该库,并且不发出警告。
您可以在命令行上切换 -Bstatic 和 -Bdynamic。也就是说,通过在命令行上指定 -Bstatic 和 -Bdynamic 任意多次,可以静态链接一些库并动态链接一些库,如下所示:
f95 prog.f -Bdynamic -lwells -Bstatic -lsurface
这些是加载器和链接程序选项。在不同的步骤中使用编译命令的 -Bx 选项进行编译和链接时,将要求在链接步骤中也使用该选项。
不能在命令行上同时指定 -Bdynamic 和 -dn,因为 -dn 禁用动态库的链接。
在 64 位 Solaris 环境中,许多系统库仅作为共享动态库提供,其中包括 libm.so 和 libc.so(不提供 libm.a 和 libc.a)。这意味着,在 64 位 Solaris 环境中,-Bstatic 和 -dn 可能会导致链接错误。在这些情况下,应用程序必须与动态库链接。
不推荐同时使用静态 Fortran 运行时系统库和动态 Fortran 运行时系统库,因为这会导致链接程序错误或无提示的数据损坏。始终保持同最新的共享动态 Fortran 运行时系统库的链接。
有关静态库和动态库的更多信息,请参见《Fortran 编程指南》。
检查数组引用以查找超出范围的下标并在运行时检查一致性。
如果数组下标超过所声明的大小,可能会导致意外结果(包括段故障)。-C 选项检查源代码中和执行过程中可能的数组下标违规。-C 还添加了对数组语法表达式中数组一致性的运行时检查。
指定 -C 可能会使可执行文件更大。
如果使用 -C 选项,则会将数组下标违规视为错误。如果在编译过程中检测到源代码中存在数组下标范围违规,则会将它视为编译错误。
如果只能在运行时确定数组下标违规,则编译器会将范围检查代码生成到可执行程序中。这可能导致执行时间增加。因此,应该在开发和调试程序时启用完全数组下标检查,然后重新编译最后产生的可执行程序,而不必进行下标检查。
仅编译;生成目标 .o 文件,但禁止链接。
针对每个源文件编译 .o 文件。如果仅编译一个源文件,则可以使用 -o 选项来指定所写入的 .o 文件的名称。
3.4.9 &cg89
(已过时,SPARC)针对通用 SPARC 体系结构进行编译。
此选项是以下选项的宏:-xarch=v7 -xchip=old -xcache=64/32/1(与 -xtarget=ss2 等效)。
3.4.10 &cg92
(已过时,SPARC)针对 SPARC V8 体系结构进行编译。
此选项是以下选项的宏:&xarch=v8-xchip=super -xcache=16/32/4:(与 -xtarget=ss1000 等效)。
3.4.11 &copyargs
允许为常量参数赋值。
允许子程序更改其为常量的哑元。提供此选项只是为了允许编译和执行传统代码而不出现运行时错误。
在不使用 -copyargs 的情况下,如果将常量参数传递给子例程,然后在子例程内尝试更改该常量,则运行将终止。
在使用 -copyargs 的情况下,如果将常量参数传递给子例程,然后在子例程内更改该常量,则运行不一定终止。
当然,除非使用 -copyargs 进行编译,否则终止的代码是不符合 Fortran 标准的。此外,这样的代码通常是不可预知的。
3.4.12 &Dname[=def]
为预处理程序定义符号 name。
此选项仅适用于 .F、.F90、.F95 和 .F03 源文件。
&Dname=def 将 name 定义为具有值 def
&Dname 将 name 定义为 1
在命令行上,此选项将定义 name,就如同
#define name[=def]
已经出现在源文件中。如果未指定 =def,则名称 name 将定义为值 1。宏符号 name 将传递给预处理程序 fpp(或 cpp-请参见 -xpp 选项)以进行扩展。
预定义的宏符号具有两个前导下划线。Fortran 语法可能不支持这些宏的实际值-它们只应出现在 fpp 或 cpp 预处理程序指令中。(请注意两个前导下划线。)
产品版本是在 _
_SUNPRO_F90 和 _ _SUNPRO_F95 中预定义的(用十六进制表示)。例如,对于 Sun Studio 12 发行版,_ _SUNPRO_F95 为 0x830。
以下宏是在相应系统上预定义的:
_ _sparc、_ _unix、_ _sun、_ _SVR4、__i386、_ _SunOS_5_6、_ _SunOS_5_7、_
_SunOS_5_8、_ _SunOS_5_9 和 _
_SunOS_5_10
例如,值 _ _sparc 是在 SPARC 系统上定义的。
以下预定义值不带下划线,但是在以后的发行版中可能会删除这些值:sparc、unix 和 sun。
在 SPARC V9 系统上,还定义了 _ _sparcv9 宏。
在 64 位 x86 系统上,定义了宏 __amd64 和 __x86_64。
使用详细选项 (-v) 进行编译可查看由编译器创建的定义。
您可以在类似如下的预处理程序条件中使用这些值:
#ifdef _ _sparc
缺省情况下,f95 使用 fpp(1)
预处理程序。与 C 预处理程序 cpp(1) 一样,fpp 会扩展源代码宏并允许对代码进行条件编译。与 cpp 不同的是,fpp 能够识别 Fortran 语法,并作为首选的 Fortran 预处理程序。使用 -xpp=cpp 标志可以强制编译器明确使用 cpp 而非 fpp。
3.4.13 &dalign
对齐 COMMON 块和标准数值序列类型,并生成速度更快的多字装入/存储。
此标志可更改 COMMON 块、数值序列类型和 EQUIVALENCE 类中的数据布局,并使编译器能够为该数据生成速度更快的多字装入/存储。
数据布局效果与 -f 标志的效果相同:COMMON 块和 EQUIVALENCE 类中的双精度和四精度数据在内存中根据其&自然&对齐方式(即,与 8 字节边界对齐)进行布局;如果在 64 位环境中使用 -m64 进行编译,则四精度数据与 16 字节边界对齐。缺省情况下,按 4 字节边界对齐 COMMON 块中的数据。还允许编译器采用自然对齐方式并生成速度更快的多字装入/存储以引用数据。
在 SPARC 处理器上,如果结合使用 -dalign 和 -xtypemap=real:64,double:64,integer:64,还会导致 64 位整数变量进行双字对齐。
-dalign 可能导致数据以非标准方式对齐,从而使 EQUIVALENCE 或 COMMON 中的变量出现问题,并可能在需要 -dalign 的情况下使程序变为不可移植。
-dalign 是一个宏,它等效于:
-xmemalign=8s -aligncommon=16(在 SPARC 平台上)
-aligncommon=8(在 32 位 x86 平台上)
-aligncommon=16(在 64 位 x86 平台上)。
如果使用 -dalign 编译某个子程序,请使用 -dalign 编译该程序的所有子程序。此选项包含在 -fast 选项中。
请注意,因为 -dalign 调用 -aligncommon,所以此选项还影响标准数值序列类型。请参见
3.4.14 &dbl_align_all[ ={yes|no}]
强制与 8 字节边界对齐数据。
值为 yes 或 no。如果是 yes,所有变量将与 8 字节边界对齐。缺省值为 -dbl_align_all=no。
在 64 位环境中使用 -m64 进行编译时,此标志会使四精度数据与 16 字节边界对齐。
此标志不改变 COMMON 块或用户定义结构中的数据的布局。
与 -dalign 一起使用可以提高多字装入/存储的效率。
如果使用了此标志,则所有例程都必须使用此标志进行编译。
3.4.15 &depend[ ={yes|no}]
分析循环以了解数据依赖性并重构循环。
使用 -depend 或 -depend=yes 可启用依赖性分析。使用 -depend=no(编译器的缺省值)可禁用依赖性分析。
如果未指定优化级别,或者指定的级别低于 O3,则此选项会将优化级别提升到 O3。-depend 还包括在 -fast、-autopar 和 -parallel 中。另请注意,将优化级别指定为 -O3 或更高将自动增加 -depend。(请参见《Fortran 编程指南》。)
3.4.16 &dn
禁止动态库。请参见。
3.4.17 &dryrun
显示由 f95 命令行驱动程序生成的命令,但不进行编译。
此选项在调试时非常有用,它显示编译器为执行编译将调用的命令和子选项。
3.4.18 &d{ y|n}
允许或禁止对整个可执行文件使用动态库。
&dy:值为 Yes,允许使用动态/共享库。
&dn:值为 No,不允许使用动态/共享库。
如果未指定,则缺省值为 -dy。
与 -Bx 不同,此选项适用于整个可执行文件,并且只需在命令行上出现一次。
&dy|&dn 是加载器和链接程序选项。如果使用这些选项在不同的步骤中编译和链接,则在链接步骤中需要相同选项。
在 64 位 Solaris 环境中,许多系统库不只是作为共享动态库提供,其中包括 libm.so 和 libc.so(不提供 libm.a 和 libc.a)。这意味着,-dn 和 -Bstatic 可能会导致在 64 位 Solaris 环境、32 位 x86 Solaris 平台以及所有 32 位 Solaris 平台(从 Solaris 10 发行版开始)中出现链接错误。这些情况下应用程序必须与动态库链接。
接受扩展长度的输入源代码行。
扩展的源代码行中最多可以包含 132 个字符。编译器在右侧用结尾空白一直填充到第
132 列。如果在使用 -e 进行编译时使用续行,则不跨行拆分字符常量;否则,可能会在常量中插入不必要的空白。
3.4.20 &erroff[ ={%all|%none| taglist}]
禁止由标记名称列出的警告消息。
禁止显示在标记名称的逗号分隔列表 taglist 中指定的警告消息。如果为 %all,则禁止所有警告,它与 -w 选项等效。如果为 %none,则不禁止任何警告。不具有参数的 &erroff 同 &erroff=%all 等效。
f95 -erroff=WDECL_LOCAL_NOTUSED ink.f
使用 -errtags 选项可查看与警告消息关联的标记名称。
3.4.21 &errtags[ ={yes|no}]
与每个警告消息一起显示消息标记。
如果使用 -errtags=yes,编译器的内部错误标记名称将与警告消息一起显示。-errtags 本身与 -errtags=yes 等效。
缺省情况下不显示标记 (-errtags=no)。
demo% f95 -errtags ink.f
"ink.f", line 11: Warning: local variable "i" never used (WDECL_LOCAL_NOTUSED)
3.4.22 &errwarn[ ={%all|%none| taglist}]
将警告消息视为错误。
taglist 指定应视为错误的警告消息对应的标记名称的逗号分隔列表。如果使用 %all,则将所有警告视为错误。如果使用 %none,则不将任何警告视为错误。
另请参见 -errtags。
3.4.23 &explicitpar
(已过时,SPARC)对 Sun 或 Cray 指令标记的循环进行显式并行化。
注 & 此选项会启用传统的 Sun 或 Cray 并行化指令。这些指令和并行化模型已过时,不再受支持。OpenMP API 是所支持的首选并行化模型。有关将 Sun/Cray 指令转换为 OpenMP 的详细信息,请参见 -xopenmp 选项以及《OpenMP API 用户指南》。
即使 DO 循环中存在数据依赖性(当循环并行运行时,这些依赖性将使循环生成错误结果),编译器也会生成并行代码。对于显式并行化,用户应该在用并行化指令标记循环之前,正确地分析循环以了解数据依赖性问题。
并行化仅适合于多处理器系统。
此选项启用 Sun 和/或 Cray 显式并行化指令。紧跟在并行化指令之后的 DO 循环将为这些并行化指令生成线程代码。
要启用 OpenMP 显式并行化指令,请不要使用 -explicitpar,而改用 -xopenmp。请参见。
对于已通过调用 libthread 库执行了自己的多线程处理的程序,不得使用 -explicitpar 进行编译。
要在多线程环境中运行已并行化的程序,必须在执行之前设置 PARALLEL(或 OMP_NUM_THREADS)环境变量。这会将程序可以创建的最大线程数通知给运行时系统。缺省值为 1。通常会将 PARALLEL 或 OMP_NUM_THREADS 变量设置为目标平台上可用的虚拟处理器数。(请参见psrinfo(1))。
如果使用 -explicitpar 并在同一步骤中编译和链接,则链接将自动包括多线程库和线程安全的 Fortran 运行时库。如果使用 -explicitpar 并在不同的步骤中编译和链接,则还必须使用 -explicitpar 进行链接。
为了提高性能,在使用任何并行化选项(包括 -explicitpar)时还要指定 -stackvar 选项。
使用 -mp 选项()可选择已启用的并行化指令的风格。缺省情况下,-explicitpar 启用的是 Sun 指令。使用 -explicitpar -mp=cray 可启用 Cray 指令。
如果优化级别不是 -O3 或更高,则会自动将它提升到 -O3。
有关详细信息,请参见《Fortran 编程指南》中的&并行化&一章。
3.4.24 &ext_names= e
创建带有或不带尾随下划线的外部名称。
e 必须是 plain 或 underscores。缺省值为 underscores。
&ext_names=plain:不增加结尾下划线。
&ext_names=underscores:增加结尾下划线。
外部名称是子例程、函数、块数据子程序或标记通用块的名称。此选项既影响例程入口点的名称,又影响调用例程时使用的名称。使用此标志可允许 Fortran 95 例程调用其他编程语言例程(以及被后者调用)。
调用源文件预处理程序,但不进行编译。
将 fpp 预处理程序应用于命令行上列出的 .F、.F90、.F95 和 .F03 源文件,并将处理结果写入一个同名文件,但将该文件的扩展名更改为 .f(或者是 .f95 或 .f03),不进行编译。
f95 -F source.F
将已处理的源文件写入 source.f
fpp 是 Fortran 的缺省预处理程序。通过指定 -xpp=cpp,可以改为选择 C 预处理程序 cpp。
COMMON 块中的双精度和四精度数据。
-f 是一个传统的选项标志,它与 -aligncommon=16 等效。首选使用 -aligncommon。
缺省情况下,按 4 字节边界对齐 COMMON 块中的数据。-f 将 COMMON 块和 EQUIVALENCE 类中双精度和四精度数据的数据布局更改为在内存中根据&自然&对齐方式(即,与 8 字节边界对齐)放置;如果在 64 位 SPARC 环境中使用 -m64 进行编译,则四精度数据与 16 字节边界对齐。
-f 可能导致数据以非标准方式对齐,从而使 EQUIVALENCE 或 COMMON 中的变量出现问题,并可能在需要 -f 的情况下使程序变为不可移植。
使用 -f 编译程序的任何部分都要求使用 -f 编译该程序的所有子程序。
此选项本身并不允许编译器针对双精度和四精度数据生成速度更快的多字获取/存储指令。-dalign 选项执行此操作并调用 -f。相对于以前的 -f,请优先使用 -dalign。请参见。由于 -dalign 是 -fast 选项的一部分,因此 -f 也是它的一部分。
3.4.27 &f77[=list]
选择 Fortran 77 兼容性模式。
此选项标志用于将传统的 Fortran 77 源程序(包括那些具有 f77 编译器可接受的语言扩展的源程序)移植到 f95 Fortran 95 编译器。
list 是从下面可能的关键字中选择的逗号分隔列表:
启用所有 Fortran 77 兼容性功能。&
禁用所有 Fortran 77 兼容性功能。&
在字符串中,将反斜线作为转义序列接受。&
允许 f77 接受的输入格式。
intrinsics
将内函数的识别限制为仅识别 Fortran 77 内函数。&
接受 Fortran 77 的逻辑变量使用,如:&
-将整数值赋予逻辑变量;-允许在逻辑条件语句中使用算术表达式,用 .NE.0 表示 .TRUE.;-允许关系运算符 .EQ. 和 .NE. 与逻辑操作数一起使用
允许多种 f77 Fortran 77 扩展。
生成 f77 样式的格式化输出,包括列表式输出和 NAMELIST 输出。
允许将非整数表达式作为数组下标。&
启用 f77 样式的制表符格式,包括无限制的源代码行长度。对于长度小于 72 个字符的源代码行,将不增加空白填充。
对于所有关键字,通过在前面加上 no% 可禁用相应功能,如下所示:
-f77=%all,no%backslash
如果未指定 -f77,则缺省为 -f77=%none。使用不带列表的 -f77 与指定 -f77=%all 是等效的。
异常捕获与 -f77:
指定 -f77 并不会更改 Fortran 95 捕获模式(即 -ftrap=common)。在运算异常捕获方面,Fortran 95 与 Fortran 77 编译器的行为不同。Fortran 77 编译器允许在出现运算异常之后继续执行。使用 -f77 进行编译还会使程序在退出时调用 ieee_retrospective,以报告可能出现的任何运算异常。在命令行上,在 -f77 选项标志之后指定 -ftrap=%none 可以模拟原来的 Fortran 77 行为。
有关f77 兼容性以及从 Fortran 77 迁移到 Fortran 95 的完整信息,请参见。
有关如何处理可能导致错误结果的非标准编程症状,另请参见 -xalias 标志。
3.4.28 &fast
选择优化执行性能的选项。
注 & 该选项定义为其他选项的特殊选择集,它会随版本和编译器的不同而变化。另外,-fast 选择的某些选项并非在所有平台上都可用。使用 -dryrun 标志进行编译可查看 -fast 的扩展。
-fast 可为某些基准测试应用程序提供高性能。但是,对于您的应用程序,选项的特定选择可能是合适的,也可能是不合适的。使用 -fast 是编译应用程序以获得最佳性能的良好起点。但是,仍然可能需要进行其他调整。如果用 -fast 编译时程序不能正常运行,请仔细查看组成 -fast 的各个选项,只调用那些适用于您程序的选项,使程序正常运行。
另请注意,用 -fast 编译的程序对于一些数据集可能会表现出良好的性能和精确的结果,而对于另一些数据集则不然。对于那些依赖浮点运算的特殊属性的程序,请避免用 -fast 进行编译。
由于 -fast 选择的某些选项具有链接含义,因此,如果在不同的步骤中进行编译和链接,还请务必用 -fast 进行链接。
&fast 会选用以下选项:
-xtarget=native 硬件目标。如果打算在不同于编译计算机的目标计算机上运行程序,请在 -fast 之后加上代码生成器选项。例如:f95 -fast -xtarget=ultraT2 ...
-O5 优化级别选项。
-depend 选项分析循环以了解数据依赖性并重构循环(如有可能)。
-libmil 选项,用于系统提供的内联扩展模板。对于依赖异常处理的 C 函数,请在 -fast 之后加上 -nolibmil(如 -fast -nolibmil)。如果使用了 -libmil,则使用 errno 或 matherr(3m) 无法检测到异常。
-fsimple=2 选项,用于主动浮点优化。如果要求严格遵循 IEEE 754 标准,则 &fsimple=2 是不合适的。请参见。
-dalign 选项可为通用块中的双精度和四精度数据生成双字装入和存储。使用此选项可以在通用块中生成非标准的 Fortran 数据对齐。
-xlibmopt 选项可选择优化的数学库例程。
-pad=local 可在局部变量之间插入填充(如果适用)以提高高速缓存利用率。(SPARC)
-xvector=lib 使用向量参数将 DO 循环内的某些数学库调用变换为对向量化库等效例程的单个调用。(SPARC)
&fns 可选择非标准浮点运算异常处理和渐进下溢。请参见。
选择 -fround=nearest,因为 &xvector 和 &xlibmopt 要求使用该选项。(Solaris)
-ftrap=common,用于捕获常见的浮点异常,在 Fortran95 中处于启用状态。
-nofstore 对强制表达式具有结果精度这一行为加以取消。(x86)
-xregs=frameptr 允许编译器将帧指针寄存器用作未分配的被调用方保存寄存器。在 -fast 之后指定 -xregs=no%frameptr,帧指针寄存器将不会作为通用寄存器使用。(x86)
可以对此列表进行增减,方法是在 -fast 选项之后加上其他选项,如下所示:
f95 -fast -fsimple=1 -xnolibmopt ...
它会覆盖 -fsimple=2 选项,并禁用由 -fast 选择的 -xlibmopt。
由于 -fast 会调用 -dalign、-fns 和 -fsimple=2,因此用 -fast 编译的程序会导致非标准浮点运算、非标准数据对齐以及非标准表达式求值顺序。对于大多数程序来说,这些选择可能是不合适的。
请注意,由 -fast 标志选择的一组选项会随各个编译器发行版而发生变化。使用 -dryrun 调用编译器可显示 -fast 扩展:
&sparc&%f95 -dryrun -fast |& grep ###
command line files and options (expanded):
### -dryrun -xO5 -xarch=sparcvis2 -xcache=64/32/4:
-xchip=ultra3i -xdepend=yes -xpad=local -xvector=lib
-dalign -fsimple=2 -fns=yes -ftrap=common -xlibmil
-xlibmopt -fround=nearest
3.4.29 &fixed
指定固定格式的 Fortran 95 源输入文件。
无论采用哪个文件扩展名,命令行上的所有源文件都将被解释为固定格式文件。通常,f95 仅将 .f 文件解释为固定格式文件,而将 .f95 解释为自由格式文件。
3.4.30 &flags
与 -help 等效。
3.4.31 -fma={none| fused}
(SPARC) 启用自动生成浮点乘加指令。-fma=none 禁用生成这些指令。-fma=fused 允许编译器通过使用浮点乘加指令尝试查找机会来提高代码性能。缺省值为 -fma=none。
编译器生成乘加指令的最低要求为 -xarch=sparcfmaf,优化级别至少为 -xO2。如果已生成乘加指令来避免在不支持它们的平台上执行程序,编译器将标记二进制程序。
3.4.32 &fnonstd
按非标准首选项初始化浮点硬件。
此选项是以下选项标志组合的宏:
&fns -ftrap=common
指定 -fnonstd 大致等效于 Fortran 主程序开始处的以下两个调用。
i=ieee_handler("set", "common", SIGFPE_ABORT)
call nonstandard_arithmetic()
nonstandard_arithmetic() 例程替代了早期发行版中已过时的 abrupt_underflow() 例程。
主程序必须使用此选项进行编译才能有效。
使用此选项初始化浮点硬件,以达到下列目的:
在出现浮点异常时终止(捕获)该异常。
如果下溢结果将提高速度,而不是生成 IEEE 标准所要求的次正规数,则将该结果刷新为零。
有关渐进下溢和次正规数的更多信息,请参见 -fns。
通过 -fnonstd 选项,可以针对浮点溢出、被零除和无效运算异常启用硬件陷阱。这些情况将转换为 SIGFPE 信号,而且如果程序没有 SIGFPE 处理程序,它将以转储内存而终止。
有关更多信息,请参见 ieee_handler(3m)
和 ieee_functions(3m) 手册页,以及《数值计算指南》和《Fortran 编程指南》。
3.4.33 &fns[ ={yes| no}]
选择非标准浮点模式。
缺省值为标准浮点模式 (&fns=no)。(请参见《Fortran 编程指南》的&浮点运算&一章。)
可选择使用 =yes 或 =no,这样便可以切换跟在某个其他宏标志(如 -fast)后面
的且包含于其中的 -fns 标志。不带值的 -fns 与 -fns=yes 等效。
此选项标志在程序开始执行时启用非标准浮点模式。在 SPARC 平台上,指定非标准浮点模式会禁用&渐进下溢&,从而导致将微小的结果刷新为零,而不是生成次正规数。此外,还会导致次正规操作数在无提示的情况下替换为零。在那些不支持硬件中的渐进下溢和次正规数的 SPARC 系统上,使用此选项将显著提高某些程序的性能。
下表中的 x 不会导致总下溢,当且仅当 |x| 处于所示范围之一时,x 才是一个次正规数:
低于正常的 REAL 和 DOUBLE
0.0 & |x| & 1.&
DOUBLE PRECISION
0.0 & |x| & 2.14e&308&
有关次正规数的详细信息,请参见《数值计算指南》;有关此选项和类似选项的更多信息,请参见《Fortran 编程指南》的&浮点运算&一章。(一些算术家使用术语非正规数来代替次正规数。)
缺省情况下,对浮点首选项进行标准初始化:
IEEE 754 浮点运算是不停止的(即出现异常时不终止)。
下溢是渐进的。
在 x86 平台上,此选项仅对 Pentium III 和 Pentium 4 处理器(sse 或 sse2 指令集)启用。
在 x86 上,-fns 选择 SSE 刷新为零模式以及非正规数为零模式(如果可用的话)。此标志导致将次正规结果刷新为零。如果可用的话,此标志还导致将次正规操作数视为零。此标志对使用 SSE 或 SSE2 指令集的传统 x87 浮点运算没有影响。
主程序必须使用此选项进行编译才能有效。
3.4.34 &fpover[ ={yes|no}]
检测格式化输入中的浮点溢出。
如果指定了 -fpover=yes ,则 I/O 库将检测格式化输入中的运行时浮点溢出并返回错误条件 (1031)。缺省情况下,不进行这样的溢出检测 (&fpover=no)。不带值的 -fpover 与 -fpover=yes 等效。同 &ftrap 组合使用可获得完整的诊断信息。
3.4.35 &fpp
使用 fpp 强制对输入进行预处理。
通过 fpp 预处理程序传递在 f95 命令行上列出的所有输入源文件,而不管文件扩展名为何。(通常,fpp 仅自动预处理扩展名为 .F、.F90
或 .F95 的文件。)另请参见 。
3.4.36 &fprecision={single|double|extended}
(x86) 初始化非缺省的浮点型舍入精度模式。
在 x86 上,将浮点精度模式设置为 single、double
或 extended。
如果值为 single 或 double,此标志会在程序启动时将舍入精度模式相应地设置为单精度或双精度。如果值为 extended,,或在缺省情况下且未指定 -fprecision 标志,则舍入精度模式将初始化为扩展精度。
此选项仅对 x86 系统且仅在编译主程序时使用才有效。
3.4.37 &free
指定自由格式的源输入文件。
命令行上的所有源文件都将被解释为 f95 自由格式源文件,而不管文件扩展名为何。通常,f95 仅将 .f 文件解释为固定格式文件,而将 .f95 解释为自由格式文件。
3.4.38 &fround={ nearest|tozero|negative| positive}
设置启动时有效的 IEEE 舍入模式。
缺省值为 -fround=nearest。
主程序必须使用此选项进行编译才能有效。
该选项将 IEEE 754 舍入模式设置为:
可以由编译器在对常量表达式求值时使用。
是在程序初始化过程中在运行时建立的。
如果值为 tozero、negative 或 positive,该选项在程序开始执行时将舍入方向相应地设置为舍入为零、舍入为负无穷大或舍入为正无穷大。如果未指定 -fround,则将 -fround=nearest 用作缺省值,舍入方向是舍入为最接近的值。其含义与 ieee_flags 函数相同。(请参见《Fortran 编程指南》的&浮点运算&一章。)
3.4.39 &fsimple[ ={1|2|0}]
选择浮点优化首选项。
允许优化器作出有关浮点运算的简化假定。(请参见《Fortran 编程指南》的&浮点运算&一章。)
为了获得一致的结果,请使用同一 -fsimple 选项编译程序的所有单元。
缺省值为:
如果不使用 -fsimple 标志,则编译器缺省为 -fsimple=0
如果使用不带值的 -fsimple,则编译器使用 -fsimple=1
各种浮点简化级别如下:
&fsimple=0
不允许简化假定。保持严格的 IEEE 754 一致性。
&fsimple=1
允许适度的简化。产生的代码与 IEEE 754 不完全一致,但多数程序所产生的数值结果没有更改。
如果使用 -fsimple=1,优化器可以假定以下内容:
在进程初始化之后,IEEE 754 缺省舍入/捕获模式不发生改变。
可以删除不生成可见结果(潜在的浮点异常除外)的计算。
以无穷大或 NaN(&不是数&)为操作数的计算不需要将 NaN 传播到其结果;例如,x*0 可以由 0 替换。
计算不依赖于零的符号。
如果使用 -fsimple=1,则不允许优化器进行完全优化,而不考虑舍入或异常。特别是,在运行时舍入模式包含常量的情况下,浮点计算不能由产生不同结果的计算替换。
&fsimple=2
除 &fsimple=1 外,还允许主动浮点优化。这会导致某些程序因表达式求值方式的变化而生成不同的数值结果。尤其是,使用 -fsimple=2 可能会违反如下 Fortran 标准规则:要求编译器用显式圆括号将子表达式括起来以控制表达式求值顺序。对于依赖此规则的程序,这会导致数值舍入差异。
例如,如果使用 -fsimple=2,编译器可能将 C-(A-B) 计算为 (C-A)+B,从而违反了有关显式圆括号的标准规则(如果生成的代码已更好地进行了优化)。编译器还可能将 x/y 的重复计算替换为 x*z,其中的 z=1/y 计算一次并暂时保存,以消除成本较高的除法运算。
对于依赖浮点运算的特定属性的程序,不得使用 -fsimple=2 进行编译。
即使使用 -fsimple=2,也仍然不允许优化器在程序中引入浮点异常,如果不在这样的程序中引入浮点异常,该程序将不生成任何异常。
&fast 会选择 -fsimple=2。
3.4.40 &fstore
(x86) 强制浮点表达式的精度。
对于赋值语句,此选项将所有浮点表达式强制为目标变量的精度。这是缺省设置。但是,-fast 选项包括可用来禁用此选项的 -nofstore。-fast 后跟 -fstore 可以重新打开此选项。
3.4.41 &ftrap= t
设置在启动时有效的浮点捕获模式。
t 是一个逗号分隔列表,它包含以下项中的一个或多个:
%all、%none、common、[no%]invalid、[no%]overflow、[no%]underflow、[no%]division、[no%]inexact。
-ftrap=common 是 -ftrap=invalid,overflow,underflow,division 的宏。
f95 的缺省值为 -ftrap=common。这与 C 和 C++ 编译器的缺省值不同,后者为 -ftrap=none。
设置在启动时有效的 IEEE 754 捕获模式,但不安装 SIGFPE 处理程序。可以使用 ieee_handler(3M) 或 fex_set_handling(3M) 启用陷阱并同时安装 SIGFPE 处理程序。如果指定多个值,则按从左到右顺序处理列表。按照定义,常见异常包括无效、被零除和溢出。
示例:-ftrap=%all,no%inexact 表示设置除 inexact 以外的所有陷阱。
-ftrap=t 的含义与 ieee_flags() 基本相同,不同之处是:
%all 打开所有捕获模式,并会导致捕获伪异常和预期异常。请改用 common。
%none 关闭所有捕获模式。
no% 前缀关闭该特定捕获模式。
主程序必须使用此选项进行编译才能有效。
有关详细信息,请参见《Fortran 编程指南》的&浮点运算&一章。
生成动态共享库,而不是生成可执行文件。
指示链接程序生成共享动态库。如果不使用 -G,则链接程序生成可执行文件。如果使用 -G,它将生成动态库。将 -o 与 -G 一起使用可以指定要写入的文件的名称。有关详细信息,请参见《Fortran 编程指南》的&库&一章。
针对调试和性能分析进行调试。
生成其他符号表信息,以便使用 dbx(1) 调试实用程序进行调试,并使用性能分析器进行性能分析。
虽然在不指定 -g 的情况下也可以进行一些调试,但是 dbx 和 debugger 的完整功能只供那些使用 -g 编译的编译单元使用。
与 -g 一起指定的其他选项的某些功能可能是有限的。有关详细信息,请参见 dbx 文档。
要使用性能分析器的完整功能,请使用 -g 进行编译。尽管一些性能分析功能不要求使用 -g,但是您必须使用 -g 进行编译才能查看带注释的源代码、一些函数级信息和编译器注释性消息。(请参见 analyzer(1) 手册页和《Sun Studio 性能分析器》手册。)
使用 -g 生成的注释性消息说明编译器在编译程序时进行的优化和变换。通过 er_src(1) 命令,可以显示与源代码交错的消息。
请注意,仅当编译器实际执行了优化时,才会出现注释性消息。如果请求高优化级别(如使用 -xO4
或 -fast),则更有可能看到注释性消息。
3.4.44 &hname
指定已生成的动态共享库的名称。
此选项将被传递给链接程序。有关详细信息,请参见 Solaris《链接程序和库指南》以及《Fortran 编程指南》的&库&一章。
-hname 选项将名称 name 记录到共享动态库中,作为库的内部名称创建。-h 和 name 之间的空格是可选的(除非库名称是 elp,此时要求使用空格)。通常,name 必须与跟在 -o 后面的内容相同。如果不同时指定 -G,则使用此选项是无意义的。
如果不使用 -hname 选项,则在库文件中不记录内部名称。
如果库具有内部名称,则每当运行引用该库的可执行程序时,运行时链接程序将在其搜索的任何路径中搜索具有相同内部名称的库。在指定了内部名称的情况下,在运行时链接过程中搜索库更为灵活。此选项还可用于指定共享库的版本。
如果没有共享库的内部名称,则链接程序将改用共享库文件的特定路径。
3.4.45 &help
显示编译器选项的摘要列表。
另请参见。
3.4.46 &Ipath
将 path 添加到 INCLUDE 文件搜索路径中。
在 INCLUDE 文件搜索路径的开始处插入目录路径 path。在 -I 和 path 之间不允许有空格。无效目录将被忽略,并且不显示警告消息。
include 文件搜索路径是在其中搜索 INCLUDE 文件(出现在预处理程序 #include 指令或 Fortran INCLUDE 语句中的文件名)的目录的列表。
示例:在 /usr/app/include 中搜索 INCLUDE 文件:
demo% f95 -I/usr/app/include growth.F
在命令行上可以出现多个 -Ipath 选项。每个选项都添加到搜索路径列表的顶部(搜索的第一个路径)。
INCLUDE 或 #include 的相对路径的搜索顺序如下:
包含源文件的目录
在 -I 选项中指定的目录
编译器内部缺省列表中的目录
/usr/include/
要调用预处理程序,您必须使用 .F、.F90、.F95
或 .F03 后缀来编译源文件。
3.4.47 -i8
(没有 i8 选项。)
使用 &xtypemap=integer:64 指定该编译器的 8 字节 INTEGER。
3.4.48 &inline=[ %auto][[,][no%] f1,&[no%]fn]
启用或禁用指定例程的内联。
请求优化器对出现在函数和子例程名称列表(用逗号分隔)中的用户编写例程进行内联。在例程名之前加上 no% 可禁用对该例程的内联。
内联是一种优化方法,编译器可以通过该方法有效地将子程序引用(如 CALL 或函数调用)替换为实际的子程序代码本身。内联通常为优化器提供更多生成高效代码的机会。
指定 %auto 可以在优化级别 -O4 或 -O5 上启用自动内联。如果使用 -inline 指定了显式内联,则这些优化级别的自动内联会正常关闭。
示例:对 xbar、zbar 和 vpoint 例程进行内联:
demo% f95 -O3 -inline=xbar,zbar,vpoint *.f
下面是一些限制;不发出任何警告:
必须在 -O3 或更高级别进行优化。
例程的源代码必须位于所编译的文件中,除非还指定了 -xipo 或 &xcrossfile。
编译器确定实际内联是否有利和安全。
-inline 与 -O4 一起使用可禁用编译器通常执行的自动内联,除非还指定了 %auto。如果使用 -O4,则编译器通常会尝试对用户编写的所有适当的子例程和函数进行内联。-inline 与 -O4 一起使用可能会降低性能,因为优化器只能对列表中的那些例程进行内联。在这种情况下,请使用 %auto 子选项启用 -O4 和 -O5 级别的自动内联。
demo% f95 -O4 -inline=%auto,no%zpoint *.f
在上例中,用户在禁止对编译器可能尝试的例程 zpoint() 进行任何可能的内联的同时,还启用了 -O4 级别的自动内联。
3.4.49 &iorounding[ ={compatible|processor-defined}]
为格式化输入/输出设置浮点舍入模式。
以全局方式为所有的格式化输入/输出运算设置 ROUND= 说明符。
如果使用 -iorounding=compatible,数据转换后的值是与两个最接近表示更接近的值,如果值正好在两者中间,则是离 0 远的值。
如果使用 -iorounding=processor-defined,则舍入模式是处理器的缺省模式。在未指定 -iorounding 时,这是缺省值。
3.4.50 &Kpic
(已过时)与 -pic 等效。
3.4.51 &KPIC
(已过时)与 -PIC 等效。
3.4.52 &Lpath
将 path 添加到要在其中搜索库的目录路径的列表中。
将 path 添加到目标库搜索目录列表的前面。-L 和 path 之间的空格是可选的。此选项将传递给链接程序。另请参见。
在生成可执行文件时,ld(1) 在 path 中搜索归档库(.a 文件)和共享库(.so 文件)。ld 在搜索缺省目录之前搜索 path。(有关库搜索顺序的信息,请参见《Fortran 编程指南》的&库&一章。)有关
LD_LIBRARY_PATH 和 -Lpath 之间的相对顺序,请参见 ld(1)。
注 & 使用 -Lpath 指定 /usr/lib 或 /usr/ccs/lib 可能会阻止链接未绑定的 libm。缺省情况下,将搜索这些目录。
示例:使用 -Lpath 指定库搜索目录:
demo% f95 -L./dir1 -L./dir2 any.f
3.4.53 &lx
将库 libx.a添加到链接程序的搜索库列表中。
将 -lx 传递给链接程序,以指定供 ld 在其中搜索未解析引用的其他库。ld 与对象库 libx 链接。如果共享库 libx.so 可用(且未指定 -Bstatic 或 -dn),则 ld 使用它,否则,ld 使用静态库 libx.a。如果它使用共享库,则将该名称生成到 a.out 中。在 -l 和 x 字符串之间不允许有空格。
示例:与库 libVZY 进行链接:
demo% f95 any.f -lVZY
再次使用 -lx 以便与更多的库链接。
示例:与库 liby 和 libz 进行链接:
demo% f95 any.f -ly -lz
有关库搜索路径和搜索顺序的信息,另请参见《Fortran 编程指南》的&库&一章。
3.4.54 &libmil
内联所选的用于优化的 libm 库例程。
某些 libm 库例程有内联模板。此选项会选择那些为当前使用的浮点选项和平台生成速度最快的可执行文件的内联模板。
有关更多信息,请参见 libm_single(3F)
和 libm_double(3F) 手册页。
3.4.55 &loopinfo
显示循环的并行化结果。
显示哪些循环是使用 &autopar 选项并行化的以及哪些不是。
&loopinfo 显示有关标准错误的消息的列表:
demo% f95 -c -fast -autopar -loopinfo shalow.f
"shalow.f", line 172: PARALLELIZED, and serial version generated
"shalow.f", line 173: not parallelized, not profitable
"shalow.f", line 181: PARALLELIZED, fused
"shalow.f", line 182: not parallelized, not profitable
3.4.56 &Mpath
指定 MODULE 目录、归档或文件。
在路径中查找当前编译中引用的 Fortran 95 模块。在当前目录之外的目录中搜索此路径。
path 可以指定目录、预编译模块文件的 .a 归档文件,或 .mod 预编译模块文件。编译器通过检查文件的内容来确定其类型。
要在其中搜索模块的 .a 归档文件必须在 -M 选项标志上显式指定。缺省情况下,编译器不搜索归档文件。
只搜索与出现在 USE 语句中的 MODULE 名称同名的 .mod 文件。例如,语句 USE ME 使编译器仅查找模块文件 me.mod。
搜索模块时,编译器为在其中写入模块文件的目录指定更高的优先级。这是由 -moddir 编译器选项或 MODDIR 环境变量控制的。如果上述两者都未指定,则缺省写入目录为当前目录。如果两者均已指定,则写入目录是 -moddir 标志指定的路径。
这意味着,如果只出现了 -M 标志,则先在当前目录中搜索模块,然后再在 -M 标志上列出的任何对象中进行搜索。要模拟以前发行版的行为,请使用:
-moddir=empty-dir -Mdir -M
其中 empty-dir 是空目录的路径。
-M 和路径之间可以有空格例如,-M /home/siri/PK15/Modules
在 Solaris 上,如果路径标识一个非归档文件或模块文件的常规文件,则编译器会将该选项传递给链接程序 ld,链接程序会将该选项作为链接程序映射文件。与 C 和 C++ 编译器类似,此功能作为公用选项提供。
有关 Fortran 95 中模块的更多信息,请参见。
3.4.57 &m32 |
为已编译的二进制对象指定内存模型。
使用 -m32 创建 32 位可执行文件和共享库。使用 -m64 创建 64 位可执行文件和共享库。
在所有 Solaris 平台以及未启用 64 位的 Linux 平台上缺省为 ILP32 内存模型(32 位 int、long 和指针数据类型)。在启用了 64 位的 Linux 平台上缺省为 LP64 内存模型(64 位 long 和指针数据类型)。-m64 仅允许在启用了 LP64 模型的平台上使用。
使用 -m32 编译的目标文件或库不能同使用 -m64 编译的目标文件或库链接。
当编译具有大量静态数据的应用程序时,可能还需要使用 -m64、-xmodel=medium。
请注意,部分 Linux 平台不支持中等模型。
注意,在以前的编译器发行版中,通过选择带有 -xarch 的指令集来实现内存模型 ILP32 或 LP64 。从 Sun Studio 12 编译器开始,不再存在这种情况。在大多数平台上,仅需向命令行添加 -m64 即可创建 64 位对象。
在 Solaris 上,缺省为 -m32。在支持 64 位程序的 Linux 系统上,缺省为 -m64 -xarch=sse2。
3.4.58 &moddir= path
指定编译器将写入已编译的 .mod MODULE 文件的位置。
编译器会将它编译的 .mod MODULE 信息文件写入由 path 指定的目录。也可以使用 MODDIR 环境变量指定目录路径。如果同时使用这两种方法指定了目录路径,则此选项标志优先。
编译器将当前目录用作写入 .mod 文件的缺省目录。
有关 Fortran 95 中模块的更多信息,请参见。
3.4.59 &mp={%none|sun|cray}
选择 Sun 或 Cray 并行化指令。
注 & Sun 和 Cray 并行化指令已过时,请改用 OpenMP 并行化 API。《OpenMP API 用户指南》介绍了如何将应用程序迁移到 OpenMP。
如果未指定 -explicitpar,则缺省值为 -mp=%none。
如果指定了 -explicitpar,则缺省值为 -mp=sun。
接受 Sun 风格的指令:C$PAR 或 !$PAR 前缀。
接受 Cray 风格的指令:CMIC$ 或 !MIC$ 前缀。
忽略所有并行化指令。&
还必须指定 -explicitpar(或 -parallel)以启用并行化。为了确保正确无误,还要指定 -stackvar:
-explicitpar -stackvar -mp=cray
要针对 OpenMP 并行化进行编译,请使用 -xopenmp 标志。请参见。
在同一编译单元中,Sun 指令和 Cray 指令不能同时处于活动状态。
本手册中的 提供了 Sun 和 Cray 并行化指令摘要。有关详细信息,请参见《Fortran 编程指南》。
3.4.60 &mt
要求链接到线程安全库。
如果您进行自己的低级线程管理(例如,通过调用 libthread 库),则使用 -mt 进行编译可防止冲突。
如果混合使用 Fortran 与调用 libthread 库的多线程 C 代码,请使用 -mt。另请参见 Solaris《多线程编程指南》。
在使用 -autopar、-explicitpar
或 -parallel 选项时,会自动隐含 &mt。
请注意以下事项:
执行 I/O 的函数子程序本身不应该作为 I/O 语句的一部分被引用。在使用 -mt 时,这样的递归 I/O 可能会使程序出现死锁。
通常,不要使用 -autopar、-explicitpar
或 -parallel 编译自己的多线程代码。编译器生成的对线程库的调用可能与程序拥有的调用发生冲突,从而导致意外的结果。
在单处理器系统中,使用 -mt 选项可能会降低性能。
3.4.61 &native
(已过时)优化主机系统的性能。
此选项与首选设置 -xtarget=native 等效。-fast 选项设置 -xtarget=native。
3.4.62 &noautopar
禁用由先前出现在命令行上的 -autopar 调用的自动并行化。
3.4.63 &nodepend
(SPARC) 取消先前出现在命令行上的任何 -depend。
3.4.64 &noexplicitpar
禁用由先前出现在命令行上的 -explicitpar 调用的显式并行化。
3.4.65 -nofstore
(x86) 取消命令行上的 -fstore。
编译器的缺省值为 -fstore。-fast 包括 -nofstore。
3.4.66 &nolib
禁用与系统库的链接。
不自动与任何系统库或语言库链接;也就是说,不将任何缺省的 -lx 选项传递给 ld。正常行为是将系统库自动链接到可执行文件,而无需用户在命令行上指定它们。
使用 -nolib 选项,可以更轻松地静态链接其中的一个库。最终执行需要系统库和语言库。手动链接它们是您的责任。通过此选项,您可以完全控制与库的链接。
将 libm(静态)和 libc(动态)与 f95 链接:
demo% f95 -nolib any.f95 -Bstatic -lm -Bdynamic -lc
-lx 选项的顺序是很重要的。请遵循示例所示的顺序。
3.4.67 &nolibmil
取消命令行上的 -libmil。
在 -fast 选项之后使用此选项,可禁用 libm 数学例程的内联:
demo% f95 -fast -nolibmil &
3.4.68 &noreduction
禁用命令行上的 -reduction。
此选项禁用 -reduction。
3.4.69 &norunpath
不会将运行时共享库搜索路径生成到可执行文件中。
编译器通常将一个路径生成到可执行文件中,从而告知运行时链接程序查找所需共享库的位置。该路径取决于具体的安装。-norunpath 选项阻止将该路径生成到可执行文件中。
如果已将库安装在一些非标准位置,而且您不希望在另一位置运行可执行文件时让加载器搜索这些路径,则此选项是很有用的。请与 -Rpaths 进行比较。
有关更多信息,请参见《Fortran 编程指南》的&库&一章。
3.4.70 &O[n]
指定优化级别。
n 可以是 1、2、3、4 或 5。在 -O 和 n 之间不允许有空格。
如果未指定 -O[n],则仅执行非常基本级别的优化,即限于局部公共子表达式消除和无用代码分析。与不使用优化相比,使用优化级别进行优化可以大大提高程序的性能。对于大多数程序,建议使用 -O(它设置 -O3)或 -fast(它设置 -O5)。
每个 -On 级别的优化都包括在低于它的级别上执行的优化。通常,编译程序时使用的优化级别越高,获得的运行时性能也越高。但是,优化级别越高,编译时间会越长,可执行文件也越大。
使用 -g 进行调试不会禁止
-On,但是 -On 在某些方面限制 -g;请参见 dbx 文档。
-O3 和 -O4 选项降低调试的效用,这样您无法从 dbx 显示变量,但仍可以使用 dbx where 命令获取符号回扫。
如果优化器内存不足,则它尝试在较低优化级别上再次进行,即继续在原始级别上对后续例程进行编译。
有关优化的详细信息,请参见《Fortran 编程指南》的&性能剖析&和&性能与优化&这两章。
此选项与 -O3 等效。
3.4.72 &O1
提供最少的语句级优化。
如果更高的级别会导致编译时间过长,或者超过了可用交换空间,请使用此选项。
3.4.73 &O2
启用基本块级别的优化。
通常,此级别产生的代码大小是最小的。(另请参见 -xspace。)
&O3 的使用应优先于 -O2,除非 -O3 导致编译时间过长、超过交换空间或生成过大的可执行文件。
3.4.74 &O3
在函数级别上增加循环解开和全局优化。自动添加 -depend。
通常,-O3 生成的可执行文件较大。
3.4.75 &O4
增加包含在同一文件中的例程的自动内联。
通常,-O4 生成的可执行文件较大(因为进行了内联)。
-g 选项禁止如上所述的 -O4 自动内联。&xcrossfile 会增大使用 -O4 进行内联的范围。
3.4.76 &O5
尝试主动优化。
仅适合于使用计算时间最大部分的一小段程序。-O5 的优化算法所用的编译时间较长,在应用于太大的源程序段时也可能降低性能。
如果使用配置文件反馈进行优化,则此级别上的优化更有可能提高性能。请参见 -xprofile=p。
3.4.77 &o name
指定要写入的可执行文件的名称。
-o 和 name 之间必须有一个空格。如果不使用此选项,则缺省为将可执行文件写入 a.out。在与 -c 一起使用时,-o 指定目标 .o 目标文件;在与 -G 一起使用时,它指定目标 .so 库文件。
3.4.78 &onetrip
启用单行程 DO 循环。
编译 DO 循环以便至少执行它们一次。如果上限小于下限,则在标准 Fortran 中根本不执行 DO 循环;这一点与 Fortran 的某些传统实现是不同的。
3.4.79 &openmp
与 -xopenmp 等效。
(已过时)为使用 prof 配置程序进行文件配置而编译。
准备目标文件以进行文件配置,请参见 prof (1)。如果在不同的步骤中编译和链接,而且使用 -p 选项进行编译,请确保使用 -p 选项进行链接。-p 与 prof 一起使用主要是为了与旧系统兼容。使用 gprof 的 -pg 文件配置可能是一个更好的备用方案。有关详细信息,请参见《Fortran 编程指南》的&性能剖析&一章。
3.4.81 &pad[=p]
插入填充以便提高高速缓存的使用效率。
如果数组或字符变量是静态的局部数组或变量且未初始化,或者位于通用块中,则此选项在数组之间或字符变量之间插入填充。额外填充将数据定位以便更好地利用高速缓存。在任意一种情况下,数组或字符变量都不能是等效的。
如果 p 存在,则 p 必须为 %none,或者为 local 或 common 之一(或两者):
在邻近的局部变量之间添加填充。
在通用块中的变量之间增加填充。&
不增加填充。(编译器缺省值。)&
如果同时指定了 local 和 common,则它们可以以任意顺序显示。
-pad 的缺省值:
缺省情况下编译器不进行填充。
如果指定了 -pad 但不带值,则它与 -pad=local,common 等效。
-pad[=p] 选项适用于满足以下条件的项:
项是数组或字符变量
项是静态本地的或处于通用块中
有关本地或静态变量的定义,请参见。
程序必须符合以下限制:
数组或字符串都不是等效的
如果为了对引用通用块的某个文件进行编译而指定了 -pad=common,则在对引用该通用块的所有文件进行编译时也必须指定它。此选项更改通用块内变量的间距。如果一个程序单元是使用该选项编译的,而另一个程序单元不是用该选项编译的,则在应该引用通用块中的同一位置时,可能会引用不同的位置。
如果指定了 -pad=common,则不同程序单元中通用块变量的声明必须是相同的(变量名称除外)。在通用块中的变量之间插入的填充量取决于那些变量的声明。如果变量在不同程序单元中的大小或等级不同,即使是在同一文件内,变量的位置也可能不同。
如果指定了 -pad=common,则用警告消息标记那些涉及通用块变量的 EQUIVALENCE 声明,而且不填充该块。
如果指定了 -pad=common,请避免通用块中出现索引超出数组边界的情况。如果更改已填充通用块中邻近数据的位置,将导致过度索引 (overindexing) 以不可预知的方式失败。
使用 -pad 时,程序员应确保以一致的方式编译通用块。如果不同程序单元中的通用块没有一致地使用 -pad=common 进行编译,则会导致错误。如果同名的通用块在不同的程序单元中具有不同的长度,则将报告正在使用 -Xlist
进行编译。
3.4.82 &parallel
(并行化,SPARC)使用以下选项进行并行化:-autopar、-explicitpar、-depend
注 & 此选项包括 -explicitpar,它可启用传统的 Sun 和 Cray 并行化指令。这些指令现已过时,不再受支持。OpenMP API 是 Sun Studio 编译器所支持的首选并行化模型。有关将传统 Sun/Cray 指令迁移到 OpenMP 的详细信息,请参见 Sun Studio《OpenMP API 用户指南》。
对编译器自动选择的循环以及用户所提供的指令显式指定的循环进行并行化。如果优化级别较低,则会将它自动提升到 -O3。另请参见。
为了提高性能,在使用任何并行化选项(包括 -autopar)时,还要指定 -stackvar 选项。
缺省情况下,Sun 风格的并行化指令处于启用状态。使用 -mp=cray 可选择 Cray 风格的并行化指令。(注:对于 OpenMP 并行化,请使用 -xopenmp,而不要使用 -parallel。)
如果执行自己的线程管理,请不要使用 -parallel。请参见。
并行化选项(如 -parallel)用于生成将在多处理器系统上运行的可执行程序。在单处理器系统上,并行化通常会降低性能。
要在多线程环境中运行已并行化的程序,必须在执行之前设置 PARALLEL(或 OMP_NUM_THREADS)环境变量。这会将程序可以创建的最大线程数通知给运行时系统。缺省值为 1。通常会将 PARALLEL 或 OMP_NUM_THREADS 变量设置为目标平台上可用的虚拟处理器数。(请参见 psrinfo(1))
如果使用 -parallel 并在同一步骤中进行编译和链接,则链接会自动包括多线程库和线程安全的 Fortran 运行时库。如果使用 -parallel 并在不同的步骤中进行编译和链接,则还必须使用 -parallel 进行链接。
有关详细信息,请参见《Fortran 编程指南》的&并行化&一章。
3.4.83 &pg
为使用 gprof 配置程序进行文件配置而编译。
以 -p 的方式编译自配置代码,但调用一种运行时记录机制,该机制可保存更广泛的统计信息并在程序正常终止时生成 gmon.out 文件。通过运行 gprof 生成执行配置文件。有关详细信息,请参见 gprof(1) 手册页和《Fortran 编程指南》。
库选项必须跟在源文件和 .o 文件后面(&pg 库是静态的)。
注 & 如果指定了 -pg,则使用 -xprofile 进行编译并无优势。这两个功能中的任一功能不会准备或使用由另一个功能提供的数据。
使用 prof(1) 或 gprof(1)(在 64 位 Solaris 平台上)或者仅使用 gprof(在 32 位 Solaris
平台上)生成的配置文件中包括大致的用户 CPU 时间。这些时间来自主可执行文件中的例程以及共享库中例程(链接可执行文件时将共享库指定为链接程序参数)的 PC 示例数据(请参见 pcsample(2))。其他共享库(在进程启动后使用 dlopen(3DL) 打开的库)不进行文件配置。
在 32 位 Solaris 系统中,使用 prof(1) 生成的配置文件仅限于可执行文件中的例程。通过将可执行文件与 -pg 链接并使用 gprof(1),可以对 32 位共享库进行文件配置。
Solaris 10 软件不包括使用 -p 编译的系统库。因此,在 Solaris 10 平台上收集的配置文件不包含系统库例程的调用计数。
不应当使用编译器选项 -p、-pg 或 -xpg 来编译多线程程序,因为这些选项的运行时支持不是线程安全的。如果利用这些选项来编译使用多个线程的程序,则可能会在运行时产生无效结果或段故障。
如果在不同的步骤中进行编译和链接,并使用 -pg 进行编译,请确保使用 -pg 进行链接。
3.4.84 &pic
为共享库编译与位置无关的代码。
在 SPARC 上,&pic 与 -xcode=pic13 等效。有关与位置无关的代码的更多信息,请参见。
在 x86 上,生成与位置无关的代码。生成共享库时使用该选项编译源文件。对全局数据的每个引用都生成为全局偏移表中指针的非关联化。每个函数调用都通过过程链接表在 pc 相对地址模式中生成。
3.4.85 &PIC
使用 32 位地址编译与位置无关的代码。
在 SPARC 上,&PIC 与 -xcode=pic32 等效。有关与位置无关的代码的更多信息,请参见。
在 x86 上,&PIC 与 &pic 等效。
3.4.86 &Qoption
将子选项列表 ls 传递到编译阶段 pr。
必须使用空格来分隔 Qoption、pr 和 ls。Q 可以是大写的,也可以是小写的。该列表是一个逗号分隔的子选项列表,其中不包含空格。每个子选项都必须适合于该程序阶段,而且可以以负号开头。
提供此选项主要是为了供支持人员调试编译器的内部。使用 LD_OPTIONS 环境变量可以将选项传递给链接程序。请参见《Fortran 编程指南》中有关链接和库的章节。
3.4.87 &qp
与 -p 等效。
3.4.88 &R ls
将动态库搜索路径生成到可执行文件中。
如果使用此选项,则链接程序 ld(1) 将动态库搜索路径列表存储到可执行文件中。
ls 是一个用冒号分隔的库搜索路径目录列表。-R 和 ls 之间的空格是可选的。
此选项的多个实例并置在一起,各个列表由冒号分隔。
该列表由运行时链接程序 ld.so 在运行时使用。在运行时,将扫描所列出路径中的动态库以满足任何未解析的引用。
使用此选项,用户可以在不使用特殊路径选项查找所需动态库的情况下运行现有的可执行文件。
使用 -Rpaths 生成可执行文件,可将目录路径添加到缺省路径 /opt/SUNWspro/lib(始终最后搜索它)。
有关更多信息,请参见《Fortran 编程指南》的&库&一章以及 Solaris《链接程序和库指南》。
3.4.89 &r8const
将单精度常量提升为 REAL*8 常量。
所有单精度 REAL 常量都将提升为 REAL*8 常量。双精度 (REAL*8) 常量保持不变。此选项仅适用于常数。要同时提升常量和变量,请参见。
请小心使用此选项标志。当使用已提升为 REAL*8 常量的 REAL*4 常量调用需要 REAL*4 参数的子例程或函数时,此选项标志可能会导致接口问题。此选项标志还可能导致那些读取无格式数据文件的程序出现问题,这些文件是由无格式写入功能使用 I/O 列表上的 REAL*4 常量写入的。
3.4.90 &reduction
识别循环中的约简操作。
在自动并行化期间分析循环以了解约简操作。约简操作可能存在舍入误差。
约简操作将数组元素累加为单个标量值。例如,对向量元素求和是典型的约简操作。虽然这些操作违反了可并行化标准,但是编译器可以识别它们,并在指定了 -reduction 时作为特殊情况对它们进行并行化。有关编译器可识别的约简操作的信息,请参见《Fortran 编程指南》的&并行化&一章。
此选项只能与自动并行化选项 -autopar 或 -parallel 一起使用。否则,它将被忽略。对于约简操作,不分析显式并行化的循环。
示例:使用约简操作自动进行并行化:
demo% f95 -parallel -reduction any.f
编译并仅生成汇编代码。
编译指定的程序,并在后缀为 .s 的相应文件中保留汇编语言输出,而不创建 .o 文件。
将符号表与可执行文件分离。
此选项使可执行文件变得更小,并使逆向工程的实施更困难。但是,此选项禁止使用 dbx 或其他工具进行调试,而且覆盖 -g。
3.4.93 &sb
(已过时)为源代码浏览器生成表信息。
注 & 不能在编译器通过 fpp 或 cpp 预处理程序自动传递的源文件(即扩展名为
.F、.F90、.F95 或 .F03 的文件)上使用 -sb,也不能将 -sb 与 -F 选项一起使用。
3.4.94 &sbfast
(已过时)仅生成源代码浏览器表。
仅为源代码浏览器生成表信息。不汇编、链接或生成目标文件。
注 & 不能在编译器通过 fpp 或 cpp 预处理程序自动传递的源文件(即扩展名为 .F、.F90、.F95 或 .F03 的文件)上使用 -sbfast,也不能将 -sbfast 与 -F 选项一起使用。
3.4.95 &silent
(已过时)禁止编译器消息。
通常,f95 编译器在编译过程中不发出除错误诊断之外的消息。提供此选项标志是为了与传统的 f77 编译器兼容;除非与 -f77 兼容性标志一起使用,否则使用它是多余的。
3.4.96 &stackvar
尽可能在栈上分配局部变量。
此选项使编写递归代码和可重入代码更容易,并在并行化循环时为优化器提供更多自由。
建议将 -stackvar 与任何并行化选项一起使用。
局部变量是除哑元、COMMON 变量、从外部作用域继承的变量或可通过 USE 语句访问的模块变量之外的变量。
在 -stackvar 有效的情况下,局部变量是在栈上分配的,除非它们具有属性 SAVE 或 STATIC。请注意,显式初始化的变量是使用 SAVE 属性隐式声明的。缺省情况下,未显式初始化但其某些组件已初始化的结构变量,没有使用 SAVE 隐式声明。此外,与具有 SAVE 或 STATIC 属性的变量等效的变量,也隐式具有 SAVE 或 STATIC。
以静态方式分配的变量隐式初始化为零,除非程序为其显式指定了初始值。在栈上分配的变量并未隐式初始化(缺省情况下可进行初始化的结构变量的组件除外)。
使用 -stackvar 将大数组放在栈上可以使栈溢出,从而导致段故障。此时可能需要增加栈大小。
执行程序的初始线程有一个主栈,而多线程程序的每个帮助器线程都有自己的线程栈。
主栈的缺省大小约为 8 兆字节。线程栈在 32 位系统上缺省大小为 4 兆字节,在 64 位系统上缺省大小为 8 兆字节。limit 命令(不带参数)可显示当前的主栈大小。如果使用 -stackvar 时出现段故障,请尝试增加主栈和线程栈的大小。
示例:显示当前的主栈大小:
demo% limit
523256 kbytes
8192 kbytes
coredumpsize
descriptors
memorysize
示例:将主栈大小设置为 64 兆字节:
demo% limit stacksize 65536
示例:将每个线程栈大小设置为 8 兆字节:
demo% setenv STACKSIZE 8192
通过为 STACKSIZE 环境变量指定值(单位为千字节),可以设置每个从线程使用的栈大小:
% setenv STACKSIZE
将每个从线程的栈大小设置为 8 MB。
STACKSIZE 环境变量还接受带有 B(字节)、K(千字节)、M(兆字节)或 G(千兆字节)后缀的数值。缺省单位为千字节。
有关与并行化一起使用 -stackvar 的详细信息,请参见《Fortran 编程指南》的&并行化&一章。有关 limit 命令的详细信息,请参见 csh(1)。
使用 -xcheck=stkovf 进行编译,可启用栈溢出情况的运行时检查。请参见。
3.4.97 &stop_status[ ={yes|no}]
允许 STOP 语句返回整数状态值。
缺省值为 -stop_status=no。
如果使用 -stop_status=yes,则 STOP 语句可以包含整型常量。在程序终止时,该值将传递到环境:
该值必须介于 0 和 255 之间。大于 255 的值将被截断并发出运行时消息。请注意,尽管将发出编译器警告消息,但是仍将接受
STOP "stop string"
并将状态值 0 返回到环境。
环境状态变量是 $status(对于 C shell csh)和 $?(对于
Bourne shell sh 和 Korn shell ksh)。
3.4.98 &temp= dir
为临时文件定义目录。
将编译器所用临时文件的目录设置为 dir。在此选项字符串中不允许有空格。如果不使用此选项,则将这些文件放在 /tmp 目录中。
3.4.99 &time
每个编译阶段所用时间。
将显示每个编译过程所用的时间和资源。
3.4.100 &U
识别源文件中的大写字母和小写字母。
不将大写字母视为与小写字母等效。缺省情况下,将大写字母视为小写字母(字符串常量中的字母除外)。如果使用此选项,编译器会将 Delta、DELTA 和 delta 视为不同的符号。此选项不会影响对内函数的调用。
可移植性以及将 Fortran 与其他语言混合使用可能要求使用 -U。请参见《Fortran 编程指南》中有关将程序移植到 Fortran 95 的一章。
3.4.101 -Uname
取消预处理程序宏 name 的定义。
此选项仅适用于那些调用 fpp 或 cpp 预处理程序的源文件。它会删除同一命令行上由 -Dname 创建的预处理程序宏 name 的任何初始定义,包括由命令行驱动程序隐式放在此处的那些内容,而不管选项出现的顺序如何。它对源文件中的任何宏定义都没有影响。在命令行上可以出现多个 -Uname 标志。-U 和宏 name 之间不得有空格。
3.4.102 &u
报告未声明的变量。
使所有变量的缺省类型都成为未声明的,而不是使用 Fortran 隐式确定类型,就好像 IMPLICIT NONE 出现在每个编译单元中一样。此选项警告存在未声明的变量,并且不覆盖任何 IMPLICIT 语句或显式 type 语句。
3.4.103 &unroll= n
启用 DO 循环的解开(如果可能)。
n 是正整数。选项有:
n=1 禁止解开所有循环。
n&1 建议优化器尝试解开循环 n 次。
通常,解开循环可提高性能,但会增加可执行文件的大小。有关此编译器及其他编译器优化的更多信息,请参见《Fortran 编程指南》的&性能与优化&一章。另请参见。
3.4.104 &use= list
指定隐式 USE 模块。
list 是模块名称或模块文件名称的逗号分隔列表。
使用 -use=module_name 进行编译,可将 USE module_name 语句添加到正编译的每个子程序或模块中。使用 -use=module_file_name 进行编译,可为包含在指定文件中的每个模块添加 USE module_name。
有关 Fortran 95 中模块的更多信息,请参见。
3.4.105 &V
显示每个编译过程的名称和版本。
此选项在编译器执行时打印每个工作循环的名称和版本。
在与 Sun 服务工程师讨论问题时,此信息可能非常有用。
3.4.106 &v
详细模式-显示每个编译过程的详细信息。
与 -V 一样,此选项在编译器执行时显示每个工作循环的名称,以及驱动程序使用的选项、宏标志扩展和环境变量的详细信息。
3.4.107 -vax=keywords
指定启用 VAX VMS Fortran 扩展的选择。
keywords 说明符必须是以下子选项之一或从中选择的子选项的逗号分隔列表。
blank_zero
在内部文件上将格式化输入中的空格解释为零。&
将以字符 'D' 开头的行解释为正规 Fortran 语句,而不是像 VMS Fortran 中那样解释为注释。&
将无格式的记录大小解释为以字为单位,而不是解释为以字节为单位。&
struct_align
内存中 VAX 结构的布局组件,与 VMS Fortran 中一样,没有填充。注意:这会导致数据无法对齐,为避免此类错误,应与 &xmemalign 一同使用。
启用所有这些 VAX VMS 功能。&
禁用所有这些 VAX VMS 功能。&
通过在子选项前面加上 no%,可以单独选择或关闭该子选项。
-vax=debug,rsize,no%blank_zero
3.4.108 &vpara
显示详细的并行化消息。
在编译器对那些用指令显式标记为并行化的循环进行分析时,它发出有关所检测到的某些数据依赖性的警告消息;但是仍将对循环进行并行化。
示例:冗余并行化警告:
demo% f95 -explicitpar -vpara any.f
"any.f", line 11: Warning: the loop may have parallelization inhibiting reference
请与 -xopenmp 和 OpenMP API 指令一起使用,或者与 -explicitpar 和 C$MIC DOALL 传统并行化指令一起使用。
由编译器发出的警告检测到下列情形:
OpenMP 数据共享属性子句使用不当。例如,将变量声明为共享,而在 OpenMP 并行区域中访问该变量会导致数据争用;或者将变量声明为私有,但在并行区域后面使用其在并行区域中的值。
C$MIC DOALL 对在不同循环迭代之间具有数据依赖性的循环进行并行化。
如果在处理所有并行化指令时没有出现任何问题,则不显示警告。
注 & Sun Studio 编译器支持 OpenMP API 并行化模型。因此,C$MIC 并行化指令已过时。有关迁移到 OpenMP API 的信息,请参见《OpenMP API 用户指南》。
3.4.109 &w[n]
显示或禁止警告消息。
此选项显示或禁止大多数警告消息。但是,如果一个选项覆盖命令行上先前选项的全部或部分,您确实会收到一条警告消息。
n 可以是 0、1、2、3 或 4。
-w0 仅显示错误消息。它等效于 -w。-w1 显示错误和警告。在不使用 -w 的情况下,这是缺省值。-w2 显示错误、警告和注意。-w3 显示错误、警告、注意和说明。-w4 显示错误、警告、注意、说明和注释。
示例:-w 仍然允许显示某些警告:
demo% f95 -w -parallel any.f
f95: Warning: Optimizer level changed from 0 to 3 to support parallelized code
3.4.110 &Xlist[ x]
生成列表并进行全局程序检查 (global program checking, GPC)。
使用此选项可查找潜在的编程错误。它调用额外的编译过程,以便在全局程序中检查子程序调用参数、通用块和参数的一致性。此选项还生成带行号的源代码列表,包括交叉引用表。由 -Xlist 选项发出的错误消息是建议性警告,不会阻止程序的编译和链接。
注 & 请确保在使用 -Xlist 进行编译之前,更正源代码中的所有语法错误。如果运行有语法错误的源代码,可能会产生不可预知的报告。
示例:检查例程之间的一致性:
demo% f95 -Xlist
上述示例将以下内容写入输出文件 fil.lst:
带行号的源代码列表(缺省)
有关例程间不一致性的错误消息(嵌入在列表中)
标识符的交叉引用表(缺省)
缺省情况下,将列表写入文件 name.lst,其中 name 采用命令行上列出的第一个源文件。
许多子选项为操作选择提供了更多灵活性。它们是由 -Xlist 主选项的后缀指定的,如下表所示:
&Xlist 子选项
显示错误、列表和交叉引用表&
显示调用图和错误&
&Xlisterr[nnn]
禁止错误 nnn 消息
显示错误、列表和交叉引用,但不显示目标文件&
如果检测到错误,则终止编译&
分析 #include 和 INCLUDE 文件以及源文件
仅显示列表和错误&
将页面长度设置为 n 行
检查 OpenMP 指令 (SPARC)
&Xlisto name
将报告文件输出到 name,而不是 file.lst
禁止来自交叉引用表的未引用名称&
将检查级别设置为 n(1、2、3 或 4)-缺省值为 2
&Xlistw[nnn]
将输出行的宽度设置为 nnn 列-缺省值为 79
&Xlistwar[nnn]
禁止警告 nnn 消息
显示交叉引用表和错误&
有关详细信息,请参见《Fortran 编程指南》的&程序分析和调试&一章。
3.4.111 &xa
与 -a 等效。
3.4.112 &xalias[= keywords]
指定要由编译器假定的别名程度。
一些非标准编程方法会产生干扰编译器优化策略的情况。使用过度索引、指针以及将全局或非唯一变量作为子程序参数进行传递,会产生歧义别名情况,从而使代码无法按预期方式运行。
使用 -xalias 标志可将程序偏离 Fortran 标准的别名要求的程度通知给编译器。
此标志可能带有关键字列表,也可能不带关键字列表。keywords 列表由逗号分隔,各个关键字指示程序中存在的别名情况。
可以在每个关键字前面加上 no%,以指示不存在的别名类型。
别名关键字如下:
-xalias 选项关键字
子程序的哑元(形式参数)可以互为别名,也可以作为全局变量的别名。&
(缺省值)。哑元的使用遵循 Fortran 标准,它们不能互为别名,也不能作为全局变量的别名。&
craypointer
(缺省值)。Cray 指针可以指向任何全局变量或 LOC() 函数采用其地址的局部变量。此外,两个 Cray 指针可能指向同一数据。这是可以禁止某些优化的安全假定。
no%craypointer
Cray 指针仅指向唯一内存地址,如从 malloc() 获得的地址。此外,没有两个 Cray 指针是指向同一数据的。此假定允许编译器优化 Cray 指针引用。
编译器将子程序的实际参数视为全局变量。将参数传递给子程序可能会导致通过 Cray 指针命名别名。&
(缺省值)传递参数不会导致进一步命名别名。&
对 COMMON 块中元素的引用可能引用 COMMON 块或等效组中的任何元素。
如果将 COMMON 块或等效组中的任何元素作为实际参数传递给子程序,被调用的子程序就可以访问该 COMMON 块或等效组中的任何元素。
将序列派生类型的变量视为 COMMON 块,此类变量的元素可以作为该变量其他元素的别名。
可能违反了各数组边界,但除上文所述外,假定引用的数组元素仍然在数组内。过度索引并未考虑数组语法、WHERE 和 FORALL 语句等因素。如果在这些构造中出现过度索引,应将它们重写为 DO 循环。
no%overindex
(缺省值)没有违反数组边界。数组引用没有引用其他变量。&
ftnpointer
对外部函数的调用可能使 Fortran 指针指向任何类型、种类或等级的目标变量。&
no%ftnpointer
(缺省值)Fortran 指针遵循标准中的规则。&
指定不带列表的 -xalias 将为不违反 Fortran 别名规则的大多数程序提供最佳性能,不带列表的 -xalias 等效于:
no%dummy,no%craypointer,no%actual,no%overindex,no%ftnpointer
为了提高效率,在使用优化级别 -xO3 及更高级别进行编译时,应该使用 -xalias。
如果未指定 -xalias 标志,则编译器在缺省情况下假定程序符合 Fortran 95 标准(Cray 指针除外):
no%dummy,craypointer,no%actual,no%overindex,no%ftnpointer
有关各种别名情况的示例以及如何使用 -xalias 指定它们,请参见《Fortran 编程指南》的&移植&一章。
3.4.113 &xarch=isa
指定指令集体系结构 (instruction set architecture, ISA)。
-xarch 关键字 isa 接受的体系结构如 所示:
&xarch ISA 关键字
有效的 -xarch 关键字
generic、generic64、native、native64、sparc、sparcvis、sparcvis2、sparcfmaf、v9、v9a 和 v9b
generic、native、386、pentium_pro、sse、sse2、amd64、pentium_proa、ssea、sse2a、amd64a、sse3
请注意,尽管 -xarch 可以单独使用,但它是 &xtarget 选项扩展的一部分,并且可用于覆盖由特定 -xtarget 选项设置的 -xarch 值。例如:
% f95 -xtarget=ultra2 -xarch=sparcfmaf ...
会覆盖由 -xtarget=ultra2 设置的 -xarch。
通过只允许指定的指令集,此选项可将编译器生成的代码限定于指定指令集体系结构的指令。此选项不保证使用任何特定于目标的指令。
如果此选项与优化一起使用,则在指定的体系结构上,适当的选择可以为可执行文件提供良好性能。如果选择不当,则会导致二进制程序在预定的目标平台上无法执行。
请注意以下事项:
传统的 32 位 SPARC 指令集体系结构 V7 和 V8 指 &m32,并且无法与 &m64 组合。
可以链接使用 sparc 和 sparcvis 编译的目标二进制文件 (.o),并可同时执行它们,但只能在 sparcvis 兼容的平台上运行。
可以链接使用 sparc、sparcvis 和 sparcvis2 编译的目标二进制文件 (.o),并可同时执行它们,但只能在 sparcvis2 兼容的平台上运行。
对于任何特定选择,生成的可执行文件在早期体系结构中运行时都会慢得多。此外,虽然在多数指令集体系结构中都可以使用四精度(REAL*16 和 long double)浮点指令,但编译器不在它生成的代码中使用这些指令。
在 SPARC 平台上,未指定 -xarch 时的缺省值为 sparc;在 x86 平台上,则为 386。
提供了有关 SPARC 平台上每个 -xarch 关键字的详细信息。
SPARC 平台的 -xarch 值
含义 (SPARC)&
使用大多数处理器通用的指令集进行编译。
针对大多数的 64 位平台进行编译。
(仅适用于 Solaris)此选项与 -m64 -xarch=generic 等效,并与早先的发行版兼容。使用 -m64(而非 -xarch=generic64)指定 64 位编译
为了在此系统上获得良好性能而进行编译。
编译器为运行它的当前系统处理器选择适当的设置。这是 -fast 选项的缺省值。
为了在此系统上获得 64 位模式下的良好性能而进行编译。
(仅适用于 Solaris)此选项与 -m64 -xarch=native 等效,并与早先的发行版兼容。
针对 SPARC&V9 ISA 进行编译。
针对 V9 ISA 进行编译,但不具}

我要回帖

更多关于 c语言 static函数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信