可以由 f95 或 f90 命令调用;它们是 等效的。
f95 [ -aligncommon[=a] ] [ -ansi ] [ -arg=local ] [ -autopar ] [ -Bx ] [ -C ] [ -c ] [ -copyargs ] [ -Dnm[=def] ] [ -dalign ] [ -dbl_align_all[={yes|no}] ] [ -depend[={yes|no}] ] [ -dryrun ] [ -d{y|n} ] [ -e ] [ -erroff[=taglist] ] [ -errtags[={yes|no}] ] [ -errwarn[=taglist] ] [ -ext_names=e ] [ -F ] [ -f ] [ -f77[=list] ] [ -fast ] [ -fixed ] [ -flags ] [ -fma={none|fused} ] [ -fnonstd ] [ -fns[={yes|no}] ] [ -fpover[={yes|no}] ] [ -fpp ] [ -fopenmp ] [ -fprecision=p ] [ -free ] [ -fround=r ] [ -fserialio ] [ -fsimple[=n] ] [ -fstore ] [ -ftrap=t ] [ -G ] [ -g ] [ -g[n] ] [ -hnm ] [ -help ] [ -Ipath ] [ -inline=rl ] [ -iorounding[=r] ] [ -keepmod[={yes|no}] ] [ -keeptmp ] [ -KPIC ] [ -Kpic ] [ -Lpath ] [ -lx ] [ -libmil ] [ -library=sunperf ] [ -loopinfo ] [ -Mpath ] [ -m32|-m64 ] [ -moddir=path ] [ -mt ] [ -native ] [ -noautopar ] [ -nodepend ] [ -nofstore ] [ -nolib ] [ -nolibmil ] [ -noreduction ] [ -norunpath ] [ -O[n] ] [ -o nm ] [ -onetrip ] [ -openmp[=a] ] [ -PIC ] [ -p ] [ -pad[=a] ] [ -pg ] [ -pic ] [ -preserve_argvalues[=int|none] ] [ -Qoption pr ls ] [ -qp ] [ -R list ] [ -r8const ] [ -recl=a[,b] ] [ -reduction ] [ -S ] [ -s ] [ -silent ] [ -stackvar ] [ -stop_status={yes|no} ] [ -temp=path ] [ -time ] [ -traceback[=list] ] [ -U ] [ -Uname ] [ -u ] [ -unroll=n ] [ -use=list ] [ -V ] [ -v ] [ -vax=v ] [ -vpara ] [ -Wc,arg ] [ -w[n] ] [ -Xlinker arg ] [ -Xlist[z] ] [ -xaddr32[={no|yes}] ] [ -xalias[=a[,a]...] ] [ -xannotate[={yes|no}] ] [ -xarch=a ] [ -xassume_control[=a[,a]...] ] [ -xautopar ] [ -xbinopt={prepare|off} ] [ -xcache=c ] [ -xcheck=n ] [ -xchip=c ] [ -xcode=v ] [ -xcommonchk[={no|yes}] ] [ -xdebugformat={stabs|dwarf} ] [ -xdebuginfo=a[,a...] ] [ -xdepend ] [ -xdryrun ] [ -xF ] [ -xfilebyteorder=options ] [ -xglobalize[={yes|no}] ] [ -xhasc[={yes|no}] ] [ -xhelp=h ] [ -xhwcprof[=e] ] [ -xia[=i] ] [ -xinline=rl ] [ -xinline_param=a[,a[,a]...] ] [ -xinline_report[=n] ] [ -xinstrument=d ] [ -xinterval=i ] [ -xipo[=n] ] [ -xipo_archive=a ] [ -xipo_build=[yes|no] ] [ -xivdep[=p] ] [ -xjobs=[n|auto] ] [ -xkeep_unref[={[no%]funcs, [no%]vars}] ] [ -xkeepframe[=p] ] [ -xknown_lib=lib ] [ -xl ] [ -xld ] [ -xlang=f77 ] [ -xlibmil ] [ -xlibmopt ] [ -xlicinfo ] [ -xlinkopt[=level] ] [ -xloopinfo ] [ -xM ] [ -xmaxopt[=n] ] [ -xmemalign[=ab] ] [ -xmodel=[a] ] [ -xnolib ] [ -xnolibmil ] [ -xnolibmopt ] [ -xO[n] ] [ -xopenmp[=a] ] [ -xpad[=a] ] [ -xpagesize=n ] [ -xpagesize_heap=n ] [ -xpagesize_stack=n ] [ -xpatchpadding[={fix|patch|size}] ] [ -xpec[={yes|no}] ] [ -xpg ] [ -xpp=p ] [ -xprefetch=a[,a]] [ -xprefetch_auto_type=[no%]indirect_array_access ] [ -xprefetch_level=n ] [ -xprofile=p ] [ -xprofile_ircache=path ] [ -xrecursive ] [ -xreduction ] [ -xregs=r ] [ -xs[={yes|no}] ] [ -xsafe=mem ] [-xsegment_align=n] [ -xspace ] [ -xtarget=t ] [ -xtemp=path ] [ -xthroughput[={yes|no}] ] [ -xtime ] [ -xtypemap=spec ] [ -xunboundsym={yes|no} ] [ -xunroll=n ] [ -xvector[={v}] ] [ -xvpara ] [ -ztext ] source file(s) ... [ -lx ]
Oracle Solaris Studio 12.4 Fortran 95 编译器,版本 8.6。
f95 编译器接受符合标准的 Fortran 95 源代码程序。它也接受一些 Fortran 2003 功能、区间运算的扩展和 OpenMP[tm] Fortran 95 API 版本 3.1。它还接受 -f77 兼容性选项下的许多 FORTRAN 77 (f77) 语言扩展以及 VAX VMS Fortran 扩展 (-vax)。
Fortran 95 编译器 f95 的版本 8.6 作为 Oracle Solaris Studio 12.4 的组件发行,可用于 SPARC 和 x86 平台以及 Linux x86 平台上的 Oracle Solaris 操作系统 (Oracle Solaris OS)。
有关系统环境和版本的完整列表,请参见《Oracle Solaris Studio 12.4 Release Notes》。
Oracle 技术网 (Oracle Technical Network, OTN) Solaris Studio Web 站点上提供了本发行版的完整文档:
http://oracle.com/technetwork/server-storage/solarisstudio
OTN Web 站点提供了有关 Oracle Solaris Studio 的完整资源,包括许多技术文章,这些文章详细介绍了最佳实践,并深入探究了各种编程技术和其他主题。
有关 Oracle Solaris Studio 套件中所有新增特性和功能的完整描述,请参见本发行版新增功能指南。
根据定义,手册页是指快速参考。有关使用 f95 编译器及其选项的更多详细信息,请参见 Fortran 用户指南和 Fortran 编程指南。
有关如何使用 f95 编译器的完整详细信息,请参见 Fortran 用户指南。该用户指南详细说明了 f95 接受的所有选项、pragma 指令和环境变量,并介绍了标准 Fortran 95 编译器与本 Fortran 95 编译器之间的所有区别。
有关程序性能和优化、并行化以及从其他 Fortran 平台移植的信息,请参见 Fortran 编程指南。
本手册页结尾显示了相关 Oracle Solaris Studio 文档的列表。
分别使用 -m32 和 -m64 选项指定目标编译的内存模型 ILP32 或 LP64。
-xarch 选项不再承载隐式内存模型定义,只能用于指定目标处理器的指令集。
ILP32 模型指定 C 语言 int、long 和 pointer 数据类型均为 32 位。LP64 模型指定 long 和 pointer 数据类型均为 64 位。Oracle Solaris 和 Linux OS 还支持 LP64 内存模型下的大型文件和大型数组。
如果使用 -m64 进行编译,则生成的可执行文件仅能在运行 64 位内核的 Oracle Solaris OS 或 Linux OS 下的 64 位 SPARC 或 x86 处理器上运行。64 位对象的编译、链接和执行只能在支持 64 位执行的 Oracle Solaris 或 Linux OS 上进行。
针对 x86 Oracle Solaris 平台进行编译时,要注意一些重要问题。
在 -xarch 设置为 sse、sse2、sse2a 或 sse3 以及更高级别的情况下编译的程序必须仅在提供这些扩展和功能的平台上运行。
在本发行版中,-xarch=generic 的缺省指令集和含义已更改为 sse2。现在,如果在不指定目标平台选项的情况下进行编译,会导致 sse2 二进制与早期的 Pentium III 或早期的系统不兼容。
如果在不同的步骤中进行编译和链接,请始终使用编译器和相同的 -xarch 设置进行链接,以确保链接正确的启动例程。
-xarch=pentium_pro 或 -xarch=sse 的数值结果可能与在 SPARC 上得到的结果不同,这是由 x86 80 位浮点寄存器造成的。为了最大限度减少这些差异,请使用 -fstore 选项或使用缺省 -xarch=sse2 进行编译。
因为内部数学库(例如,sin(x))不同,所以 Oracle Solaris 和 Linux 之间的数值结果也会不同。
二进制兼容性验证使用专门的 -xarch 硬件标志编译和生成的程序二进制文件经验证可在适当的平台上运行。如果在没有相应功能或指令集扩展的平台上运行使用专门的 -xarch 选项编译的程序,则可能会导致段故障或不正确的结果,并且不显示任何显式警告消息。
但是,在 Linux 上,没有此类验证检查。在早期的硬件平台上运行由 Oracle Solaris Studio 编译器编译的二进制对象会导致运行时故障;在 Linux 上,用户负责在适当的硬件平台上部署这些二进制文件。
如果程序中采用的 .il 内联汇编语言函数或 __asm() 汇编程序代码使用了 SSE、SSE2、SSE2a、SSE3 以及更高版本的指令和扩展,则此警告也适用于这类程序。
通过缺省编译器选项文件,用户可以指定一组应用于所有编译的缺省选项,除非另行覆盖。例如,该文件可以指定所有编译的缺省级别为 -xO2,或自动包括文件 setup.il。
启动时,编译器会搜索缺省选项文件,并列出应对所有编译包含的缺省选项。环境变量 SPRO_DEFAULTS_PATH 指定要在其中搜索缺省文件的目录的冒号分隔列表。
如果该环境变量未设置,则会使用一组标准缺省设置。如果该环境变量已设置但为空,则不会使用任何缺省设置。
缺省文件名的格式必须为 compiler.defaults,其中 compiler 是以下项之一:cc、c89、c99、CC、ftn 或 lint。例如,用于 Fortran 编译器的缺省文件为 ftn.defaults。
如果在 SPRO_DEFAULTS_PATH 列出的目录中找到编译器的缺省文件,编译器将读取该文件并在命令行上处理各选项之前先处理这些选项。系统将使用找到的第一个缺省文件,并且会终止搜索。
系统管理员可能会在 Studio-install-path/prod/etc/config 中创建适用于整个系统范围的缺省文件。如果设置了该环境变量,则不会读取已安装的缺省文件。
缺省文件的格式与命令行类似。该文件的每一行都可以包含一个或多个由空格分隔的编译器选项。Shell 扩展(例如通配符和替换)将不会应用于缺省文件中的选项。
SPRO_DEFAULTS_PATH 的值和完全扩展的命令行将显示在由选项 -#、-### 和 -dryrun 生成的详细输出中。
用户在命令行上指定的选项通常会优先于从缺省文件读取的选项。例如,如果缺省文件指定使用 -xO4 进行编译,而用户在命令行上指定了 -xO2,则将使用 -xO2 进行编译。
缺省选项文件中显示的某些选项将附加在命令行中指定的选项之后。这些选项包括预处理程序选项 -I,链接程序选项 -B、-L、-R 和 -l,以及所有文件参数(例如:源文件、对象文件、归档文件和共享对象)。
以下是如何使用用户提供的缺省编译器选项启动文件的示例。
demo% cat /project/defaults/ftn.defaults -fast -I/project/src/hdrs -L/project/libs -llibproj -xvpara demo% setenv SPRO_DEFAULTS_PATH /project/defaults demo% f95 -c -I/local/hdrs -L/local/libs -lliblocal tst.f
编译器命令现在等效于:
f95 -fast -xvpara -c -I/local/hdrs -L/local/libs -lliblocal \ tst.f -I/project/src/hdrs -L/project/libs -llibproj
尽管编译器缺省文件提供了可为整个项目设置缺省值的便利方法,但它也可能成为问题难以诊断的原因。将环境变量SPRO_DEFAULTS_PATH设置为当前目录以外的绝对路径可避免出现此类问题。
缺省选项文件的接口稳定性未确定。选项处理顺序在以后的发行版中可能会更改。
仅在 SPARC 平台上有效的选项标有 (SPARC)。
仅在 x86/x64 平台上有效的选项标有 (x86)。
过时的选项标记为 (Obsolete)(已过时),以后不应再使用。提供它们只是为了与早期发行版兼容。请使用指定的替代选项。
有关链接程序选项,请参见 ld(1)。
f95“在无提示的情况下”编译。除错误和警告消息外,它不会在编译期间发出“进度”消息。
通常,按从左向右的顺序处理编译器选项,允许选择性地覆盖宏选项。此规则不适用于链接程序或预处理程序选项。
在命令行选项语法中,方括号 ([]) 中显示的项目是可选的。花括号括起要选择的文字项目的竖线分隔列表,如 {yes | no | maybe} 中所示。当显示的标志不带值时,列表中的第一项通常表示缺省值。
例如,-someoption[={no|yes}] 意味着 -someoption 与 -someoption=no 相同。
支持以下选项:
指定 common 块和标准数值序列类型中数据的对齐。
该指定值指示 common 块和标准数值序列类型中数据元素的最大对齐(字节)。例如,-aligncommon=4 会将自然对齐方式为 4 字节或大于 4 字节的 common 块数据元素与 4 字节边界对齐。该选项不影响自然对齐方式小于指定大小的数据。
未指定 -aligncommon 时的缺省设置将按最多 4 字节边界对齐 common 块和标准数值序列数据。
如果指定不带值的 -aligncommon,则在所有平台上缺省值都为 1:所有数据都按字节边界对齐(元素之间无填充)。
针对未启用 64 位的平台进行编译时,-aligncommon=16 恢复为 -aligncommon=8。
如果在 SPARC 平台上使用 -aligncommon=1,可能会因未对齐而导致总线错误,需要使用适当的 -xmemalign 选项值。根据具体的应用程序,-xmemalign=1s、-xmemalign=4i 或 -xmemalign=8i 会在避免段故障的同时提供最佳性能。
另请参见:-xmemalign
标识非标准扩展。
通过ENTRY语句保留实际参数。
在使用此选项编译具有替换入口点的子程序时,f95 将使用 copy restore 保留哑元参数和实际参数之间的关联。
提供此选项的目的是与传统的 Fortran 77 程序兼容。依赖此选项的代码是非标准的。
启用自动循环并行化
查找并并行化相应的循环。执行依赖性分析(对循环进行数据依赖性分析)。执行循环重构。如果优化级别不是 -O3 或更高级别,会将其提升到 -O3。
使用任何并行化选项时,也要指定 -stackvar 选项。当使用 -autopar 时,-stackvar 选项可提供更好的性能,因为它可允许优化器为并行检测其他机会。有关如何为主线程堆栈和从线程堆栈设置大小的信息,请参见 -stackvar 选项描述。
如果要进行自己的线程管理,请勿使用 -autopar。请参见 -mt 下的备注。
此外,-autopar 在单处理器系统上不适用,会降低性能。
有关更多信息,请参见 Fortran 编程指南中的“并行化”一章。
当运行由 -xautopar 编译器选项自动并行化的程序时,请使用 OMP_NUM_THREADS 环境变量指定要使用的线程数。如果未设置 OMP_NUM_THREADS,则使用的缺省线程数为 2。要使用多个线程,请将 OMP_NUM_THREADS 设置为更大的值。将 OMP_NUM_THREADS 设置为 1,则会仅使用一个线程运行。通常,会将 OMP_NUM_THREADS 设置为运行系统上可用的虚拟处理器数,可使用 Oracle Solaris psrinfo (1M) 命令确定该值。有关更多信息,请参见 OpenMP API 用户指南。
如果使用 -autopar 并且在单步执行中进行编译和链接,则链接将自动包括微任务化库和线程安全的 Fortran 运行时库。如果使用 -autopar,而且在不同的步骤中进行编译和链接,则还必须使用 f95 -autopar 进行链接。
首选动态库链接或要求静态库链接。
此标志指明首选动态库链接或要求对命令中随后列出的任何库进行静态链接。这是一个链接程序选项。
优先使用动态链接(共享库)。
要求使用静态链接(无共享库)。
缺省值为 -Bdynamic。
如果指定了 static,但是链接程序仅找到动态库,则不链接该库,并发出警告。
不过,如果指定 -Bdynamic,但链接程序仅找到静态版本的库,则链接该库,并且不发出警告。
在命令行上,可以在 -Bdynamic 与 -Bstatic 之间切换,静态链接某些库而动态链接其他库。
由于这些是链接程序选项,因此如果在不同的步骤中执行,使用 -Bstatic 或 -Bdynamic 进行编译需要在链接程序命令中指定相同的选项。
在 64 位环境中,许多系统库只能用作共享动态库。其中包括 libm.so 和 libc.so(不提供 libm.a 和 libc.a)。因此,在 64 位 Oracle Solaris OS 中,-Bstatic 和 -dn 可能会导致产生链接错误。这些情况下应用程序必须与动态库链接。
注意:不推荐同时使用静态 Fortran 运行时系统库和动态 Fortran 运行时系统库,因为这会导致链接程序错误或无提示的数据损坏。始终保持同最新的共享动态 Fortran 运行时系统库的链接。
从数组引用中检查超出范围的子脚本和符合性。
如果数组下标超过所声明的大小,可能会导致意外结果(包括段故障)。-C 选项可以在源代码中和执行期间检查可能的数组子脚本违规。
如果指定了 -C 选项,会将运行时数组子脚本违规视为错误。编译器还会将源代码中的数组子脚本范围违规标记为警告。
使用 -C 进行编译还添加了运行时在使用数组语法的语句中检查数组符合性的操作。
该选项会增加可执行文件的大小并降低执行性能。只应在调试时使用。
针对未链接的每个源文件编译并生成 .o 文件。您可使用 -o 选项显式指定单个对象文件。当编译器生成每个 .i 或 .c 输入文件的对象代码时,始终会在当前工作目录中创建一个对象文件。如果抑制链接步骤,将会同时抑制删除对象文件。
允许为常量参数赋值。
允许子程序更改作为常量的哑元参数。提供该选项只是为了允许编译和执行传统代码而不会出现更改常量的运行时错误。
在不使用 -copyargs 的情况下,如果将常量参数传递给子例程,然后在子例程内尝试更改该常量,则运行将出现运行时错误。
在使用 -copyargs 的情况下,如果将常量参数传递给子例程,然后在子例程内更改该常量,则运行不一定出现运行时错误。
要求使用 -copyargs 标志进行编译的程序不符合 Fortran 标准。
为源代码预处理程序定义符号 name。
这等效于源代码中的 "#define" 指令。如果未指定 def,则 name 定义为 "1"。该选项仅适用于 .F .F90 .F95 .F03 后缀文件。
在相应系统中预定义了以下符号;请注意两个前导下划线:__sparc、__sparcv8、__sparcv9、__unix、__sun、__i386、__x86_64、__amd64、__SVR4、__SunOS_5_10、__SunOS_5_11。
Fortran 语法可能不支持这些符号的实际值。它们只应出现在 fpp 或 cpp 预处理程序语句中,例如条件语句:#ifdef __sparc。
对应的早期值(之前的发行版)包括:sparc、unix、sun。
这些以前预定义的值可能会在将来的发行版中删除。
f95 缺省情况下使用 fpp (1) 预处理程序。与 C 预处理程序 cpp (1) 一样,fpp 会扩展源代码宏并允许对代码进行条件编译。与 cpp 不同的是,fpp 能够识别 Fortran 语法,并作为首选的 Fortran 预处理程序。使用 -xpp=cpp 标志可以强制编译器明确使用 cpp 而非 fpp。
对齐 COMMON 块和标准数值序列类型,并生成速度更快的多字装入/存储。
此标志可更改 COMMON 块(和 EQUIVALENCE 类)中的数据布局,并使编译器能够为该数据生成速度更快的多字装入/存储。
-dalign 是一个宏,它等效于
-xmemalign=8s -aligncommon=16(在 SPARC 平台上),
-aligncommon=8(在 32 位 x86 平台上),
-aligncommon=16(在 64 位 x86 平台上)。
数据布局效果与 -f 标志的效果相同:COMMON 块和 EQUIVALENCE 类中的双精度和四精度数据在内存中根据其“自然”对齐方式(即,与 8 字节边界对齐)进行布局;如果在 64 位平台中使用 -m64 进行编译,则四精度数据与 16 字节边界对齐。缺省情况下,按 4 字节边界对齐 COMMON 块中的数据。
在 SPARC 上,如果结合使用 -dalign 和 -xtypemap=real:64,double:64,integer:64,还会导致 64 位整数变量进行双字对齐。
使用 -dalign 会导致非标准 FORTRAN 对齐,从而使 EQUIVALENCE 或 COMMON 中的变量出现问题,并且会在需要 -dalign 的情况下使程序变为不可移植。
如果使用 -dalign 编译一个子程序或文件,则必须使用 -dalign 编译该程序单元中的所有子程序和文件。
由于 -dalign 调用 -aligncommon,因此标准数值序列类型的对齐也会受影响。
-fast 标志选择 -dalign。
强制与 8 字节边界对齐数据。
如果是 yes,所有变量将与 8 字节边界对齐。缺省值为 -dbl_align_all=no。-dbl_align_all 本身等效于 -dbl_align_all=yes。
在 64 位 SPARC 环境中使用 -m64 进行编译时,此标志会使四精度数据与 16 字节边界对齐。
此标志不改变 COMMON 块或用户定义结构中的数据的布局。
如果已使用,则所有例程都必须使用此选项进行编译。
对循环进行数据依赖性和重构分析。
-depend 等效于 -depend=yes,可启用循环依赖性分析。缺省情况下,在所有平台上均启用该选项。
-depend=no 可禁用 DO 循环数据依赖性分析。
显示由 f95 驱动程序生成的命令,但不进行编译。
该选项在调试时非常有用,它显示编译器为了执行编译将运行的命令。
允许/不允许可执行文件的动态库
允许或不允许整个可执行文件的动态库。此标志是一个链接程序选项。
允许动态库。
不允许动态库。
缺省值为 -dy。
与 -B{dynamic|static} 不同,此选项适用于整个可执行文件,并且只需在命令行上出现一次。
-d{y|n} 是链接程序选项。如果使用这些选项在不同的步骤中编译和链接,则在最终链接步骤中需要相同选项。
在 64 位环境中,许多系统库只能用作共享动态库。其中包括 libm.so 和 libc.so(不提供 libm.a 和 libc.a)。因此,-Bstatic 和 -dn 会导致在 64 位 Oracle Solaris OS 平台和 32 位 Oracle Solaris x86 平台以及所有 32 位 Oracle Solaris 平台(从 Solaris 10 发行版开始)中出现链接错误。这些情况下应用程序必须与动态库链接。
将源代码行最大长度扩展到 132 个字符。
编译器会在右侧用结尾空白一直填充到第 132 列。如果在使用 -e 进行编译的同时使用续行,请勿在多行之间拆分字符常量,否则可能会在常量中插入不必要的空格。
禁止由标记名称列出的警告消息。
该选项仅影响警告消息。错误消息不受影响。taglist 指定随警告消息显示的用逗号分隔的标记名称列表。如果仅指定了 %all,将禁止所有警告(这等效于 -w 选项。)如果仅指定了 %none,将不禁止任何警告。指定不带值的 -erroff 等效于 -erroff=%all。
另请参见:-errtags
与每个警告消息一起显示消息标记。
编译器的内部错误标记名称随错误消息显示。缺省情况下不显示标记 (-errtags=no)。第二个缺省值(不带值的 -errtags)为 -errtags=yes。
将警告消息视为错误。
taglist 指定应视为错误的警告消息对应的标记名称的逗号分隔列表。如果仅指定了 %all,会将所有警告视为错误。如果仅指定 %none,则不将任何警告视为错误。
另请参见:-errtags
创建带有或不带下划线的外部名称。
e 必须是 plain、underscores 或 fsecond-underscore。
请勿使用结尾下划线。
使用结尾下划线。
在包含一个下划线的外部名称上附加两个下划线,在不包含下划线的外部名称上附加一个下划线。
缺省值为 underscores。
外部名称是子例程、函数、块数据子程序或标记通用块的名称。该选项既影响例程本身中的名称,当然也影响在调用语句中使用的名称(symdef 和 symref)。
提供 fsecond-underscore 是为了与 gfortran 兼容。
调用源文件预处理程序,但不编译
将 fpp 预处理程序应用于 .F90、.F95、.F03 和 .F 文件,并将结果放到后缀更改为 .f90、.f95、.f03 或 or .f 的文件中,但是不进行编译。
fpp 是 Fortran 的缺省预处理程序。通过指定 -xpp=cpp,可以改为选择 C 预处理程序 cpp。
对齐 COMMON 块中的双精度和四精度数据。
该标志可更改 COMMON 块(和 EQUIVALENCE 类)中的数据布局:COMMON 块和 EQUIVALENCE 类中的双精度和四精度数据将在内存中根据“自然”对齐方式布局(即,与 8 字节边界对齐);如果在 64 位环境中使用 -m64 进行编译,则四精度数据与 16 字节边界对齐。缺省情况下,按 4 字节边界对齐 COMMON 块中的数据。
-f 是一个传统选项,等效于 -aligncommon=16。首选使用 -aligncommon。
该选项适用于实际数据和复杂数据。
生成的代码可能不是标准代码,并且可能不可移植。
如果使用 -f 编译某个子程序,请使用 -f 编译该程序的所有子程序。
此选项本身并不允许编译器针对双精度和四精度数据生成速度更快的双字获取/存储指令。只有 -dalign 可执行该操作。
选择 Fortran 77 兼容性模式。
list 是从下面可能的关键字中选择的逗号分隔列表:
选择所有 f77 兼容性功能。
禁用 f77 兼容性功能。
生成 f77 样式的格式化输出,包括表式输出和名称列表输出。
接受 f77 允许的输入格式。
启用 f77 样式的制表符格式,包括无限制的源代码行长度。另外,对于长度小于 72 个字符的源代码行,将不增加空白填充。
接受反斜杠字符作为字符串中转义序列的开头。
将内部函数的识别限制为仅识别 Fortran 77 内部函数。
接受 Fortran 77 的逻辑变量使用,如:
允许将整数值赋值给逻辑变量。
允许算术表达式代替条件语句中的逻辑表达式,.NE.0 表示 .TRUE.。
允许将关系运算符 .EQ. 和 .NE. 与逻辑操作数一起使用。
允许将非整数表达式作为数组下标。
允许 Fortran 95 不支持的其他各种 Fortran 77 扩展。
对于所有关键字,通过在前面加上 no% 可禁用相应功能,如下所示:
-f77=%all,no%backslash
如果未指定 -f77,则缺省为 -f77=%none。当使用 -f77 而没有列表时,它等效于 -f77=%all。
指定 -f77 不会更改 Fortran 95 捕获模式,即 -ftrap=common。在运算异常捕获方面,Fortran 95 与 Fortran 77 编译器的行为不同,它允许在出现运算异常后继续执行。它还会使程序在退出时调用 ieee_retrospective,以报告执行期间发生的任何运算异常。在 -f77 后指定 -ftrap=%none 可恢复为模拟 Fortran 77 行为的捕获。
有关 -f77 及其提供的兼容性功能的详细信息,请参见 Fortran 用户指南中有关 FORTRAN 77 兼容性的一章。有关如何处理会导致错误结果的非标准 FORTRAN 77 编程的信息,另请参见 -xalias 标志。
为方便起见,提供了 Fortran 77 编译器脚本。f77 命令行脚本使用适合 Fortran 77 兼容性的一组选项调用 f95 编译器。有关详细信息,请参见 f77 (1) 手册页。
选择优化执行性能的选项。
-fast 可为某些应用程序提供高性能。但是,选项的特定选择可能并不适合您的应用程序。使用 -fast 是编译应用程序以获得最佳性能的良好起点。但是,仍然可能需要进行其他调整。如果用 -fast 编译时程序不能正常运行,请仔细查看组成 -fast 的各个选项,只调用那些适用于您程序的选项,使程序正常运行。
另请注意,用 -fast 编译的程序对于一些数据集可能会表现出良好的性能和精确的结果,而对于另一些数据集则不然。对于那些依赖浮点运算的特殊属性的程序,请避免用 -fast 进行编译。
-fast 会选用以下选项:
-xtarget=native 可设置硬件目标。如果程序要在不同于编译计算机的目标上运行,请在 -fast 后使用相应的 -xtarget= 选项。例如:
f95 -fast -xtarget=generic ...
-O5 可选择优化级别 5。
-libmil 可选择内联某些数学库例程。
-fsimple=2 可选择主动浮点优化。该选项可能不适合要求严格符合 IEEE 754 标准的程序。
-dalign 可选择生成速度更快的双字装入/存储指令,并按 common 块中的自然边界对齐双精度和四精度数据。使用该选项可能会生成非标准 Fortran 数据对齐。
-xlibmopt 可选择链接优化的数学库。
-depend=yes 可选择依赖性分析以更好地优化 DO 循环。(始终针对优化级别 -O3 及更高级别选择该选项。)
-fma=fused 启用自动生成浮点混合乘加指令。
-fns 可选择更快(但是非标准)处理浮点运算异常和渐进下溢。
-ftrap=common 可选择捕获常见的浮点异常(这是针对 f95 的缺省值)。
-pad=local 可选择局部填充以改进高速缓存的使用。(SPARC)
-xvector=lib 可选择向量化数学库。(SPARC)
选择 -fround=nearest,因为 -xvector 和 -xlibmopt 要求使用该选项。
-nofstore 对强制表达式具有结果精度这一行为加以取消。(x86)
在 x86 平台上,-xregs=frameptr 允许编译器将帧指针寄存器用作通用寄存器。请确保阅读 -xregs=frameptr 的介绍,特别是编译混合 C、Fortran 和 C++ 源代码时。在 -fast 之后指定 -xregs=no%frameptr,帧指针寄存器将不会作为通用寄存器使用。 (x86)
请注意,这些组件选项标志会随各个编译器发行版而发生变化。有关由 -fast 设置的选项的详细信息,请参见 Fortran 用户指南。
要在正在运行的系统上确定 -fast 的扩展,请执行命令
f95 -fast -dryrun |& grep ###
可以对此列表进行增减,方法是在 -fast 选项之后加上其他选项,如下所示:
f95 -fast -fsimple=1 -xnolibmopt
它会覆盖 -fsimple=2 标志,并禁用由 -fast 选择的 -xlibmopt。
由于 -fast 选择
-dalign -fns -fsimple=2
因此使用该选项编译的程序会导致非标准浮点运算、数据非标准对齐以及表达式求值非标准排序。对于大多数程序来说,这些选择可能是不合适的。
此外,由于 -fast 选择 -xlibmopt 和 -xvector=lib,因此使用 -fast 时假定采用且需要缺省舍入模式 -fround=nearest。
对于单独的编译和链接步骤:如果使用 -fast 进行编译,请确保使用 -fast 进行链接。
采用固定格式的源输入。
将所有源文件解释为 Fortran 95 固定格式。覆盖文件后缀。
与 -help 等效。
启用自动生成浮点混合乘加指令。-fma=none 禁用这些指令的生成。-fma=fused 允许编译器通过使用浮点混合乘加指令,尝试寻找改进代码性能的机会。
缺省值为 -fma=none。
要生成混合乘加指令,最低体系结构要求是 -xarch=sparcfmaf(对于 SPARC)和 -xarch=avx2(对于 x86)。如果生成了混合乘加指令,编译器会标记此二进制程序,以防止该程序在不支持混合乘加指令的平台上执行。如果未使用最低体系结构,则 -fma=fused 没有作用。
混合乘加指令可以免除乘法和加法之间的中间舍入步骤。因此,如果使用 -fma=fused 编译,程序可能会生成不同的结果,但精度通常会增加而不是降低。
将浮点硬件初始化为非标准首选项。
此选项是用于组合的宏
-fns -ftrap=common
可初始化浮点硬件,以便:
在出现异常时中止。
将 denormalized 数字刷新为零(if 可提高速度)。
主程序必须使用此标记进行编译才能有效。
有关非规范化数字的下溢和处理的信息,请参见 -fns。
-fnonstd 选项可为浮点溢出、除数为零和无效运算异常启用硬件陷阱。这些将转换为 SIGFPE 信号,如果程序没有 SIGFPE 处理程序,它将中止。有关更多信息,请参见 ieee_handler (3M) 、数值计算指南和Fortran 编程指南。
选择非标准浮点。
可以选择使用 =yes 或 =no,此方法使您可以切换包含 -fns 的其他某个宏标志(如 -fast)后面的 -fns 标志。
-fns 与 -fns=yes 相同。-fns=yes 选择非标准浮点。缺省值为 -fns=no,采用标准浮点模式。
-fast 会选择 -fns。
在 SPARC 平台上,非标准浮点模式会禁用“渐进下溢”,从而导致将微小的结果刷新为零,而不是生成次正规数。此外,还会导致次正规操作数在无提示的情况下替换为零。在那些不支持硬件中的渐进下溢和次正规数的 SPARC 平台上,使用此选项将显著提高某些程序的性能。
在 x86 平台上,仅针对 Pentium III 和 Pentium 4 处理器(sse 或 sse2)启用该选项。
在 x86 上,-fns 选择 SSE 刷新为零模式以及非正规数为零模式(如果可用的话)。此标志导致将次正规结果刷新为零。如果可用的话,此标志还导致将次正规操作数视为零。
此标志对使用 SSE 或 SSE2 指令集的传统 x87 浮点运算没有影响。
警告:非标准模式启用时,浮点运算可以产生不符合 IEEE 754 标准要求的结果。有关更多信息,请参见数值计算指南和 Fortran 用户指南。
只有编译主程序时该选项才有效。
检测格式化输入中的浮点溢出。
如果指定了 -fpover=yes,则 I/O 库将检测格式化输入中的浮点溢出并导致运算异常。与 -ftrap 结合使用可获得完整的诊断信息。
缺省情况下不进行此类溢出检测 (-fpover=no)。-fpover 与 -fpover=yes 等效。
强制使用 fpp 预处理输入文件。
通过 fpp 预处理程序传递在命令行上列出的所有输入源文件,而不管文件扩展名为何。(带有 .F90、.F95、.F、F03 扩展名的文件将由 fpp 自动预处理。)
另请参见:-xpp
与 -xopenmp=parallel 相同。
(x86) 初始化非缺省浮点舍入精度模式。
在 x86 上,将浮点精度模式设置为 single、double 或 extended。
当 p 为 single 或 double 时,该标志会在程序启动时将舍入精度模式分别设置为单精度或双精度。当 p 为 extended 或未使用 -fprecision 标志时,舍入精度模式将初始化为扩展精度。
该选项仅在 x86 系统上且仅在编译主程序时使用才有效,但如果针对 64 位平台 (-m64) 或启用 SSE2 的处理器 (-xarch=sse2) 进行编译,将忽略该选项。在 SPARC 平台上忽略 -fprecision。
采用自由格式的源输入。
将所有源文件解释为 Fortran 95 自由格式。覆盖文件后缀。
选择启动时有效的 IEEE 舍入模式。
r 必须是以下值之一:nearest、tozero、negative 或 positive。
缺省值为 -fround=nearest。
如果 r 为 tozero、negative 或 positive,此标志将导致程序开始执行时舍入方向模式分别设置为舍入到零、舍入到负无穷大或舍入到正无穷大。当 r 为 nearest 或未使用 -fround 标志时,舍入方向模式将保留其初始值不变(缺省为舍入到最接近的值)。
只有编译主程序时该选项才有效。
请注意,使用 -xvector 或 -xlibmopt 进行编译时需要具有缺省的舍入模式。与使用 -xvector 或 -xlibmopt(或同时使用两者)编译的库链接的程序必须确保缺省舍入生效。
指定程序不能一次在多个线程中执行 I/O 的链接选项。它允许 Fortran I/O 语句在不执行同步的情况下执行,以避免出现争用情况。此选项仅应在创建可执行程序时指定。在创建共享对象库时不应指定,在程序包含使用早于 Sun Forte 7 发行版的 Sun f77 版本编译的代码时也不应指定。
选择浮点优化首选项。
允许优化器简化关于浮点运算的假定。
如果存在 n,它必须是 0、1 或 2。
如果未指定 -fsimple,则 f95 使用 -fsimple=0。如果仅指定了 -fsimple,则 f95 使用 -fsimple=1。
不允许简化假定。保持严格的 IEEE 754 一致性。
允许适度的简化。结果代码未严格符合 IEEE 754。
在 -fsimple=1 的情况下,优化器可假定:
在进程初始化之后,IEEE 754 缺省舍入/捕获模式不发生改变。
可能会删除不生成可见结果(潜在的浮点异常除外)的计算。
使用无穷大或 NaNs 作为操作数的计算无需将 NaNs 传送到它们的结果中;例如,x*0 可以用 0 替换。
计算不依赖于零的符号。
在 -fsimple=1 的情况下,不允许优化器不考虑舍入或异常进行完全优化。特别是,在运行时舍入模式包含常量的情况下,浮点计算不能由产生不同结果的计算替换。
除 -fsimple=1 之外,还允许主动浮点优化,这会导致很多程序因舍入更改而产生不同数值结果。此外,使用 -xvector=simd 进行编译时,还允许使用 SIMD 指令计算约简。
尤其是,使用 -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。
(x86) 强制浮点表达式的精度。
对于赋值语句,该选项强制所有浮点表达式采用目标变量的精度。缺省值为 -fstore。但是,-fast 选项包括可用来禁用此选项的 -nofstore。-fast 后跟 -fstore 可以重新打开此选项。
设置浮点捕获模式。
该选项可设置在启动时生效的 IEEE 浮点捕获。
t 是一个逗号分隔列表,它包含以下项中的一个或多个:
%all、%none、common、[no%]invalid、[no%]overflow、[no%]underflow、[no%]division、[no%]inexact。
f95 的缺省值为 -ftrap=common。(请注意,对于 f77,缺省值为 -ftrap=%none。)
此选项设置在启动时有效的 IEEE 754 捕获模式,但不安装 SIGFPE 处理程序。可以使用 ieee_handler(3M) 或 fex_set_handling(3M) 启用陷阱并同时安装 SIGFPE 处理程序。如果指定多个值,则按从左到右顺序处理列表。
示例:设置除 inexact 之外的所有陷阱:
-ftrap=%all,no%inexact
其含义与 ieee_flags 函数相同:
[不] 在除以零时自陷。
[不] 在结果不精确时自陷。
[不] 在操作无效时自陷。
[不] 在溢出时自陷。
[不] 在下溢时自陷。
在所有以上内容中自陷。
不在以上任何内容中自陷。
在无效、除以零和溢出时自陷。
注意,选项的 [no%] 形式只用于修改 %all 或 common 值的含义,且必须与其中的一个值一起使用,如示例中所示。选项自身的 [no%] 形式不会显式导致禁用特定的陷阱。
必须在编译主程序时使用该选项才有效。
生成共享对象而非动态链接的可执行文件。该选项将传递给 ld,不能与 -dn 选项一起使用。
使用 -G 选项时,编译器不将任何缺省 -l 选项传递到 ld 选项。如果您要使共享库具有对另一共享库的依赖性,就必须在命令行上传递必需的 -l 选项。
如果通过指定 -G 以及其他必须在编译时和链接时指定的编译器选项来创建共享对象,请确保在与生成的共享对象链接时也指定这些选项。
创建共享对象时,针对 64 位 SPARC 体系结构编译的所有对象文件也必须使用某个显式 -xcode 值进行编译,如 -xcode 说明下所述。
请参见 -g[n]。
为了调试和性能分析而进行编译。
生成附加的符号表信息,以供使用 dbx(1) 或 Studio 调试器进行调试以及使用 Studio 性能分析器 analyzer(1) 进行分析。
虽然在不指定 -g 的情况下也可以进行一些调试,但是 dbx 的全部功能只供那些使用 -g 编译的对象使用。
要使用 Oracle Solaris Studio 性能分析器的完整功能,请使用 -g 进行编译。虽然某些性能分析功能不需要使用 -g,但必须使用 -g 进行编译,以便查看注释的源代码、部分函数级别信息以及编译器注释消息。(请参见 analyzer(1) 手册页。)
使用 -g 生成的注释性消息说明编译器在编译程序时进行的优化和变换。必须使用 er_src(1)、er_print(1) 或性能分析器 analyzer(1) 查看注释消息。
请注意,仅当编译器实际执行了优化时,才会出现注释性消息。如果请求高优化级别(如使用 -xO4 或 -fast),则更有可能看到注释性消息。
-g 作为宏实施,扩展到多个其他更原始的选项。有关扩展的详细信息,请参见 -xdebuginfo。
值:
生成标准调试信息。
不生成任何调试信息。这是缺省值。
生成文件和行号以及在事后调试期间视为至关重要的简单参数信息。
与 -g 相同。
生成附加调试信息,当前只包括宏定义信息。与仅使用 -g 相比,此附加信息会增大生成的 .o 和可执行文件中调试信息的大小。
指定生成的动态共享库的名称。
如果库具有内部名称,则每当运行可执行文件时,链接程序都必须查找具有相同内部名称的库;该文件可以在任何库搜索路径中。如果库没有内部名称,则链接程序必须查找与其生成时路径相同的库。如果具有内部名称,在运行时可实现更高的灵活性。
备注:
-h 和 nm 之间的空格是可选的。
-hnm 在没有 -G 的情况下没有任何意义。
-h 和 -o 后面的名称通常相同。
-hnm 是一个链接程序选项。
-hnm 可以简化动态库的版本。
请参见 Oracle Solaris OS《链接程序和库指南》。
列出 f95 命令行选项。
另请参见:-xhelp。
将 path 添加到包含文件搜索路径。
在包含文件搜索路径开头插入目录路径 path。在 -I 和 path 之间允许有空格。
包含文件搜索路径是从中搜索包含文件的目录列表。该搜索路径由以下几项使用:
预处理程序指令 #include
f95 语句 INCLUDE
示例:在 /usr/applib 中搜索包含文件:
f95 -I/usr/applib growth.F
要调用预处理程序,您必须使用 .F、.F90、.F95 或 .F03 后缀来编译源文件。
搜索路径还用于搜索 MODULE 文件。
使用 INCLUDE 语句搜索相对路径名(而不是绝对路径名)时使用 -Ipath。相对路径名的搜索顺序是:
包含源文件的目录
在 -I 选项中指定的目录路径
缺省编译器列表中的目录
/usr/include
(没有 -i8 选项。)
使用 -xtypemap=integer:64 可指定该编译器的 8 字节 INTEGER。
启用/禁用指定用户编写的例程的内联。
通过内联在函数和子例程逗号分隔列表中指定的用户编写的指定例程进行优化。
参数列表可包括字符串 %auto,以在优化级别 -O4 或更高级别启用自动内联。在命令行上通过 -inline 指定显式内联时,通常会关闭自动内联。
如果为列表上的例程添加名称前缀 no%,则会禁止内联该例程。
例如,要启用自动内联同时禁用特定例程 (gflub) 的内联,请使用:
-O5 -inline=%auto,no%gflub
空列表可关闭自动内联:
-fast -inline=sourcefile.f95
此处,-fast 表示 -O5,它可启用自动内联。但是,带有空列表的 -inline= 可将其禁用。
只考虑正在编译的文件中的例程。优化器决定适合内联的例程。
如果出现以下任一情况,不会内联例程且不会发出警告:
优化级别低于 -O3。
无法找到例程。
内联无益或不安全。
除非同时还指定了 -xipo,否则源代码不位于编译的文件中。
设置格式化输入/输出的舍入模式。
以全局方式为所有的格式化输入/输出设置 ROUND= 说明符。
如果使用 -iorounding=compatible,数据转换后的值是与两个最接近表示更接近的值,如果值正好在两者中间,则是离零远的值。
如果使用 -iorounding=processor-defined,则舍入模式是处理器的缺省模式。在未指定 -iorounding 时,这是缺省值。
指定不带参数的 -iorounding 等效于 -iorounding=compatible。
与 -pic 等效。
与 -PIC 等效。
如果模块文件存在且其内容未由最新编译更改,则即使编译应该创建同名的新模块文件,也不会替换该文件。由于模块文件的内容未由编译更改,因此唯一的作用是,将保留现有模块文件的时间戳。
如果未指定 -keepmod,则缺省为 -keepmod=yes。请注意,该缺省值不同于以前的 Oracle Solaris Studio Fortran 发行版。
该选项最好与 -xM 编译选项生成的依赖项一起使用。通过在模块文件内容未更改时保留其时间戳,该选项可防止对依赖于该模块文件的源文件进行级联编译。这对于增量生成非常有用,可显著缩短生成时间。
当该选项与用户指定的依赖项一起使用且用户具有关于如何创建与相应源文件存在依赖性的模块的显式生成规则时,该选项会导致重新编译多次源文件,即使源文件只因模块文件的时间戳过期修改过一次。
保留在编译期间所创建的临时文件。
将 path 添加到要在其中搜索库的目录路径的列表中。
path 将添加到搜索列表的开头。-L 和 path 之间的空格是可选的。
注意:请勿使用 -Lpath 选项指定 /usr/lib 或 /usr/ccs/lib,因为缺省情况下会搜索它们,在此处包括它们会阻止使用非绑定的 libm。
将库 libx.a 添加到链接程序的搜索库列表中。
指示加载器与对象库 libx.a 链接,其中 x 是一个字符串。请参见 ld(1)。
示例:-lsumex 在库 libsumex.a 中链接
将 -lx 选项放置在所有 .f、.F 或 .o 文件的后面。如果调用 libx 中的函数而它们引用 liby 中的函数,则将 -lx 放在 -ly 前面。
链接程序在多个位置搜索库。有关详细信息,请参见 Fortran 编程指南中的“库”一章。另请参见 ld (1) 。
内联选定的 libm 数学库例程以进行优化。
某些较简单的库例程可由编译器内联。该选项可根据当前正在使用的浮点选项和平台内联库调用。
与 Oracle Solaris Studio 提供的性能库进行链接。
显示并行化的循环。
显示哪些循环进行了并行化处理,哪些循环没有进行并行化处理。该选项通常是为了与 -autopar 选项一起使用。将在标准错误中生成消息列表。
指定 MODULE 目录、归档或文件。
在 path 中查找当前编译中引用的 Fortran 95 模块。在当前目录之外的目录中搜索此路径。
path 可以指定目录、预编译模块文件的 .a 归档文件,或 .mod 预编译模块文件。编译器通过检查文件的内容来确定其类型。
必须在 -M 选项标志上显式指定 .a 归档文件,才能在其中搜索模块。缺省情况下,编译器不搜索归档文件。
只搜索与出现在 USE 语句中的 MODULE 名称同名的 .mod 文件。例如,语句 USE ME 使编译器仅查找模块文件 me.mod。
搜索模块时,编译器为在其中写入模块文件的目录指定更高的优先级。这由 -moddir 标志或 MODDIR 环境变量控制。如果上述两者都未指定,则缺省写入目录为当前目录。如果两者均已指定,则写入目录是 -moddir 标志指定的路径。
这意味着,如果只出现了 -M 标志,则先在当前目录中搜索模块,然后再在 -M 标志上列出的任何对象中进行搜索。要模拟以前发行版的行为,请使用:
-moddir=empty-dir -Mdir -M
其中 empty-dir 是空目录的路径。
如果在所搜索的任何其他位置均未找到模块文件,则将在 -I path 所指定的目录中搜索这些文件。
允许 -M 和 path 之间有空格。例如,-M /home/siri/PK15/Modules。
在 Oracle Solaris 上,如果 path 标识一个非归档文件或模块文件的常规文件,则编译器会将该选项传递给链接程序 ld,链接程序会将该选项作为链接程序映射文件。与 C 和 C++ 编译器类似,此功能作为公用选项提供。
指定编译的二进制对象的内存模型。
使用 -m32 创建 32 位可执行文件和共享库。使用 -m64 创建 64 位可执行文件和共享库。
在所有 Oracle Solaris 平台和不支持 64 位的 Linux 平台上,ILP32 内存模型(32 位 int、long、pointer 数据类型)是缺省值。在启用了 64 位的 Linux 平台上缺省为 LP64 内存模型(64 位 long 和指针数据类型)。-m64 仅允许在支持 LP64 模型的平台上使用。
使用 -m32 编译的对象文件或库不能同使用 -m64 编译的对象文件或库链接。
使用 -m64 编译具有大量静态数据的应用程序时,可能还需要 -xmodel=medium。
请注意,部分 Linux 平台不支持中等模型。
注意,在以前的编译器发行版中,通过选择带有 -xarch 的指令集来实现内存模型 ILP32 或 LP64 。从 Sun Studio 12 编译器开始,就不再是这样了。在大多数平台上,仅需向命令行添加 -m64 即可创建 64 位对象。
在 Oracle Solaris 上,-m32 为缺省值。在支持 64 位程序的 Linux 系统上,缺省为 -m64 -xarch=sse2。
另请参见:-xarch
指定编译器将中其中编写 .mod MODULE 文件的目录路径。也可以使用 MODDIR 环境变量指定该路径。如果同时使用这两种方法指定了目录路径,则此选项标志优先。
编写 .mod 文件的缺省目录是当前目录。
使用此选项,可以通过 Oracle Solaris 线程或 POSIX 线程 API 编译和链接多线程代码。-mt=yes 选项确保按正确的顺序链接库。
此选项将 -D_REENTRANT 传递给预处理程序。
在 Linux 平台上,只有 POSIX 线程 API 可用。(Linux 平台上没有 libthread)。因此,Linux 平台上的 -mt=yes 会添加 -lpthread,而不是 -lthread。要在 Linux 平台上使用 POSIX 线程,请使用 -mt 进行编译。
请注意,当使用 -G 进行编译时,-ltread 和 -lpthread 均不会自动包括在 -mt=yes 内。生成共享库时,您需要显式列出这些库。
-xopenmp 选项(用于使用 OpenMP 共享内存并行化 API)自动包括 -mt=yes。
如果使用 -mt=yes 进行编译并在单独的步骤中进行链接,则除了在编译步骤中外,还必须在链接步骤中使用 -mt=yes 选项。如果使用 -mt=yes 编译和链接一个转换单元,则必须使用 -mt=yes 编译和链接该程序的所有单元。
-mt=yes 是编译器的缺省行为。如果不想出现该行为,请使用选项 -mt=no。
选项 -mt 等效于 -mt=yes。
另请参见:-xnolib
针对主机系统进行优化。
-native 选项等效于 -xtarget=native 选项。
在命令行上取消 -autopar。
取消在命令行上由 -autopar 调用的循环的自动并行化。
取消命令行中的 -depend。
取消由先前出现在命令行上的 -depend 选项调用的依赖性分析。
(x86) 取消命令行上的 -fstore。
取消强制表达式具有 -fstore 调用的目标变量精度。
-nofstore 由 -fast 调用。-fstore 是常用缺省值。
不与系统库链接。
请勿自动链接任何系统库或语言库;即请勿将任何缺省 -lx 选项传递给 ld。缺省设置是将此类库自动链接到可执行文件,而无需用户在命令行上指定它们。
最终执行需要系统库和语言库。手动链接它们是您的责任。该选项为您提供了完全控制权限(和职责)。
使用 -nolib 选项,可以更轻松地静态链接这些库。
取消命令行上的 -libmil。
与 -fast 一起使用可禁用 libm 数学例程的内联:
demo% f95 -fast -nolibmil ...
取消命令行上的 -reduction。
-reduction 与并行化选项一起使用。该选项可取消先前出现在命令行上的 -reduction。
不会将运行时库搜索路径生成到可执行文件中。
如果可执行文件使用共享库,编译器通常会生成指示运行时链接程序从哪里查找这些共享库的路径。路径取决于安装编译器的目录。-norunpath 选项阻止将该路径生成到可执行文件中。
如果已将库安装在一些非标准位置,而且您不希望在另一位置运行可执行文件时让加载器搜索这些路径,则此选项是很有用的。请与 -R 进行比较。
指定优化级别 (n)。
如果未指定 -O[n],则仅执行非常基本级别的优化,即限于局部公共子表达式消除和无用代码分析。在显式优化级别进行编译时,程序的性能会大大提升。
每个 -On 级别的优化都包括在低于它的级别上执行的优化。一般说来,优化级别越高,运行时性能越好。不过,较高的优化级别会延长编译时间并生成较大的可执行文件。
有五个优化级别可与 -On 一起使用。编译器在每个级别执行的实际优化可能会随各个编译器发行版发生变化。
对于大多数程序,建议使用 -O(它表示 -O3)或 -fast(它表示 -O5)。
-g 选项可与优化一起使用。
如果优化器内存不足,则它尝试在较低优化级别上再次进行,即继续在原始级别上对后续例程进行编译。
有关优化的详细信息,请参见 Fortran 编程指南中的“性能分析”和“性能与优化”这两章。
在最有可能使许多实际应用程序达到接近最高性能的级别进行优化(等效于 -O3)。
只执行基本局部优化(窥孔优化)。
执行基本局部和全局优化。通常,此级别产生的代码大小是最小的。
在函数级别添加全局优化。一般而言,与 -xspace 选项一起使用时,这一级别和 -O4 通常会使代码大小最小。自动启用 -depend 数据依赖性分析。
在同一文件中添加函数的自动内联。除非与 -xspace 结合使用,否则 -O4 会导致代码较大。
要控制内联的例程,请参见 -inline。
执行最高级别的优化,只适用于占用最大一部分计算机时间的小部分程序。使用编辑时间更长或减少执行时间的程度不是很高的优化算法。如果使用分析反馈执行该级别上的优化,则更容易提高性能。请参见 -xprofile=collect|use。
交互:
如果使用 -g 并且优化级别为 -O3 或更低,编译器会为近乎完全优化提供尽可能多的符号信息。尾部调用优化和后端内联被禁用。
有关更多信息,请参见使用 dbx 调试程序。
另请参见:-fast、-xprofile=p、csh(1) 手册页
将输出文件命名为 filename,而非缺省的 a.out。filename 不能与 sourcefile 相同,因为 cc 不会覆盖源文件。
filename 必须具有合适的后缀。当与 -c 一起使用时,filename 指定目标 .o 对象文件;当与 -G 一起指定时,它指定目标 .so 库文件。此选项及其参数将传递给 ld。
启用单行程 DO 循环。
编译 DO 循环,以便在达到循环时至少执行一次。
如果上限小于下限,则在 Fortran 95 中根本不执行 DO 循环;这一点与 Fortran 的某些传统实现是不同的。
与 -xopenmp 等效。
(已过时)为了使用 prof 进行分析而编译。
为了使用 prof(1) 进行分析而准备对象文件。该选项按程序进行分析,显示对每个程序调用的数量以及每个程序所用时间的百分比。
对于单独的编译和链接步骤,如果使用 -p 进行编译,请确保使用 -p 进行链接。
此选项现在已过时。改用 -g 和性能分析器 analyzer(1)。
插入填充以便提高高速缓存的使用效率。
如果数组或字符串满足以下条件,该选项将在它们之间插入填充:
静态局部且未初始化,或者
在 common 块中。
在任一情况下,数组或字符串都不能等效。
如果存在 =p,它必须是以下值之一(无空格):
不执行填充。
填充局部变量。
填充 common 块中的变量。
局部填充和 common 填充已完成。
local 和 common 可以按任意顺序显示。
缺省值:
编译器缺省设置是不进行填充。指定不带值的 -pad 等效于 -pad=local,common。
程序必须符合以下限制:
如果为引用 common 块的某个文件指定了 -pad=common,则必须为引用该 common 块的所有文件指定它。
如果指定了 -pad=common,不同程序单元中同一 common 块中变量的布局必须相同,但变量的名称除外。
填充取决于 -xcache 的设置。使用 -pad=common 时,必须使用相同的 -xcache 设置编译所有文件。
如果程序过度索引 common 块中的数组,请勿指定 -pad=common。编译器在数组之间插入的填充将干扰假定的数据布局,并且会导致数组引用以不可预测的方式失败。
涉及 common 块变量的 EQUIVALENCE 声明会导致发出警告消息,指明使用 -pad=common 编译时 EQUIVALENCE 已禁止填充。这些数组将不进行填充。
使用 -pad 时,程序员应确保以一致的方式编译 common 块。如果不同程序单元中的 common 块没有一致地使用 -pad=common 进行编译,则会导致错误。如果同名的 common 块在不同的程序单元中具有不同的长度,则将报告正在使用 -Xlist 进行编译。
准备对象代码,以收集用 gprof (1) 进行分析所需的数据。-xpg 等效于 -pg。
调用在正常终止情况下产生 gmon.out 文件的运行时记录机制。
注意:如果指定了 -xpg,则使用 -xprofile 编译并无优势。两者不能准备或使用对方提供的数据。
使用 prof 或 gprof(在 64 位 Oracle Solaris 平台上)或者仅使用 gprof(在 32 位 Oracle Solaris 平台上)生成的分析中包括大致的用户 CPU 时间。这些时间来自主可执行文件中的例程以及共享库中例程(链接可执行文件时将共享库指定为链接程序参数)的 PC 样例数据(请参见 pcsample(2))。其他共享库(在进程启动后使用 dlopen(3DL) 打开的库)不进行分析。
在 32 位 Oracle Solaris 系统中,使用 prof(1) 生成的分析仅限于可执行文件中的例程。通过使用 -xpg 链接可执行文件并使用 gprof(1),可以对 32 位共享库进行分析。
最新的 Oracle Solaris 发行版不包括使用 -p 编译的系统库。因此,在当前 Oracle Solaris 平台上收集的分析不包含系统库例程的调用计数。
注意:在 x86 系统上,-xpg 与 -xregs=frameptr 不兼容,因为 gprof 运行时库需要有效的帧指针来确定分析的例程的返回地址。另请注意,在 x86 系统上使用 -fast 进行编译将调用 -xregs=frameptr。请改用以下命令进行编译:
-fast -xregs=no%frameptr -xpg
注意:不应当使用编译器选项 -p、-pg 或 -xpg 来编译多线程程序,因为这些选项的运行时支持不是线程安全的。如果利用这些选项来编译使用多个线程的程序,则可能会在运行时产生无效结果或段故障。
对于单独的编译和链接步骤,如果使用 -pg 进行编译,要使用 -pg 进行链接。
警告:使用 -xpg 编译以便进行 gprof 分析的二进制文件不应与 binopt(1) 一起使用,因为它们不兼容并可能导致内部错误。
为共享库编译与位置无关的代码。
在 SPARC 上,-pic 与 -xcode=pic13 等效。
在 x86 上,生成与位置无关的代码。生成共享库时使用该选项编译源文件。对全局数据的每个引用都生成为全局偏移表中指针的非关联化。每个函数调用都通过过程链接表在 pc 相对地址模式中生成。
在 SPARC 上,-PIC 与 -xcode=pic32 等效。
在 x86 上,-PIC 与 -pic。 等效
(x86) 在堆栈中保存基于寄存器的函数参数的副本。
如果指定了 none 或者如果未在命令行上指定 -preserve_argvalues 选项,则编译器行为像往常一样。
指定 simple 时,最多保存六个整数参数。
指定 complete 时,堆栈跟踪中所有函数参数的值按正确顺序显示给用户。
对于形式参数的赋值,值在函数生命周期内不会更新。
将选项列表 ls 传递到编译阶段 pr。
该选项主要由客户服务人员使用。
与 -p 等效。
将库搜索路径生成到可执行文件中。
如果使用该选项,链接程序 ld(1) 会将库搜索路径的列表添加到可执行文件中。
list 是以逗号分隔的目录列表,用于指定运行时链接程序的库搜索路径。该列表将添加到 f95 传递给链接程序的缺省列表中。
-R 和 list 之间的空格是可选的。
此选项的多个实例并置在一起,各个列表由冒号分隔。
如果希望导出可以在没有针对动态库路径的任何特殊选项的情况下运行的可执行文件,请使用该选项。
使用该选项生成可执行文件会将路径添加到始终最后搜索的缺省路径:
<installpath>/lib
通过使用 -dryrun 选项并检查 ld 调用的 -Y 选项,可查看缺省库搜索顺序。
将单精度常量提升为 REAL*8 常量。
所有单精度文字常量都将提升为 REAL*8。不提升双精度常量 (REAL*8)。
该标志仅适用于常量。使用 -xtypemap 可提升常量和变量。
使用此标志时要谨慎。当调用 REAL*4 文字常量作为实际参数(期望是 REAL*4 值)的例程时,会导致接口问题。还会导致读取无格式数据文件的程序出现问题,这些文件是由写入语句使用 I/O 列表上的 REAL*4 文字常量写入的。
设置缺省输出记录长度。
为预连接单元 output(标准输出)和/或 error(标准错误)设置缺省记录长度(单位为字符)。
此选项必须按下面的格式之一来指定:
-recl=out:N -recl=error:N -recl=out:N1,error:N2 -recl=error:N1,out:N2 -recl=all:N
其中 N、N1、N2 全部是正整数,范围从 72 到 2147483646。
out 是指标准输出,error 是指标准错误,all 可将缺省记录长度设置为两者。
缺省值为 -recl=all:80。
仅在当前编译的程序有 Fortran 主程序时,此选项才有效。
并行化循环中的约简操作。
对自动并行化中的约简进行循环分析。要启用约简循环的并行化,请指定 -reduction 和 -autopar。
示例:demo% f95 -autopar -reduction any.f
可将数组元素转换为单个标量值的循环称为约简运算。例如,对向量元素求和是典型的约简操作。虽然这些操作违反了并行化标准,但是编译器可以识别它们,并在指定了 -reduction 时作为特殊情况对它们进行并行化。有关 f95 识别的约简运算的信息,请参见 Fortran 编程指南中的“并行化”一章。如果指定不带 -autopar 的 -reduction,编译器将发出警告。
在单处理器系统中,生成的代码通常运行得比较慢。
约简操作始终潜在地存在舍入误差。
编译并仅生成汇编代码。
编译指定的程序,并在后缀为 .s 的相应文件中保留汇编语言输出(不创建 .o 文件)。
将符号表与可执行文件分离。
此选项使可执行文件变得更小,并使逆向工程的实施更困难。但是,该选项会阻止调试。
抑制编译器消息。
通常,f95 在编译期间不会发出消息,但错误诊断除外。提供该选项只是为了与早期脚本和 makefile 兼容。-silent 是缺省值,它的使用是多余的。
强制在堆栈上分配所有局部变量。
除非另有说明,否则会将例程中的所有局部变量和数组分配到内存堆栈上。该选项可使这些变量成为自动变量而非静态变量,并在通过调用子程序并行化循环时给优化器提供更多自由。
对于包含子程序调用的显式并行化循环,必须使用 -stackvar,并且建议对所有并行化选项使用。如果使用了 -xopenmp,将自动包括 -stackvar。有关何时应该使用以及何时不应该使用 -stackvar 的其他信息,请参见 Fortran 编程指南中的“并行化”一章。
变量和数组是局部的,除非它们是:
SUBROUTINE 或 FUNCTION 语句中的参数(已经在堆栈上)
COMMON、SAVE 或 STATIC 语句中的全局项目
类型语句或 DATA 语句中初始化的项目,例如:
REAL X/8.0/ or DATA X/8.0/
使用 -stackvar 将大数组放在堆栈上可以使堆栈溢出,从而导致段故障。此时可能需要增加堆栈大小。
执行程序的初始线程有一个主堆栈,而多线程程序的每个辅助线程都有自己的线程堆栈。
主堆栈的缺省大小约为 8 兆字节。缺省辅助线程堆栈大小在 32 位平台上为 4 兆字节,在 64 位平台上为 8 兆字节。
limit 命令(不带参数)显示当前的主堆栈大小。
使用 limit shell 命令可设置主线程堆栈的大小(单位为千字节)。例如,要将主堆栈大小设置为 64 兆字节,请使用以下命令:
% limit stacksize 65536
通过为 STACKSIZE 环境变量指定值(单位为千字节),可以设置每个从线程使用的堆栈大小:
% setenv STACKSIZE 8192
这将每个从线程的堆栈大小设置为 8 MB。
STACKSIZE 环境变量还接受带有 B(字节)、K(千字节)、M(兆字节)或 G(千兆字节)后缀的数值。缺省单位为千字节。
有关详细信息,请参见 Fortran 编程指南中有关并行化的一章。
另请参见 -xcheck=stkovf 以启用堆栈溢出情况的运行时检查。
启用 STOP 语句以返回整数状态值。
可选参数是 yes 或 no。缺省值为 yes。
在 -stop_status=yes 的情况下,STOP 语句可包含将在程序终止时传递给环境的整数常量。对于 C shell,该值将以 $status 的形式提供;对于 Bourne 和 Korn shell,将以 $? 的形式提供。
STOP 语句的值可以是任何正整数。返回 shell 的值将以 256 为模(在 0 到 255 的范围内)。
为临时文件定义目录。
将 f95 所用临时文件的目录设置为 dir 而非 /tmp 目录。该选项优先于 TMPDIR 环境变量。
显示每个编译阶段的执行时间。
如果执行中出现严重错误,将发出堆栈跟踪。
当程序生成某些信号时,-traceback 选项会导致可执行文件向 stderr 发出堆栈跟踪、信息转储并退出。如果多个线程都生成一个信号,则只为第一个生成堆栈跟踪。
要使用回溯,请在链接时将 -traceback 选项添加到编译器命令行中。编译时也接受该选项,除非生成可执行二进制文件,否则将忽略此选项。使用 -traceback 和 -G 创建共享库是个错误。
禁用回溯。
指定如果生成一组常见信号(sigill、sigfpe、sigbus、sigsegv 和 sigabrt)中的任何一个,则应该发出堆栈跟踪。
指定应生成堆栈跟踪的信号名称的逗号分隔列表,采用小写形式。可以捕捉以下信号(导致生成信息转储文件的信号):sigquit、sigill、sigtrap、sigabrt、sigemt、sigfpe、sigbus、sigsegv、sigsys、sigxcpu 和 sigxfsz。
在上述任一信号前加上 no% 可以禁用信号缓存。
例如:如果生成 sigsegv 或 sigfpe,-traceback=sigsegv,sigfpe 将生成堆栈跟踪和信息转储。
如果不指定该选项,则缺省值为 -traceback=%none。
没有任何 = 号的 -traceback 表示 -traceback=common。
注意:如果不需要信息转储,用户可以使用以下方法将 coredumpsize 限制设置为零:
% limit coredumpsize 0
-traceback 选项不影响运行时性能。
识别源文件中的大写字母和小写字母。
不将大写字母视为与小写字母等效。缺省情况下,将大写字母视为小写字母(字符串常量中的字母除外)。
如果使用该选项,编译器会将 Delta、DELTA 和 delta 视为不同的符号。
可移植性以及将 Fortran 与其他语言混合使用可能要求使用 -U。
此选项不会影响对内部函数的调用。
取消预处理程序宏 name 的定义。
会删除同一命令行上由 -Dname 创建的预处理程序宏符号 name 的任何初始定义(或由命令行驱动程序隐式放在此处的那些内容),而不管选项出现的顺序如何。它对源文件中的任何宏定义都没有影响。多个 -Uname 标志可出现在同一行上,并且 -U 和 name 之间不得存在空格。
该选项仅适用于调用 fpp 或 cpp 预处理程序的 .F、.F90、.F95 和 .F03 源文件。
报告未声明的变量。
等效于在每个编译单元中指定 IMPLICIT NONE。其影响是使缺省变量类型 undeclared 而非使用标准 Fortran 隐式键入。该选项不会覆盖任何现有 IMPLICIT 语句或显式 type 语句。
启用 DO 循环的解开 n 次(如果可能)。
n 是正整数。
n=1 禁止解开所有循环。
n > 向优化器表明它已解开循环 n 次。
如果实际解开了任何循环,那么可执行文件会变大。
全局指定隐式 MODULE 使用。list 是模块名称或模块文件名称的逗号分隔列表。使用有效的 -use=module_name 进行编译会将 USE module_name 添加到正在编译的每个子程序中。同样,对于 module_file_name 文件中包含的每个模块,使用 -use=module_file_name 进行编译会有效地将 USE module_name 添加到正在编译的每个子程序中。
显示每个编译阶段的名称和版本。
详细模式。显示编译详细信息。
与 -V 类似,但是也详细说明选项、宏标志扩展和驱动程序使用的环境变量。
指定对启用的 VAX VMS Fortran 扩展的选择。
v 必须是以下子选项之一或从中选择的子选项的逗号分隔列表。
在内部文件上将格式化输入中的空格解释为零。
将以字符 'D' 开头的行解释为正规 Fortran 语句,而不是像 VMS Fortran 中那样解释为注释。
将无格式的记录大小解释为以字为单位,而不是解释为以字节为单位。
内存中 VAX 结构的布局组件,与 VMS Fortran 中一样,没有填充。该选项标志取代了 f77 -xl 标志。注意:这会导致数据无法对齐(“总线错误”),为避免此类错误,应该与 -xmemalign 一起使用。
启用所有这些 VAX VMS 功能。(缺省值。)
禁用所有这些 VAX VMS 功能。
可以单独选择或关闭子选项(通过在前面加上 no%)。
示例:
-vax=debug,rsize,no%blank_zero
缺省值为 -vax=%none。如果指定不带任何子选项的 -vax,等效于 -vax=%all。
显示并行化警告消息。
发出有关潜在并行编程相关问题的警告,这些问题可能导致在使用 -xopenmp 和 OpenMP API 指令时出现错误的结果。
编译器在检测到下列情形时会发出警告:OpenMP 数据共享属性子句使用不当。例如,将变量声明为“共享”,而在 OpenMP 并行区域中访问该变量会导致数据争用;或者将变量声明为“私有”,但在并行区域后面使用其在并行区域中的值。
如果在处理所有并行化指令时没有出现任何问题,则不显示警告。
例如 f95 -xopenmp -vpara any.f
将参数 arg 传递到组件 c。每个参数与前一个参数之间必须仅以逗号分隔。(逗号可以是参数的一部分,方法是紧挨在逗号前面添加反斜杠 (\) 字符对其进行转义;反斜杠将从生成的参数中删除。)所有 -W 参数均在常规命令行参数之后进行传递。
c 可以是以下值之一:
汇编程序:(fbe)、(gas)
f95 代码生成器:(cg)(SPARC)
f95 驱动程序
链接编辑器 (ld)
mcs
(大写字母 'O')过程间优化器
后优化器
预处理程序 (cpp)
(数字零)编译器 (f90comp)
优化器:(iropt)
注意:不能使用 -Wd 将本手册页中列出的 f95 选项传递给 Fortran 编译器。
例如,-Wa,-o,objfile 可按相应的顺序将 -o 和 objfile 传递给汇编程序;此外,-Wl,-I,name 可使链接阶段覆盖动态链接程序 /usr/lib/ld.so.1 的缺省名称。
将参数传递给工具的顺序(相对于所指定的其他命令行选项)可能会更改。
显示或禁止警告消息。
-w 禁止来自编译器的警告消息。
-w0 仅显示错误消息。
-w1 显示错误和警告。(这是缺省情况。)
-w2 显示错误、警告和注意。
-w3 显示错误、警告、注意和备注。
-w4 显示错误、警告、注意、备注和注释。
如果指定两个选项且第二个覆盖第一个的全部或部分,则编译器将发出警告。
将 arg 传递到链接程序 ld。等效于 -z arg。
生成列表并执行全局程序检查。
查找潜在编程错误。调用额外的编译器检查操作,以检查调用的一致性以及对全局程序的通用性。生成带有交叉引用的行编号源代码列表。
来自 -Xlist 的诊断消息是警告,不会阻止编译和链接。
确保首先更正所有语法错误;在存在语法错误的源程序上运行时,-Xlist 可能会生成不可预测的报告。
输出将发送到一个文件,其名称类似于第一个文件名,但是带有 .lst 扩展名。
示例:错误、列表和对 file1.lst 的交叉引用
demo% f95 -Xlist file1.f file2.f
使用 -Xlist 选项可检查过程间问题,但是只在其他所有编译器错误和警告都已解决后才会检查。
-Xlist 子选项摘要
缺省值:列表、错误和交叉引用
调用图和错误。
仅错误(无交叉引用或列表)
禁止所有 -Xlist 错误消息
禁止 -Xlist 错误消息 n。
错误、列表和交叉引用,但是不编译对象文件。
如果检测到错误,则终止编译。
也检查包含文件
仅列表(无交叉引用)
页面长度为 n 行
(SPARC) 检查 OpenMP 指令。
输出到 nm 而非输出到 file.lst
禁止来自交叉引用表的未引用名称。
将检查级别设置为 n(1、2、3 或 4)-缺省值为 2
将输出行宽度设置为 n;缺省值为 79
禁止所有 -Xlist 警告消息
禁止 -Xlist 警告消息 n。
仅交叉引用(无列表)
有关详细信息,请参见 Fortran 编程指南。
(x86/x64) -xaddr32=yes 编译标志可将生成的可执行文件或共享对象限制到 32 位地址空间。
以这种方式编译的可执行文件会导致创建限定为 32 位地址空间的进程。
指定 -xaddr32=no 时,会生成常见的 64 位二进制文件。
如果未指定 -xaddr32 选项,则假定 -xaddr32=no。
如果仅指定了 -xaddr32,则假定 -xaddr32=yes。
此选项仅适用于 -m64 编译,并且仅在支持 SF1_SUNW_ADDR32 软件功能的 Oracle Solaris 平台上适用。
由于 Linux 内核不支持地址空间限制,此选项在 Linux 上不可用。在 Linux 上将忽略 -xaddr32 选项。
链接时,如果单个对象文件是使用 -xaddr32=yes 编译的,则假定整个输出文件是使用 -xaddr32=yes 编译的。
限定为 32 位地址空间的共享对象必须由在受限的 32 位模式地址空间内执行的进程装入。
有关更多信息,请参阅《链接程序和库指南》中介绍的 SF1_SUNW_ADDR32 软件功能定义。
指定要由编译器假定的别名程度。
非标准编程技术可能会造成干扰编译器优化策略的情况。特别是,使用过度索引、指针以及传递全局或非唯一变量作为子程序参数会导致不明确的别名情况,这会阻止编译器应用某些优化,并且会引起不明确性,进而造成意外结果。
有关别名的更多信息,请参见 Fortran 用户指南。
使用 -xalias 标志可将程序偏离 Fortran 标准的别名要求的方式通知给编译器。
此标志可能带有列表,也可能不带列表。列表中的关键字由逗号分隔,各个关键字指示程序中存在的别名情况。可以在每个关键字前面加上 no%,以指示不存在的别名类型。
别名关键字如下:
子程序的哑元参数(形式参数)可以互为别名,也可以作为全局变量的别名。
(缺省值)。哑元参数的使用遵循 Fortran 标准,它们不能互为别名,也不能作为全局变量的别名。
(缺省值)。Cray 指针可以指向任何全局变量或 LOC() 函数采用其地址的局部变量。此外,两个 Cray 指针可能指向同一数据。这是可以禁止某些优化的安全假定。
Cray 指针仅指向唯一内存地址,如从 malloc() 获得的地址。此外,没有两个 Cray 指针是指向同一数据的。此假定允许编译器优化 Cray 指针引用。
编译器将子程序的实际参数视为全局变量。将参数传递给子程序可能会导致通过 Cray 指针命名别名。
(缺省值)。传递参数不会导致进一步命名别名。
对 COMMON 块中某数组中的元素的引用可能引用 COMMON 块或等效组中的任何元素。如果将 COMMON 块或等效组中的任何元素作为实际参数传递给子程序,被调用的子程序就可以访问该 COMMON 块或等效组中的任何元素。序列派生类型的元素被视为 COMMON 块。可能违反了各数组边界,但除上文所述外,假定引用的数组元素仍然在数组内。
过度索引并未考虑数组语法、WHERE 和 FORALL 语句等因素。
(缺省值)。没有违反数组边界。数组引用没有引用其他变量。
对外部函数的调用可能使 Fortran 指针指向任何类型、种类或等级的目标变量。
(缺省值)。Fortran 指针遵循标准中的规则。
未在编译器命令行上指定 -xalias 时的缺省值对应于:
-xalias=no%dummy,craypointer,no%actual,no%overindex,\ no%ftnpointer
指定不带列表的 -xalias 将为不违反 Fortran 别名规则的大多数程序提供最佳性能,不带列表的 -xalias 等效于:
-xalias=no%dummy,no%craypointer,no%actual,no%overindex,\ no%ftnpointer
在优化级别 -xO3 及更高级别进行编译时,应该使用 -xalias 才有效。
有关其他详细信息,请参见 Fortran 编程指南中有关移植的一章。
指示编译器创建可供优化和监测工具 binopt(1)、code-analyzer(1)、discover(1)、collect(1) 和 uncover(1) 以后使用的二进制文件。
在 Oracle Solaris 上的缺省值为 -xannotate=yes。在 Linux 上的缺省值为 -xannotate=no。指定不带值的 -xannotate 等效于 -xannotate=yes。
要最好地利用优化和监测工具,在编译和链接时都必须采用 -xannotate=yes。
如果不使用优化和监测工具,则使用 -xannotate=no 进行编译和链接可以生成略小的二进制文件和库。
指定目标体系结构指令集 (ISA)。
通过只允许指定的指令集,此选项可将编译器生成的代码限定于指定指令集体系结构的指令。此选项不保证使用任何特定于目标的指令。不过,使用此选项会影响二进制程序的可移植性。请参见本条目结尾的“附注”和“警告”部分。
注意:编译器和链接程序会标记需要特定指令集体系结构 (instruction set architecture, ISA) 的 .o 文件和可执行文件,以便如果正在运行的系统不支持该特定 ISA,不会在运行时装入可执行文件。
注意:分别使用 -m64 或 -m32 选项来指定打算使用的内存模型 LP64(64 位)或 ILP32(32 位)。-xarch 标志不再指示内存模型,除非是为了与早期的发行版兼容,如下所示。
如果在不同的步骤中编译和链接,请确保在两个步骤中为 -xarch 指定了相同的值。
针对所有平台的值:
该选项使用大多数处理器通用的指令集。这是缺省值,等效于 -xarch=sse2。
(Oracle Solaris) 为了在大多数 64 位平台上获得良好性能而进行编译。
该选项等效于 -m64 -xarch=generic,提供该选项是为了与早期的发行版兼容。使用 -m64 可指定 64 位编译而非 -xarch=generic64
为了在此系统上获得良好性能而进行编译。
编译器为运行它的当前系统处理器选择适当的设置。
(Oracle Solaris) 为了在此系统上获得良好性能而进行编译。
该选项等效于 -m64 -xarch=native,提供该选项是为了与早期的发行版兼容。
特定于 SPARC 平台的值:
针对 SPARC-V9 ISA 进行编译。
针对 V9 ISA 进行编译,但不具备可视指令集 (Visual Instruction Set, VIS),也不具备特定于其他实现的 ISA 扩展。该选项在 V9 ISA 上使编译器生成高性能代码。
针对 SPARC-V9 ISA 的 SPARC4 版本进行编译。
允许编译器使用 SPARC-V9 指令集、UltraSPARC 扩展(包括 VIS 1.0)、UltraSPARC-III 扩展(包括 VIS2.0)中的指令以及混合浮点乘加指令、VIS 3.0 和 SPARC4 指令。
针对 SPARC-V9 ISA 的 SPARC4B 版本进行编译。
允许编译器使用 SPARC-V9 指令集、UltraSPARC 扩展(包括 VIS 1.0)、UltraSPARC-III 扩展(包括 VIS2.0)、面向浮点乘加的 SPARC64 VI 扩展、面向整数乘加的 SPARC64 VII 扩展中的指令以及 SPARC T4 扩展中的 PAUSE 和 CBCOND 指令。
针对 SPARC-V9 ISA 的 SPARC4C 版本进行编译。
允许编译器使用 SPARC-V9 指令集、UltraSPARC 扩展(包括 VIS 1.0)、UltraSPARC-III 扩展(包括 VIS2.0)、面向浮点乘加的 SPARC64 VI 扩展、面向整数乘加的 SPARC64 VII 扩展、VIS 3.0 指令的 VIS3B 子集、SPARC T3 扩展的子集中的指令以及 SPARC T4 扩展中的 PAUSE 和 CBCOND 指令。
针对 SPARC-V9 ISA 的 sparcace 版本进行编译。
允许编译器使用 SPARC-V9 指令集、UltraSPARC 扩展(包括可视指令集 (Visual Instruction Set, VIS) 版本 1.0)、UltraSPARC-III 扩展(包括可视指令集 (Visual Instruction Set, VIS) 版本 2.0)、面向浮点乘加的 SPARC64 VI 扩展、面向整数乘加的 SPARC64 VII 扩展以及面向 SPARCACE 浮点的 SPARC64 X 扩展中的指令。
针对 SPARC-V9 ISA 的 sparcaceplus 版本进行编译。
允许编译器使用 SPARC-V9 指令集、UltraSPARC 扩展(包括可视指令集 (Visual Instruction Set, VIS) 版本 1.0)、UltraSPARC-III 扩展(包括可视指令集 (Visual Instruction Set, VIS) 版本 2.0)、面向浮点乘加的 SPARC64 VI 扩展、面向整数乘加的 SPARC64 VII 扩展、面向 SPARCACE 浮点的 SPARC64 X 扩展以及面向 SPARCACE 浮点的 SPARC64 X+ 扩展中的指令。
针对 SPARC-V9 ISA 和 VIS 进行编译。
针对 SPARC-V9 加可视指令集 (Visual Instruction Set, VIS) 版本 1.0 进行编译,并具有 UltraSPARC 扩展。该选项在 UltraSPARC 体系结构上使编译器生成高性能代码。
针对具有 UltraSPARC III 扩展的 SPARC-V9 ISA 进行编译。
此选项允许编译器在具有 UltraSPARC III 扩展的 UltraSPARC 体系结构以及可视化指令集 (Visual Instruction Set, VIS) 2.0 版上生成对象代码。
针对具有 UltraSPARC III 和 VIS 3 扩展的 SPARC-V9 ISA 进行编译。
允许编译器使用 SPARC-V9 指令集、UltraSPARC 扩展(包括可视指令集 (Visual Instruction Set, VIS) 版本 1.0、UltraSPARC-III 扩展(包括可视指令集版本 2.0 以及混合乘加指令和可视指令集版本 3.1 中的指令。
针对 SPARC-V9 ISA 的sparcfmaf版本进行编译。
允许编译器使用 SPARC-V9 指令集,加 UltraSPARC 扩展(包括可视指令集 (Visual Instruction Set, VIS) 版本 1.0)、UltraSPARC-III 扩展(包括可视指令集 (Visual Instruction Set, VIS) 版本 2.0)以及面向浮点乘加的 SPARC64 VI 扩展中的指令。
请注意,必须将 -xarch=sparcfmaf 与 -fma=fused 以及某些优化级别结合使用,来使编译器尝试寻找机会自动使用乘加指令。
针对 SPARC-V9 ISA 的 sparcima 版本进行编译。
使编译器可以使用如下指令集内的指令:SPARC-V9 指令集、UltraSPARC 扩展(包括可视化指令集 (Visual Instruction Set, VIS) 版本 1.0)、UltraSPARC-III 扩展(包括可视化指令集 (Visual Instruction Set, VIS) 版本 2.0)、SPARC64 VI 扩展(用于浮点乘加)和 SPARC64 VII 扩展(用于整数乘加)。
与 -m64 -xarch=sparc 等效。使用 -xarch=v9 来获取 64 位内存模型的传统 makefile 和脚本仅需使用 -m64。
与 -m64 -xarch=sparcvis 等效,提供该选项是为了与早期发行版兼容。
与 -m64 -xarch=sparcvis2 等效,提供该选项是为了与早期发行版兼容。
传统 32 位 SPARC 指令集体系结构 V7 和 V8 隐含 -m32,因此无法使用 -m64 编译。
使用 sparc 和 sparcvis 编译的对象二进制文件 (.o) 可以链接起来并一起执行,但只能在与 sparcvis 兼容的平台上进行这些操作。
使用 sparc、sparcvis 和 sparcvis2 编译的对象二进制文件 (.o) 可以链接起来并一起执行,但只能在与 sparcvis2 兼容的平台上进行这些操作。
对于任何特定选择,生成的可执行文件在早期体系结构上运行可能会慢很多。此外,尽管这些指令集体系结构中的许多体系结构中有四精度浮点指令,但是编译器不在其生成的代码中使用这些指令。
特定于 x86 平台的值:
可以使用 386、MMX、Pentium_pro、SSE、SSE2、SSE3、SSSE3、SSE4.1、SSE4.2、AES、PCLMULQDQ、AVX、FSGSBASE、RDRND、F16C、AVX2、BMI1、BMI2、LZCNT、INVPCID 和 FMA 指令。
可以使用 386、MMX、SSE、SSE2、SSE3、SSSE3、SSE4.1、SSE4.2、AES、PCLMULQDQ AVX、FSGSBASE、RDRND 和 F16C 指令。
可以使用 386、MMX、SSE、SSE2、SSE3、SSSE3、SSE4.1、SSE4.2、AES 和 PCLMULQDQ smf AVX 指令。
可以使用 386、MMX、Pentium_pro、SSE、SSE2、SSE3、SSSE3、SSE4.1、SSE4.2、AES 和 PCLMULQDQ 指令。
可以使用 386、MMX、Pentium_pro、SSE、SSE2、SSE3、SSSE3、SSE4.1 和 SSE4.2 指令。
可以使用 386、MMX、Pentium_pro、SSE、SSE2、SSE3、SSSE3 和 SSE4.1 指令。
可以使用 386、MMX、Pentium_pro、SSE、SSE2、SSE3 和 SSSE3 指令。
可以使用 386、MMX、Pentium_pro、SSE、SSE2 和 SSE3 指令。
使用 AMD SSE4a 指令集。
可以使用 386、MMX、Pentium_pro、SSE 和 SSE2 指令。
可以使用 386、MMX、Pentium_pro、SSE、SSE2 和 AMD 扩展:3DNow!-AMD 处理器的 3DNow! 扩展指令。
传统标志,等效于 -m64 -xarch=sse2,在 -m64 标志可用之前用于获取 64 位内存模型代码。
传统标志,等效于 -m64 -xarch=sse2a,在 -m64 标志可用于 AMD 处理器之前用于获取 64 位内存模型代码。
可以使用 386、MMX、Pentium_pro 和 SEE 指令。
可以使用 386、MMX、Pentium_pro、SSE 和 AMD 扩展:3DNow!-AMD 处理器的 3DNow! 扩展指令。
可以使用 386、MMX 和 pentium_pro 指令。
可以使用 386、MMX、Pentium_pro 和 AMD 扩展:3DNow!-AMD 处理器的 3DNow! 扩展指令。
使用大多数处理器通用的指令集。
传统标志,等效于 -m64 -xarch=generic,在 -m64 标志可用之前用于获取 64 位内存模型代码。
使用编译器运行所在的当前系统处理器上可用的指令。
传统标志,等效于 -m64 -xarch=native,在 -m64 标志可用之前用于获取 64 位内存模型代码。
注:
如果在 x86 平台上使用 -m64 编译或链接了某个程序的任意部分,则该程序的所有部分也都必须使用这些选项之一进行编译。
有关各种 Intel 指令集体系结构(SSE、SSE2、SSE3、SSSE3 等)的详细信息,请参阅 Intel-64 和 IA-32《Intel Architecture Software Developer's Manual》。
缺省值:
如果未指定 -xarch=isa,则缺省值为 -xarch=generic(对于 SPARC 平台)和 -xarch=generic(对于 x86/x64 平台)。
交互:
尽管可以单独使用该选项,但它是 -xtarget 选项的扩展的一部分,并且可用于覆盖由特定的 -xtarget 选项设置的 -xarch 值。例如,
-xtarget=ultra4
扩展到
-xarch=sparcvis2 -xcache=64/32/4:8192/128/2 -xchip=ultra4
警告:
如果此选项与优化一起使用,则在指定的体系结构上,适当的选择可以为可执行文件提供良好性能。但如果选择不当就会导致性能的严重降级,或导致在预定目标平台上无法执行二进制程序。
设置参数以控制 ASSUME pragma。
使用该标志可控制编译器处理源代码中 ASSUME pragma 的方式。
有关 ASSUME pragma 的描述,请参见 Fortran 用户指南。
ASSUME pragma 为程序员提供了一种断言特殊信息(编译器使用这些特殊信息实现较佳的优化)的方法。可以使用可能值限定这些断言。可能值为 0 或 1 的断言将标记为 certain;否则将其视为 non-certain。
可以使用关联的可能性或确定性来做出一些断言,例如是否采取即将出现的分支、整数值或表达式的范围、即将出现的 DO 循环的行程计数等等。
识别的子选项如下:
在 ASSUME pragma 上作出的断言会影响程序的优化。
编译器将生成代码来检查标记为 certain 的所有断言的正确性,并在违反断言时发出运行时消息;如果未同时指定 fatal,则程序继续运行。
与 check 一起使用时,如果标记为 certain 的断言被违反,则程序将终止。
d 参数是可选的容差值,它必须是小于 1 的正实数常量。缺省值为 ".1"。retrospective 编译代码以确定所有断言的真假。那些超出容差值 d 的值将在程序终止时的输出中列出。
忽略所有 ASSUME pragma。
如果未在编译器命令行上指定,则缺省值为 -xassume_control=optimize。这意味着,编译器可识别 ASSUME pragma,而且后者将影响优化,但不进行检查。
如果指定不带参数的 -xassume_control,则隐含 -xassume_control=check,fatal。在这种情况下,编译器接受并检查所有 certain ASSUME pragma,但是后者不影响优化。无效的断言将导致程序终止。
与 -autopar 等效。
(SPARC)(已过时)请参见 -xannotate。
指示编译器准备二进制文件,以便以后使用 binopt(1) 进行优化、转换和分析。此选项可用于生成可执行文件或共享对象。此选项必须与 -xO1 或更高的优化级别一起使用时才有效。在使用此选项生成时,二进制文件的大小会有所增加,大约增加 5%。
如果在不同的步骤中进行编译,则在编译步骤和链接步骤中都必须有 -xbinopt:
example% f95 -o myprog -xbinopt=prepare a.o b.o c.f95
如果有些源代码不可用于编译,仍可使用此选项来编译其余代码。然后,应将其用于可创建最终库的链接步骤中。在此情况下,只有用此选项编译的代码才能进行优化、转换或分析。
使用 -xbinopt=prepare 和 -g 编译会将调试信息包括在内,从而增加可执行文件的大小。缺省值为 -xbinopt=off。
定义供优化器使用的高速缓存属性。
c 必须是以下值之一:
generic
native
s1/l1/a1[/t1]
s1/l1/a1[/t1]:s2/l2/a2[/t2]
s1/l1/a1[/t1]:s2/l2/a2[/t2]:s3/l3/a3[/t3]
si、li、ai 和 ti 定义如下:
级别为 i 的数据高速缓存的大小(千字节)
级别为 i 的数据高速缓存的行大小(字节)
级别为 i 的数据高速缓存的关联性
在级别 i 共享高速缓存的硬件线程数。ti 参数是可选的。如果未提供值,则使用值 1。
该选项指定了优化器可以使用的缓存属性,不保证使用每个特定的缓存属性。
尽管该选项可单独使用,但它是 -xtarget 选项扩展的一部分;其主要用途是覆盖 -xtarget 选项提供的值。
-xcache 值为:
定义高速缓存属性,以便在大多数平台上获得良好性能。这是缺省值。
定义高速缓存属性,以便在此主机平台上获得良好性能。
定义 1 级高速缓存属性。
定义 1 级和 2 级高速缓存属性。
定义 1 级、2 级和 3 级缓存属性。
将执行针对单线程程序中的主线程以及多线程程序中的从属线程堆栈的堆栈溢出运行时检查。如果检测到堆栈溢出,则生成SIGSEGV。如果您的应用程序需要以不同于处理其他地址空间违规的方式处理堆栈溢出导致的 SIGSEGV,请参见 sigaltstack(2)。
n 必须为以下值之一。
执行全部 -xcheck 检查。
不执行任何 -xcheck 检查。
生成代码以便在运行时检测堆栈溢出错误,可以选择指定检测到堆栈溢出错误时要执行的操作。
当设置的线程堆栈指针超过为线程分配的堆栈边界时,便会出现堆栈溢出错误。如果堆栈地址的新顶端可写入,则无法检测到错误。
如果内存访问违规作为错误的直接结果发生,从而发出关联信号(通常是 SIGSEGV),则会检测到堆栈溢出错误。我们说由此发出的信号与错误关联。
未检测到的堆栈溢出错误可能导致无提示数据损坏。防止未检测到的堆栈溢出错误需要编译器和运行时支持。
如果指定了 -xcheck=stkovf[action],当堆栈帧大于系统页面大小时,编译器会生成代码来检测堆栈溢出错误。代码包括库调用以强制内存访问违规而非将堆栈指针设置为无效但有可能映射的地址(请参见 _stack_grow(3C))。
如果指定了可选的 action,它必须是以下几项之一:
如果 action 为 :detect,则通过执行通常与错误关联的信号处理程序来处理检测到的堆栈溢出错误。
如果 action 为 :diagnose,则通过捕获关联信号并调用 stack_violation(3C) 诊断错误来处理检测到的堆栈溢出错误。这是没有指定 action 时的缺省行为。
如果内存访问违规诊断为堆栈溢出错误,则会将以下消息输出到 stderr:
ERROR: stack overflow detected: pc=<inst_addr>, sp=<sp_addr>
其中 <inst_addr> 是在其中检测到错误的指令的地址,<sp_addr> 是检测到错误时堆栈指针的值。检查堆栈溢出并输出以上消息(如果适用)后,控制能力传递给通常与错误关联的信号处理程序。
-xcheck=stkovf:detect 可将进入时的堆栈边界检查添加到堆栈帧大于系统页面大小的例程(请参见 _stack_grow(3C))。在大多数应用程序中,额外边界检查的相对成本应该微乎其微。
-xcheck=stkovf:diagnose 可将系统调用添加到线程创建(请参见 sigaltstack(2))。额外系统调用的相对成本取决于应用程序创建和销毁新线程的频率。
-xcheck=stkovf 仅在 Oracle Solaris 上受支持。Linux 上的 C 运行时库不支持堆栈溢出检测。
关闭堆栈溢出检查。
执行局部变量的特殊初始化。
使用此选项编译器将局部变量初始化为这样一个值:如果在赋予该值之前程序使用了它,则可能会导致运算异常。由 ALLOCATE 语句分配的内存也会以这种方式初始化。
不对模块变量、STATIC 和 SAVE 本地变量及 COMMON 块中的变量进行初始化。
有关编译器用于初始化变量的预定义值的列表,请参见 C 用户指南中对该选项的描述。
不初始化局部变量。
如果未指定 -xcheck,则编译器缺省使用 -xcheck=%none。如果指定了没有任何参数的 -xcheck,则编译器缺省使用 -xcheck=%all。
在命令行上 -xcheck 选项不进行累积。编译器按照上次出现的命令设置标志。
为优化器指定目标处理器。
此选项通过指定目标处理器来指定指令计时属性。
尽管该选项可单独使用,但它是 -xtarget 选项扩展的一部分;其主要用途是覆盖 -xtarget 选项提供的值。
部分影响如下:
指令的顺序,即调度
编译器使用分支的方法
语义上等价的其他指令可用时使用的指令
SPARC 上的通用 -xchip 值如下所示。
针对 SPARC64 VI 处理器进行优化。
针对 SPARC64 VII 处理器进行优化。
针对 SPARC64 VII+ 处理器进行优化。
针对 SPARC64 X 处理器进行优化。
针对 SPARC64 X+ 处理器进行优化。
针对 UltraSPARC(TM) 芯片进行优化。
针对 UltraSPARC II 芯片进行优化。
针对 UltraSPARC IIe 芯片进行优化。
针对 UltraSPARC IIi 芯片进行优化。
针对 UltraSPARC III 芯片进行优化。
针对 UltraSPARC IIIcu 芯片进行优化。
针对 UltraSPARC IIIi 芯片进行优化。
针对 UltraSPARC IV 芯片进行优化。
针对 UltraSPARC IV+ 芯片进行优化。
针对 UltraSPARC T1 芯片进行优化。
针对 UltraSPARC T2 芯片进行优化。
针对 UltraSPARC T2+ 芯片进行优化。
针对 SPARC T3 芯片进行优化。
针对 SPARC T4 芯片进行优化。
针对 SPARC T5 处理器进行优化。
针对 SPARC M5 处理器进行优化。
进行优化,以在大多数受支持 SPARC 平台上实现良好性能。(这是编译器缺省设置。)
进行优化,以在该主机平台上实现良好性能。
注意:以下 SPARC -xchip 值已过时,在将来的发行版中可能会删除:ultra、ultra2、ultra2e、ultra2i、ultra3、ultra3cu、ultra3i、ultra4 和 ultra4plus。
在 x86 平台上,-xchip 的值为:
针对 Intel Nahelem 处理器进行优化。
针对 Intel Core2 处理器进行优化。
针对 AMD FAM10 处理器进行优化。
针对 Intel Pentryn 处理器进行优化。
针对 Intel Sandy Bridge 处理器进行优化。
针对 Intel Ivy Bridge 处理器进行优化。
针对 Intel Haswell 处理器进行优化。
针对 Intel Westmere 处理器进行优化。
针对 AMD Opteron 处理器进行优化。
针对 Pentium 处理器进行优化。
针对 Pentium Pro 处理器进行优化。
针对 Pentium III 处理器进行优化。
针对 Pentium 4 处理器进行优化。
针对大多数 x86 平台进行优化。
针对此主机处理器进行优化。
有关完整信息,请参见 Fortran 用户指南
(SPARC)指定代码地址空间。
注意:强烈建议通过指定 -xcode=pic13 或 -xcode=pic32 来生成共享对象。可以使用 -m64 -xcode=abs64 生成可工作的共享对象,但这些对象的效率将会很低。使用 -m64 xarch=v9 -xcode=abs32 或 -m64 -xcode=abs44 生成的共享对象将不起作用。
-xcode 的值为:
这是针对 32 位系统的缺省值。生成 32 位绝对地址。代码 + 数据 + bss 的大小被限制为 2**32 字节。
这是针对 64 位系统的缺省值。生成 44 位绝对地址。代码+数据+bss 的大小不应超过 2**44 字节。只适用于 64 位架构。
生成 64 位绝对地址。只适用于 64 位架构。
生成共享库(小模型)中使用的与位置无关的代码。与 -Kpic 等效。允许在 32 位体系结构上最多引用 2**11 个唯一的外部符号,而在 64 位体系结构上可以最多引用 2**10 个。
生成共享库(大模型)中使用的与位置无关的代码。与 -KPIC 等效。允许在 32 位体系结构上最多引用 2**30 个唯一的外部符号,而在 64 位体系结构上可以最多引用 2**29 个。
对于 32 位体系结构,缺省值是 -xcode=abs32。对于 64 位体系结构,缺省值是 -xcode=abs44。
生成共享动态库时,缺省 -xcode 值 abs44(而不是 abs32)将与 64 位体系结构一起使用。改为指定 -xcode=pic13 或 -xcode=pic32。
要确定是使用 -xcode=pic13 还是 -xcode=pic32,请使用 elfdump -c(有关更多信息,请参见 elfdump (1) 手册页)来查看全局偏移表 (Global Offset Table, GOT) 的大小并查看节标题 sh_name: .got。sh_size 值是 GOT 的大小。如果 GOT 小于 8,192 字节,请指定 -xcode=pic13,否则指定 -xcode=pic32。
通常,应根据以下准则来确定如何使用 -xcode:
如果要生成可执行文件,则不应该使用 -xcode=pic13 或 -xcode=pic32。
如果是生成仅用于链接到可执行文件的归档库,则不应该使用 -xcode=pic13 或 -xcode=pic32。
如果要生成共享库,请先使用 -xcode=pic13,一旦 GOT 大小超过 8,192 字节,则使用 -xcode=pic32。
如果要生成用于链接到共享库的归档库,则应该使用 -xcode=pic32。
启用 common 块不一致的运行时检查。
为使用 task common 和并行化的程序提供该选项作为调试辅助工具(请参见 task common pragma)。
通常,不一致 task common 声明的运行时检查处于禁用状态。使用 -xcommonchk=yes 进行编译会启用运行时检查。
如果某个 common 块在一个源代码模块中声明作为常规 common 块而在其他位置出现在 task common pragma 中,则程序将停止并发出指向第一个这种不一致的消息。
由于运行时检查会降低程序性能,因此只能在程序开发和调试期间使用。
单独指定 -xcommoncheck 与 -xcommoncheck=yes。 等效
Oracle Solaris Studio 编译器已将调试器信息的格式从 "stabs" 格式迁移到 "dwarf" 格式。缺省值为 -xdebugformat=dwarf。
使用该选项可访问供移植工具使用的任一格式。除非您要维护读取调试器信息的软件,或者特定工具要求使用这些格式之一的调试器信息,否则不需要使用此选项。
-xdebugformat=stabs 生成使用 stabs 标准格式的调试信息。
-xdebugformat=dwarf 生成的调试信息采用 dwarf 标准格式。
如果未指定 -xdebugformat,编译器将假定 -xdebugformat=dwarf。指定此选项而不带参数是不正确的。
此选项影响使用 -g 选项记录的数据的格式。即使在没有使用 -g 的情况下记录少量调试信息,此选项仍可控制其信息格式。因此,即使不使用 -g,-xdebugformat 仍会产生影响。
dbx 和性能分析器软件可识别 stabs 和 dwarf 格式,因此使用此选项对任何工具的功能都没有影响。
这是过渡性接口,因此会在发行版之间发生更改而不兼容,即使在发行版更新较少时也是如此。
stabs 或 dwarf 格式的任何特定字段或值的详细资料也在不断改进。
使用 dwarfdump 命令可确定对象文件或可执行文件是使用 "dwarf" 还是 "stabs" 调试信息编译的。
控制发出多少调试和监测信息。
术语 tagtype 是指标记的类型:结构、联合、枚举和类。
以下列表包含子选项 a 的可能值。应用于某子选项的前缀 no% 会禁用该子选项。缺省值为 -xdebuginfo=%none。禁止指定不带子选项的 -xdebuginfo。
不生成任何调试信息。这是缺省值。
发出行号和文件信息。
发出参数的位置列表信息。发出标量值(例如 int、char *)的完整类型信息以及类型名称,但是不发出 tagtype 的完整定义。
发出词法上全局和局部变量的位置列表信息,包括文件和函数静态信息,但是不包括类静态和外部信息。发出标量值(例如 int 和 char *)的完整类型信息以及类型名称,但是不发出 tagtype 的完整定义。
发出关于函数和变量声明、成员函数以及类声明中的静态数据成员的信息。
发出从 param 和 variable 数据集引用的 tagtype 的完整类型定义以及模板定义。
发出宏信息。
发出 DWARF 代码标记(又称为 Stabs N_PATCH)。这是有关由 RTC 和 discover 使用的位字段、结构副本以及溢出的信息。
生成对硬件计数器分析至关重要的信息。该信息包括 ldst_map-从 ld/st 指令到引用的符号表条目的映射,以及分支目标地址的 branch_target 表-用于验证回溯是否未跨分支目标。有关更多信息,请参见 -xhwcprof。
注意:ldst_map 需要提供 tagtype 信息。如果不满足这项要求,驱动程序会发出错误。
这些是扩展到 -xdebuginfo 组合及其他选项的宏,如下所示:
-g = -g2 -gnone = -xdebuginfo=%none -xglobalize=no -xpatchpadding=fix -xkeep_unref=no%funcs,no%vars -g1 = -xdebuginfo=line,param,codetag -xglobalize=no -xpatchpadding=fix -xkeep_unref=no%funcs,no%vars -g2 = -xdebuginfo=line,param,decl,variable,tagtype,codetag -xglobalize=yes -xpatchpadding=fix -xkeep_unref=funcs,vars -g3 = -xdebuginfo=line,param,decl,variable,tagtype,codetag,macro -xglobalize=yes -xpatchpadding=fix -xkeep_unref=funcs,vars
与 -depend 等效。
与 -dryrun 等效。
允许 Studio 性能分析器进行函数级重新排序。
允许使用编译器、分析器和链接程序对核心映像中的函数(子程序)重新排序。如果使用 -xF 选项编译,然后运行分析器,则可以生成映射文件,该文件可用于优化函数在内存中的排序(具体取决于一起使用这些函数的方式)。可以通过使用链接程序的 -Mmapfile 选项,来指示此后用于生成可执行文件的链接使用该映射。它将可执行文件中的每个函数都放置到单独的部分中。(f95 -M path 选项还将正规文件传递给链接程序,请参见 -Mpath 选项的说明)。
仅当应用程序文本缺页时间占用了应用程序的大部分时间时,对内存中的子程序进行重组才有用。否则,重组可能不会提高应用程序的总体性能。性能分析器是 Oracle Solaris Studio 的一部分。有关分析器的详细信息,请参见性能分析器手册。
支持 little-endian 和 big-endian 平台之间的文件共享。
该标志标识无格式 I/O 文件的字节顺序和字节对齐。options 必须指定下面的任一组合,但必须至少有一个规范:
littlemax_align:spec bigmax_align:spec native:spec
max_align 为目标平台声明最大字节对齐。允许的值为 1、2、4、8 和 16。对齐适用于 Fortran VAX 结构和 Fortran 95 派生类型,它们使用依赖于平台的对齐来获得与 C 语言结构的兼容性。
在最大字节对齐为 max_align 的平台上,little 可指定“小尾数法”文件。例如,little4 指定 32 位 x86 文件;而 little16 描述 64 位 x86 文件。
最大对齐为 max_align 时,big 可指定“大尾数法”文件。例如,big8 描述 32 位 SPARC 文件,而 big16 描述 64 位 SPARC 文件。
native 指定字节顺序和对齐与编译处理器平台所用的字节顺序和对齐相同的“本机”文件。假定以下内容为“本机”:
PLATFORM "NATIVE" IS 32-bit SPARC big8 64-bit SPARC big16 32-bit x86 little4 64-bit x86 little16
spec 必须是以下内容的逗号分隔列表:%all、unit、filename。
%all 指所有文件和逻辑单元,但用 "SCRATCH" 打开的或在 -xfilebyteorder 标志中的其他位置显式命名的文件和逻辑单元除外。%all 只能出现一次。
unit 指程序打开的特定 Fortran 单元号。
filename 指程序打开的特定 Fortran 文件名。
示例:
-xfilebyteorder=little4:1,2,afile.in,big8:9,bfile.out,12 -xfilebyteorder=little8:%all,big16:20
注:
此选项不适用于使用 STATUS="SCRATCH" 打开的文件。对这些文件执行的 I/O 操作始终依照本机处理器的字节顺序和字节对齐。
如果命令行中没有出现 -xfilebyteorder,则第一个缺省设置为 -xfilebyteorder=native:%all。
在此选项中只能声明一次文件名或单元号。
当 -xfilebyteorder 出现在命令行上时,必须与 little、big 或 native 规范其中至少一项一起出现。
将此标志没有显式声明的文件假定为本机文件。例如,如果使用 xfilebyteorder=little4:zork.out 进行编译,就会将 zork.out 声明为最大数据对齐为 4 字节的 little-endian 32 位 x86 文件。程序中的所有其他文件均是本机文件。
如果为文件指定的字节顺序与本机处理器相同,但指定了不同的对齐,即使没有进行字节交换,也会使用相应的填充。例如,如果针对 64 位 x86 平台使用 -m64 进行编译,并指定了 -xfilebyteorder=little4:filename,就会出现这种情况。
大端字节序和小端字节序平台之间共享的数据记录中的声明类型必须具有相同的大小。例如,使用 -xtypemap=integer:64,real:64,double:64 编译的 x86 可执行文件不能读取使用 -xtypemap=integer:64,real:64,double:128 编译的 SPARC 可执行文件生成的文件,因为二者的缺省双精度数据类型具有不同的大小。
请注意,在本发行版中,Oracle Solaris Studio 软件现在支持 x86 平台上的 REAL*16 数据。现在可以在 X86 平台上使用包含 REAL*16 数据的无格式文件。
如果使用整个UNION/MAP数据对象对指定为非本机的文件执行 I/O 操作,则会导致运行时 I/O 错误。只能使用 MAP 的个别成员(而不能使用包含 UNION/MAP 的整个 VAX 记录)对非本机文件执行 I/O 操作。
控制文件静态变量的全局化,但是不控制函数的全局化。
全局化是修复并继续和过程间优化所需的一项技术,文件静态符号借以提升到全局范围,同时为名称添加前缀以使命名相同的符号不同。
缺省值为 -xglobalize=no。指定 -xglobalize 与指定 -xglobalize=yes 等效。
交互:
请参见 -xpatchpadding。
-xipo 也需要全局化,并且将覆盖 -xglobalize。
将霍尔瑞斯常量视为实际参数列表中的字符串。
在 -xhasc=yes 的情况下,编译器将在子程序调用中作为实际参数出现的霍尔瑞斯常量视为字符串。这是缺省值,并且符合 Fortran 77 标准。
在 -xhasc=no 的情况下,将子程序调用列表中的霍尔瑞斯常量视为无类型值。
提供该标记是为了帮助移植早期 Fortran 程序。如果调用的子程序期望参数作为 INTEGER 或除 CHARACTER 之外的其他任何类型,则使用 -xhasc=no 编译以霍尔瑞斯常量调用子程序的例程。
显示编译器选项的摘要。
-xhelp=flags 等效于 -help。
(SPARC) 为数据空间分析启用编译器支持。
如果启用了 -xhwcprof,编译器将生成信息,这些信息可帮助工具将分析的加载和存储指令与其所引用的数据类型和结构成员相关联(与使用 -g 生成的符号信息结合)。它将分析数据同对象文件的数据空间(而不是指令空间)相关联,并对行为进行洞察,而这仅从指令分析中是无法轻易获得的。
当可以使用 -xhwcprof 编译指定的对象文件集时,如果对应用程序中的所有对象文件应用该选项,则该选项最为有用。它能全面识别并关联分布在应用程序对象文件中的所有内存引用。
如果在不同的步骤中进行编译和链接,最好在链接时使用 -xhwcprof。
-xhwcprof=enable 或 -xhwcprof=disable 的实例将会覆盖同一命令行中 -xhwcprof 的所有以前的实例。
在缺省情况下,禁用 -xhwcprof。指定不带任何参数的 -xhwcprof 与 -xhwcprof=enable 等效。
-xhwcprof 要求启用优化,并将调试数据格式设置为 dwarf (-xdebugformat=dwarf),现在这是此发行版 Oracle Solaris Studio 编译器的缺省设置。不允许在同一命令行上出现 -xhwcprof 和 -xdebugformat=stabs。
-xhwcprof 使用 -xdebuginfo 自动启用所需的最少量调试信息,所以不需要 -g。
-xhwcprof 和 -g 的组合会增加编译器临时文件的存储需求,而且比单独指定 -xhwcprof 和 -g 所引起的增加总量还多。
-xhwcprof 作为宏实施,扩展到多个其他更原始的选项,如下所示:
-xhwcprof -xdebuginfo=hwcprof,tagtype,line -xhwcprof=enable -xdebuginfo=hwcprof,tagtype,line -xhwcprof=disable -xdebuginfo=no%hwcprof,no%tagtype,no%line
以下命令编译 example.f,并可为硬件计数器分析以及针对使用 DWARF 符号的数据类型和结构成员的符号分析指定支持:
example% f95 -c -O -xhwcprof -g example.f
有关基于硬件计数器的分析的更多信息,请参见性能分析器手册。
启用区间运算扩展并设置合适的浮点环境。
区间运算是 Fortran 95 中数值计算技术的扩展。有关详细信息,请参见 Fortran 95 文档。
-xia 是一个宏标志,其扩展如下:
-xia 和 -xia=widestneed 扩展到:
-xinterval=widestneed -ftrap=%none -fns=no -fsimple=0
-xia=strict 扩展到:
-xinterval=strict -ftrap=%none -fns=no -fsimple=0
在 x86 平台上,必须针对 32 位编译指定 -xarch=sse2。-xia 在 Linux 平台上不可用。
有关更多信息,请参见《Fortran 95 Interval Arithmetic Programming Reference》。
与 -inline=rl 等效。
使用该选项可手动更改编译器用来确定何时内联函数调用的试探式方法。
该选项仅在 -O3 或更高级别上起作用。当自动内联处于启用状态时,以下子选项仅在 -O4 或更高级别上起作用。
在以下子选项中,n 必须是正整数;a 可以是以下几项之一:
将所有子选项的值设置为缺省值。
自动内联只将小于 n 个伪指令(在编译器的内部表示中计数)的函数视为可能的内联候选函数。
在任何情况下,都不会考虑对大于该值的函数进行内联。
将内联函数的大小限制设置为 n 个伪指令(在编译器的内部表示中计数)。
有时可能会对大小大于该值的函数进行内联。
与 max_inst_hard 交互时,max_inst_soft 的值应该等于或小于 max_inst_hard 的值,即 max_inst_soft <= max_inst_hard。
一般而言,编译器的自动内联程序仅内联所调用函数的大小小于 max_inst_soft 的值的调用。在某些情况下,当函数大小大于 max_inst_soft 的值但小于 max_inst_hard 的值时,可能会内联函数。例如,当传递到函数中的参数是常量时。
当确定是否为了将一个特定调用点内联到函数中而更改 max_inst_hard 或 max_inst_soft 的值时,请使用 -xinline_report=2 报告详细的内联消息,并遵循内联消息中的建议。
允许函数因自动内联而最多增加 n 个伪指令(在编译器的内部表示中计数)。
允许自动内联程序将程序大小最多增大 n%,其中大小以伪指令数度量。
为了考虑要自动内联的函数而通过分析反馈 (-xprofile) 度量的最小调用点频率计数。
仅当使用分析反馈 (-xprofile=use) 编译应用程序时,该选项才有效。
使用该子选项可控制所应用自动内联的程度。-xinline_param=level 的设置越高,编译器内联的函数越多。
n 必须为 1、2 或 3 之一。
当未指定该选项时或者当指定不带 :n 的选项时,n 的缺省值为 2。
指定自动内联的级别
level:1 basic inlining level:2 medium inlining (default) level:3 aggressive inlining
级别决定了为以下内联参数组合指定的值:
max_growth + max_function_inst + max_inst + max_inst_call
当级别为 1 时,所有参数都是缺省值的一半。当级别为 2 时,所有参数都是缺省值。当级别为 3 时,所有参数都是缺省值的两倍。
当函数直接或间接调用自身时,我们说它进行递归调用。
该子选项可使递归调用自动内联到最高 n 级别。
指定递归函数的调用方通过执行自动递归内联可增大到的最大伪指令数(在编译器的内部表示中计数)。
max_recursive_inst 与 max_recursive_depth 之间发生交互时,直到 max_recursive_depth 个递归调用或者直到内联到的函数的大小超过 max_recursive_inst,才会内联递归函数调用。这两个参数的设置控制小型递归函数的内联程度。
如果指定了 -xinline_param=default,编译器会将子选项的所有值设置为缺省值。
如果不指定该选项,则缺省值为 -xinline_param=default。
值和选项的列表从左至右进行累积。所以对于 -xinline_param=max_inst_hard:30,..,max_inst_hard:50 的规范,值 max_inst_hard:50 将传递给编译器。
如果在命令行上指定了多个 -xinline_param 选项,则子选项的列表同样从左至右进行累积。例如,
-xinline_param=max_inst_hard:50,min_counter:70 ... -xinline_param=max_growth:100,max_inst_hard:100
的效果等同于
-xinline_param=max_inst_hard:100,min_counter:70,max_growth:100
该选项可生成在编译器内联函数时写入标准输出的报告。报告的类型取决于 n 的值,它必须为 0、1 或 2。
不生成报告。
生成内联参数缺省值的摘要报告。
生成内联消息的详细报告,显示已内联和未内联的调用点,并注明未内联调用点的简短原因。在某些情况下,该报告将包括针对可用于内联未内联的调用点的 -xinline_param 建议的值。
如果未指定 -xinline_report,则 n 的缺省值为 0。如果指定了不带 =n 的 -xinline_report,则缺省值为 1。
如果存在 -xlinkopt,则有关未内联的调用点的内联消息可能并不准确。
上述情况仅限于由一种编译器执行的内联,这种编译器受可由 -xinline_param 选项控制的试探的限制。出于其他原因由编译器内联的调用点可能不会报告这种情况。
指定此选项编译并检测您的程序,以供线程分析器进行分析。有关线程分析器的更多信息,请参见 tha(1) 了解详细信息。
然后可使用性能分析器以 collect -r races 运行检测过的程序,从而创建数据争用检测实验。可以单独运行已检测的代码,但其运行速度将非常缓慢。
指定 -xinstrument=no%datarace 关闭该功能。这是缺省值。
必须为 -xinstrument 指定一个参数。
如果分步进行编译和链接,则必须在编译和链接步骤中都指定 -xinstrument=datarace。
此选项定义了预处理程序令牌 __THA_NOTIFY。可指定 #ifdef __THA_NOTIFY 来保护对 libtha(3) 例程的调用。
此选项还设置 -g。
(SPARC) 启用区间运算扩展的处理。
区间运算是 Fortran 95 中数值计算技术的扩展。有关详细信息,请参见 Fortran 95 文档。
该标志可控制允许的表达式求值语法。
指定不带值的 -xinterval 缺省采用 widestneed。
未启用区间运算。
将任何混合模式表达式中的所有非区间变量和文字提升为表达式中范围最广的区间数据类型。
禁止混合类型或混合长度区间表达式。所有区间类型和长度转换都必须是显式的。
执行过程间优化。
调用过程间分析传递来执行整个程序优化。-xipo 在链接步骤中跨所有对象文件执行优化,而不仅限于编译命令的源文件。
分析和优化仅限于使用 -xipo 编译的对象文件。
-xipo=0 可禁用过程间分析。-xipo=1 可启用跨源文件内联。-xipo=2 可添加整个程序检测和分析,包括内存分配和内存布局优化,以便改善高速缓存性能。
缺省值为 -xipo=0。
如果指定了但不带值,则假定 -xipo=1。
如果使用 -xipo=2 进行编译,未使用 -xipo=2 编译的函数或子例程(例如,库)不能调用使用 -xipo=2 编译的函数或子例程。否则,编译器关于如何使用调用的这些例程所做的假设将会不正确。
有关何时不要使用 -xipo 的其他信息,请参见 Fortran 95 用户指南。
在不同的步骤中进行编译和链接时,必须在这两个步骤中都指定 -xipo 才有效。
即使是使用 -xipo 编译的库也不参与跨文件过程间分析。此外,.s 汇编语言源文件也不参与分析。
如果使用 -S 进行编译,则忽略 -xipo 标志。
-xipo 标志要求优化级别至少为 -xO4。
如果在内部版本中使用的对象文件对于并行运行的链接步骤通用,则使用并行 make 工具生成采用 -xipo 编译的可执行文件会产生问题。每个链接步骤都应有自己的对象文件副本,并且该副本应在链接前进行优化。
未使用 -xipo 编译的对象可与并非使用该标志编译的对象自由链接。
另请参见:-xjobs。
允许跨文件优化以包括归档 (.a) 库。
没有对归档文件的处理。编译器不会对使用 -xipo 编译和在链接时从归档库中提取的对象文件应用跨模块内联或其他跨模块优化。要执行此操作,链接时必须指定 -xipo,以及 -xipo_archive=readonly 或 -xipo_archive=writeback 中的任一个。
生成可执行文件之前,编译器使用通过 -xipo 编译的对象文件(驻留在归档库 (.a) 中)来优化传递到链接程序的对象文件。
选项 -xipo_archive=readonly 启用对在链接时指定的归档库中的对象文件的跨模块内联和过程间数据流分析。但是,它不启用对归档库代码的跨模块优化,除非代码已经通过跨模块内联插入到其他模块中。
要对归档库中的代码应用跨模块优化,需要使用 -xipo_archive=writeback。请注意,这样做将修改从中提取代码的归档库的内容。
生成可执行文件之前,编译器使用通过 -xipo 编译的对象文件(驻留在归档库 (.a) 中)来优化传递到链接程序的对象文件。库中包含的在编译期间优化的任何对象文件都会替换为其优化后的版本。
对于使用归档库通用集的并行链接,每个链接都应创建自己的归档库备份,从而在链接前进行优化。
-xipo_archive 需要一个参数。
在不设置 -xipo_build 的情况下生成 -xipo 涉及通过编译器的两次传递,一次是在生成对象文件时,再一次是随后在链接时执行跨文件优化时。设置 -xipo_build 可避免初始传递期间的优化而仅在链接时优化,从而缩短编译时间。无需对对象文件进行优化,与 -xipo 一样,将在链接时执行优化。如果使用 -xipo_build 生成的未优化对象文件链接起来而未包括 -xipo 来执行优化,则应用程序将因无法解析的符号错误而无法链接。
示例:
以下示例将执行 .o 文件的快速生成,后跟链接时跨文件优化:
% cc -O -xipo -xipo_build -o code1.o -c code1.c % cc -O -xipo -xipo_build -o code2.o -c code2.c % cc -O -xipo -o a.out code1.o code2.o
-xipo_build 将在创建 .o 文件时禁用 -O,以快速生成这些文件。链接时将执行完全 -O 优化,作为 -xipo 跨文件优化的一部分。
以下示例在不使用 -xipo 的情况下执行链接。
% cc -O -o a.out code1.o code2.o
如果使用 -xipo_build 生成了 code1.o 或 code2.o,结果将发生链接时故障,指明符号 __unoptimized_object_file 无法解析。
单独生成 .o 文件时,缺省行为是 -xipo_build=no。但是,当从源文件的一次传递中生成可执行文件或库时,将隐式启用 -xipo_build。例如:
% cc -fast -xipo a.c b.c c.c
将为生成 a.o、b.o 和 c.o 的第一次传递隐式启用 -xipo_build=yes。包括选项 -xipo_build=no 可禁用该行为。
禁用或设置 IVDEP 指令的解释。
IVDEP 指令指示编译器忽略在循环中找到的部分或全部对数组引用的循环附带依赖性,以进行优化。这使得编译器可以执行各种循环优化,如微向量化、分发、软件流水操作等,其他情况下,无法执行这些优化。当用户知道这些依赖性无关紧要或者实际上永远不会发生时,可以使用该指令。
!DIR IVDEP 指令的解释取决于 -xivdep 选项的值。
p 的以下值解释如下:
忽略假定的循环附带向量依赖性。
忽略所有循环附带向量依赖性。
忽略假定的向后循环附带向量依赖性。
忽略所有向后循环附带向量依赖性。
不忽略任何依赖性(禁用 IVDEP 指令)。
提供这些解释是为了与另一个供应商对 IVDEP 指令的解释兼容。
有关详细信息,请参见 Fortran 用户指南。
使用多个进程进行编译。如果未指定该标志,则缺省行为是 -xjobs=auto。
指定 -xjobs 选项可设置编译器完成其任务需创建的进程数。在多 CPU 计算机上,该选项可以缩短生成时间。目前,-xjobs 只能与 -xipo 选项一起使用。如果指定 -xjobs=n,过程间优化器就将 n 作为其在编译不同文件时可调用的最大代码生成器实例数。
通常,n 的安全值等于 1.5 乘以可用处理器数。如果使用的值是可用处理器数的数倍,则会降低性能,因为有在产生的作业间进行的上下文切换开销。此外,如果使用很大的数值会耗尽系统资源(如交换空间)。
如果指定了 -xjobs=auto,则编译器将自动选择适当数量的并行作业。
指定 -xjobs 时务必要指定值。否则会发出错误诊断并使编译终止。
如果未指定 -xjobs,则缺省行为是 -xjobs=auto。通过将 -xjobs=n 添加到命令行可覆盖该行为。在出现最合适的实例之前,-xjobs 的多个实例在命令行上会互相覆盖。
示例:
以下示例将与 -xipo 的最多 3 个并行进程链接:
% cc -xipo -xO4 -xjobs=3 t1.o t2.o t3.o
以下示例将与 -xipo 的一个进程串行链接:
% cc -xipo -xO4 -xjobs=1 t1.o t2.o t3.o
以下示例将与为 -xipo 选择作业数量的编译器并行链接:
% cc -xipo -xO4 t1.o t2.o t3.o
请注意,这与显式指定 -xjobs=auto 时的行为完全相同:
% cc -xipo -xO4 -xjobs=auto t1.o t2.o t3.o
保留未引用函数和变量的定义。no% 前缀使编译器有可能删除这些定义。
缺省值为 no%funcs、no%vars。指定 -xkeep_unref 等效于指定 -xkeep_unref=funcs,vars,表示 -keep_unref 保留一切。
禁止对命名函数进行与堆栈相关的优化。
指定 %all 会对所有代码禁止与堆栈相关的优化。指定 %none 可允许对所有代码进行与堆栈相关的优化。
如果未在命令行上指定,则编译器假定 -xkeepframe=%none
如果指定了但没有值,编译器将采用 -xkeepframe=%all
此选项是累积的,并且可以在命令行中出现多次。例如,-xkeepframe=%all -xkeepframe=no%func1 指示应当为除 func1 以外的所有函数保留堆栈帧。而且,-xkeepframe 优先于 -xregs=frameptr。例如,-xkeepframe=%all -xregs=frameptr 表示应保留所有函数的堆栈,但不会执行 -xregs=frameptr 的优化。
识别对已知库的调用。
如果指定此标志,编译器会将对某些已知库的调用视为内部函数,从而忽略用户提供的任何版本。这样,编译器就可以根据它具备的有关该库的专业知识来对库例程调用进行优化。
lib 可以是以下任意一个关键字,也可以是它们的组合的逗号分隔列表:blas、blas1、blas2、blas3、intrinsics。
编译器能够识别对以下 BLAS 库例程的调用,并且能够针对 Sun 性能库实现自由地进行正确优化。
-xknown_lib=blas1 能够识别的 BLAS1 例程:
caxpy ccopy cdotc cdotu crotg cscal csrot csscal cswap dasum daxpy dcopy ddot drot drotg drotm drotmg dscal dsdot dswap dnrm2 dzasum dznrm2 icamax idamax isamax izamax sasum saxpy scasum scnrm2 scopy sdot sdsdot snrm2 srot srotg srotm srotmg sscal sswap zaxpy zcopy zdotc zdotu zdrot zdscal zrotg zscal zswap
-xknown_lib=blas2 能够识别的 BLAS2 例程:
cgemv cgerc cgeru ctrmv ctrsv dgemv dger dsymv dsyr dsyr2 dtrmv dtrsv sgemv sger ssymv ssyr ssyr2 strmv strsv zgemv zgerc zgeru ztrmv ztrsv
-xknown_lib=blas3 能够识别的 BLAS3 例程:
ctrsm dgemm dsymm dsyr2k dsyrk dtrmm dtrsm sgemm ssymm ssyr2k ssyrk strmm strsm zgemm zsymm zsyr2k zsyrk ztrmm ztrsm
可以选择这些的任意组合。例如
-xknown_lib=blas2,blas3
仅选择 BLAS2 和 BLAS3 例程。
您可以选择所有 BLAS 例程,方法是指定
-xknown_lib=blas
这等同于
-xknown_lib=blas1,blas2,blas3
编译器将忽略这些库例程的用户提供版本,并使用 Sun 性能库中的 BLAS 例程或对例程进行内联。
要与 Sun 性能库进行链接,需要使用 -library=sunperf 选项。
指定 intrinsics 的作用是忽略 Fortran 95 内部函数的任何显式 EXTERNAL(外部)声明,从而忽略用户提供的任何内例程。
有关编译器识别为内部函数的函数列表,请参见 Fortran 库参考手册中的第 2 章和第 3 章。
(已过时)不再支持该 (f77) 选项。要获得当前 Fortran 编译器中的等效选项,请使用:-f77=%all,no%backslash -vax=$all,no%debug。
(已过时)不再支持该 (f77) 选项。要获得当前 Fortran 编译器中的等效选项,请使用:-f77=%all,no%backslash -vax=$all,no%debug。
(SPARC)包含适当的运行时库,并确保传统 Fortran 77 的正确运行时环境。
交互:
选项 -xlang=f77 表示与 f77compat 库进行链接,这是将 Fortran 95 对象文件与 Fortran 77 对象文件链接的简便方法。使用 -xlang=f77 可确保正确的运行时环境。
警告:
请勿将 -xnolib 与 -xlang 一起使用。
如果要将 Fortran 对象文件与 C++ 混合,请使用 C++ 编译器进行链接并指定 -xlang=f95。
如果要将并行的 Fortran 对象与 C++ 对象混合,链接行必须指定 -mt 标志。
要决定在混合语言链接中使用的驱动程序,请使用下列语言分层结构:
使用 CC 命令。有关详细信息,请参见 CC (1) 。
使用 f95 命令。
使用 f95 -xlang=f77。
使用 cc 命令。有关详细信息,请参见 cc(1)。
与 -libmil 等效。
使用优化数学例程的库。
使用针对性能进行优化的选定数学例程的库。此选项通常生成更快的代码。它可能生成稍有不同的结果;如果是这样,通常是最后一位不同。该库选项在命令行上的顺序并不重要。
使用该选项时,假定并且需要使用缺省舍入模式 -fround=nearest。
(已过时)编译器忽略此选项且不显示任何提示。
(已过时)使用 -library=sunperf 可与 Sun 性能库链接。
对可重定位对象文件执行链接时优化。
后优化器在链接时对二进制对象代码执行一些高级性能优化。可以使用值 level 来设置执行的优化级别,且必须为 0、1 或 2。
优化级别为:
禁用后优化器。(这是缺省情况。)
在链接时根据控制流分析执行优化,包括指令高速缓存着色和分支优化。
在链接时执行附加的数据流分析,包括无用代码删除和地址计算简化。
指定 -xlinkopt 时若不带级别参数,则表示 -xlinkopt=1。
这些优化在链接时通过分析二进制对象代码来执行。虽然未重写对象文件,但生成的可执行代码可能与初始对象代码不同。
当与分析反馈一起用于编译整个程序时,此选项最有效。
如果在不同的步骤中进行编译,则 -xlinkopt 必须既出现在编译步骤中,又出现在链接步骤中:
% f95 -c -xlinkopt a.f95 b.f95 % f95 -o myprog -xlinkopt=2 a.o b.o
请注意,仅当编译器链接时才使用 level 参数。在上述示例中,即使二进制对象代码是用隐含级别 1 编译的,使用的后优化级别仍然是 2。
要使 -xlinkopt 有用,至少程序中的一些例程(但未必是全部例程)必须使用此选项编译。优化器仍可以对未使用 -xlinkopt 进行编译的二进制对象文件执行部分受限的优化。
-xlinkopt 将优化位于编译器命令行上的静态库中的代码,但会跳过位于命令行上的共享(动态)库中的代码且不对其进行优化。生成共享库(用 -G 编译)时,您也可以使用 -xlinkopt。
与运行时分析反馈一起使用时,链接时后优化器最有效。分析功能会展示代码中最常用和最不常用的部分,并指示优化器相应地进行处理。这对大型应用程序尤为重要,因为在链接时执行代码优化放置可降低指令高速缓存未命中数。通常,会按照以下方式进行编译:
% f95 -o progt -xO5 -xprofile=collect:profdir % progt % f95 -o prog -xO5 -xprofile=use:prog
有关使用分析反馈的详细信息,请参见 -xprofile。
请注意,使用此选项编译会略微延长链接时间。对象文件的大小也会增加,但可执行文件的大小保持不变。使用 -xlinkopt 和 -g 编译会将调试信息包括在内,从而增加了可执行文件的大小。
与 -loopinfo 等效。
生成 make 依赖项。
该选项可在标准输出中为编译的源文件生成 make 依赖项。该选项涵盖源文件的所有 make 依赖项,包括头文件和 Fortran 模块。
对于模块依赖项,该选项使用基于对象的模块依赖项方案,以便无需显式生成规则即可创建模块文件。
该选项不能与 -c、-S、-Xlist 或会生成不同编译输出的其他任何编译选项一起使用。
生成的依赖项输出不包含任何生成规则,只包含文件的依赖项。用户需要为内部版本所需的所有文件指定生成规则。但是,对于模块文件,无需显式生成规则,因为模块文件与关联的对象文件同时创建。因此,模块文件仅需具有通用生成规则:
%.mod: @ echo $@ is already up to date.
模块文件生成规则只需要阻止 'make' 进程在模块文件没有生成规则时剥离与其相关的所有依赖项。除此之外,生成规则不执行任何操作,如上例中所示。
与 -keepmod 选项一起使用时,-xM 选项生成的依赖项将防止因不必要更新模块文件产生编译级联,并防止因使用 -keepmod 选项导致对相同源文件进行重新编译的问题,以防止对模块文件进行不必要的更新。
该选项可与 -M、-I 和 -moddir 选项结合使用,为内部版本中所需的模块文件确定适当的目录。预编译的模块文件(例如,由第三方提供的模块文件)应该位于由 -M 选项指向的目录,以便生成正确的依赖项。
启用优化 pragma 并设置最大优化级别。
将由 !$PRAGMA SUN OPT=m 指令指定的优化级别限制为 n。当在 -xmaxopt 标志上指定大于 n 的级别 m 的指令出现时,编译器将使用 n。
值 n 对应于 -O 优化级别标志的值 1 到 5。n 的值必须大于或等于其他选项指定的最高优化级别的值。所以,例如:
f95 ... -O3 -xmaxopt=4
是合适的。
标志 -xmaxopt 自身缺省采用 -xmaxopt=5。
(SPARC) 指定假定的最大内存对齐以及未对齐的数据访问的行为。
对于可在编译时确定对齐的内存访问,编译器将为该数据对齐生成适当的装入/存储指令序列。
对于不能在编译时确定对齐的内存访问,编译器必须假定一个对齐以生成所需的装入/存储序列。
使用 -xmemalign 标志,用户可以指定上述未确定情况下编译器要假定的数据最大内存对齐。它还指定在运行时发生未对齐内存访问时要执行的错误行为。
值:
如果指定了值,它必须由两部分组成:一个数值对齐值 a 和一个字母行为标志 b。
对齐 a 的允许值有:
假定最多 1 字节对齐。
假定最多 2 字节对齐。
假定最多 4 字节对齐。
假定最多 8 字节对齐。
假定最多 16 字节对齐。
行为 b 的允许值有:
解释访问并继续执行。
产生信号 SIGBUS。
对于所有 SPARC 64 位平台,将针对少于或等于 4 的对齐产生信号 SIGBUS,否则将解释访问并继续执行。对于其他所有 -xarch 值,f 标志等效于 i。
缺省值:
未出现 -xmemalign 标志时应用的第一个缺省值为:
-xmemalign=8i(对于 32 位 SPARC 平台 (-m32))。
-xmemalign=8s(对于面向 C 和 C++ 的 64 位 SPARC 平台 (-m64))
-xmemalign=8f(对于面向 Fortran 的 64 位 SPARC 平台 (-m64))
对于所有平台,-xmemalign 出现但不带值时应用的第二个缺省值为 -xmemalign=1i。
请注意,-xmemalign 本身并不强制进行特殊数据对齐。请参见 -dalign 或 -aligncommon。
此外,只要链接到使用 b 值 i 或 f 编译的对象文件,就必须指定 -xmemalign。
(x86) 在 Oracle Solaris x64 平台上为共享对象指定数据地址模型。
使用 -xmodel 选项,编译器可以为 Oracle Solaris x64 平台创建 64 位共享对象,并且只应对此类对象的编译指定该选项。
仅当启用了 64 位的 x64 处理器上还指定了 -m64 时,该选项才有效。
a 是以下值之一:
此选项可为小模型生成代码,其中执行代码的虚拟地址在链接时已知,并且已知在 0 到 2^31 - 2^24 - 1 的虚拟地址范围内可以找到所有符号。
按内核模型生成代码,在该模型中, 所有符号都定义在 2^64 - 2^31 到 2^64 - 2^24 范围内。
按中等模型生成代码,在该模型中,不对数据段的符号引用范围进行假定。文本段的大小和地址的限制与小型代码模型的限制相同。使用 -m64 编译含有大量静态数据的应用程序时,可能需要使用 -xmodel=medium。
如果未指定 -xmodel,编译器将假定 -xmodel=small。如果指定没有参数的 -xmodel,将出现错误。
只要您确保所访问的对象位于相应的范围内,就没有必要使用该选项编译所有的例程。
您应了解,不是所有的 Linux 系统都支持中等模型。
与 -nolib 等效。
与 -nolibmil 等效。
取消 -xlibmopt。
与 -fast 一起使用可取消与优化数学库的链接。
与 -O[n] 等效。
启用通过 OpenMP 指令进行的显式并行化。
该标志接受以下子选项关键字:
启用 OpenMP pragma 的识别。-xopenmp=parallel 时的优化级别为 -xO3。如有必要,编译器会将优化级别提高到 -xO3 并发出警告。
此标志还定义处理器宏 _OPENMP。_OPENMP 宏定义为具有十进制值 yyyymm,其中 yyyy 和 mm 是实现所支持的 OpenMP API 版本的年份和月份标示。有关特定发行版的 _OPENMP 宏的值,请参阅《Oracle Solaris Studio OpenMP API 用户指南》。
启用 OpenMP pragma 的识别。如果优化级别低于 -xO3,则编译器不提升它。如果将优化级别显式设置为低于 -xO3,如同在 f95 -xO2 -xopenmp=noopt 中一样,编译器会发出错误。如果没有使用 -xopenmp=noopt 指定优化级别,则会识别 OpenMP Pragma,并相应地对程序进行并行处理,但不进行优化。此子选项还定义预处理程序宏 _OPENMP。
不启用对 OpenMP pragma 的识别,不更改程序的优化级别并且不定义任何预处理程序宏。在未指定 -xopenmp 时,这是缺省值。
如果指定了 -xopenmp 但未指定子选项关键字,编译器将假定 -xopenmp=parallel。如果根本未指定 -xopenmp,编译器将假定 -xopenmp=none。
子选项 parallel 和 noopt 将自动调用 -stackvar。
如果使用 dbx 调试 OpenMP 程序,那么编译时选用 -g -xopenmp=noopt 可以在并行区设置断点并显示变量内容。
在以后的发行版中,-xopenmp 的缺省值可能会更改。可以通过显式指定适当的优化级别来避免警告消息。
使用 OMP_NUM_THREADS 环境变量可指定在运行 OpenMP 程序时要使用的线程数。如果未设置 OMP_NUM_THREADS,用于执行并行区域的线程的缺省数量为计算机上的可用内核数,上限为 32。可以通过以下方法指定不同线程数:设置 OMP_NUM_THREADS 环境变量,或调用 omp_set_num_threads() OpenMP 运行时例程,或者在并行区域指令中使用 num_threads 子句。为了获得最佳性能,用于执行并行区域的线程数不应超出计算机上的可用硬件线程(或虚拟处理器)数量。在 Oracle Solaris 系统上,可以使用 psrinfo (1M) 命令确定此数量。在 Linux 系统上,可以检查 /proc/cpuinfo 文件来确定此数量。有关更多信息,请参见 OpenMP API 用户指南。
缺省情况下,禁用嵌套并行操作。要启用嵌套并行操作,必须将 OMP_NESTED 环境变量设置为 TRUE。有关详细信息,请参见 OpenMP API 用户指南。
如果在不同的步骤中进行编译和链接,请在编译步骤和链接步骤中都指定 -xopenmp。与链接步骤配合使用时,-xopenmp 选项将与 OpenMP 运行时支持库 libmtsk.so 链接。
为了获得最新功能和性能,请确保系统上安装了 OpenMP 运行时库 libmtsk.so 的最新修补程序。
有关用于生成多线程应用程序的 OpenMP Fortran 95、C 和 C++ 应用程序接口 (application program interface, API) 的更多信息,请参见《Oracle Solaris Studio OpenMP API 用户指南》。
有关特定于 OpenMP 的 C 实现的信息,请参见《Oracle Solaris Studio C 用户指南》。
与 -pad 等效。
设置堆栈和堆的首选页面大小。
n 值必须是以下项之一:
在 SPARC 上:8K、64K、512K、4M、32M、256M、2G、16G 或 default。
在 x86 上:4K、2M、4M、1G 或 default。
必须为目标平台上的 Oracle Solaris OS 指定有效的页面大小。如果不指定有效的页面大小,运行时将忽略该请求,且不显示任何提示。
使用 pagesize (1) Oracle Solaris 命令可以确定页面中的字节数。操作系统不保证支持页面大小请求。但是,可以使用适当段对齐来增加获取请求的页面大小的可能性。有关如何设置段对齐,请参见 -xsegment_align 选项。可以使用 pmap (1) 或 meminfo (2) 来确定目标平台的页面大小。
如果指定了 -xpagesize=default,将忽略该标志。不带参数的 -xpagesize 等效于 -xpagesize=default。
此选项是以下项的宏:-xpagesize_heap=n -xpagesize_stack=n。这两个选项与 -xpagesize 接受相同的参数。可以通过指定 -xpagesize=n 来为二者设置相同的值,或分别为它们指定不同的值。
使用该标志进行编译与使用等效的选项将 LD_PRELOAD 环境变量设置为 mpss.so.1,或在运行程序之前使用等效的选项运行 Oracle Solaris 命令 ppgsz (1) 具有相同的效果。有关详细信息,请参见 Oracle Solaris OS 手册页。
为堆设置内存中的页面大小。
n 与所述的 -xpagesize 的值相同。
有关进一步的详细信息,请参见 -xpagesize。
为堆栈设置内存中的页面大小。
n 与所述的 -xpagesize 的值相同。
有关进一步的详细信息,请参见 -xpagesize。
在各个函数启动之前保留内存区域。如果指定了 fix,编译器将保留 fix 所需的空间量并继续。这是缺省值。如果指定了 patch 或未指定任何值,则编译器将保留特定于平台的缺省值。值 -xpatchpadding=0 表示保留 0 字节的空间。在 x86 上 size 的最大值是 127 字节,在 SPARC 上是 2048 字节。
生成 PEC(Portable Executable Code,可移植执行代码)二进制文件。
此选项将程序中间表示置于对象文件和二进制文件中。该二进制文件可在以后用于调整和故障排除。
使用-xpec生成的二进制文件通常要比不使用该选项生成的文件大 5 到 10 倍。
缺省值为 -xpec=no。不带参数的 -xpec 与 -xpec=yes 等效。
(x86) 与 -xtarget=pentium。 相同
与 -pg 等效。
选择要与 .F、.F95 和 .F03 文件一起使用的源文件预处理程序。
缺省值为 fpp,它适用于 Fortran。以前的编译器版本使用 cpp-标准 C 语言预处理程序。要选择 cpp,请指定 -xpp=cpp。
在支持预取的体系结构上启用并调整预取指令。要求在优化级别 -xO3 或更高级别进行编译。
a 必须为以下值之一。
启用预取指令的自动生成。
禁用自动生成。
启用显式预取指令。
禁用显式预取指令。
(SPARC) 按指定的因子调整编译器的假定预取到装入的延迟和预取到存储的延迟。该因子必须是正浮点数或整数。
预取延迟是从执行预取指令到所预取的数据在高速缓存中可用那一刻之间的硬件延迟。
在确定发出预取指令到发出使用所预取数据的装入或存储指令之间的间隔时,编译器就采用预取延迟值。注意-在预取和装入之间采用的延迟可能与在预取和存储之间采用的延迟不同。
编译器可以在众多计算机与应用程序间调整预取机制,以获得最佳性能。这种调整并非总能达到最优。对于占用大量内存的应用程序,尤其是要在大型多处理器上运行的应用程序,可以通过增加预取延迟值来提高性能。要增加值,请使用大于 1(一)的 factor。介于 .5 和 2.0 之间的值最有可能提供最佳性能。
对于数据集完全位于外部高速缓存中的应用程序,可能能够通过减小预取延迟值来提高性能。要减小此值,请使用小于一的 factor。
要使用 latx:factor 子选项,请首先使用接近 1.0 的 factor 值并对应用程序运行性能测试。然后适当增加或减小该因子,并再次运行性能测试。继续调整因子并运行性能测试,直到获得最佳性能。以很小的增量逐渐增加或减小因子时,前几步中不会看到性能差异,之后会突然出现差异,然后再趋于稳定。
与 -xprefetch=auto,explicit 相同。不得指定其他子选项。
与 -xprefetch=no%auto,no%explicit 相同。不得指定其他子选项。
使用 -xprefetch、-xprefetch=auto 和 -xprefetch=yes 时,编译器就可以将预取指令插入到其生成的代码中。该操作可以提高支持预取的体系结构的性能。
缺省值:
如果未指定 -xprefetch,则假定 -xprefetch=auto,explicit。
如果仅指定了 -xprefetch,则假定 -xprefetch=auto,explicit。
如果使用 -xprefetch 或 -xprefetch=yes 等启用了自动预取,但未指定延迟因子,则假定 latx:1.0。
交互:
如果使用 -xprefetch=explicit,编译器将能够识别以下指令:
!$PRAGMA SUN_PREFETCH_READ_ONCE (address) !$PRAGMA SUN_PREFETCH_READ_MANY (address) !$PRAGMA SUN_PREFETCH_WRITE_ONCE (address) !$PRAGMA SUN_PREFETCH_WRITE_MANY (address)
-xchip 设置影响假定延迟的决定以及 latx:factor 设置的结果。
仅当启用了自动预取时,latx:factor 子选项才有效。即,除非与 auto 一起使用,否则将忽略 latx:factor。
警告:
显式预取只应在度量支持的特殊环境下使用。
因为编译器可以在众多计算机与应用程序间调整预取机制以获得最佳性能,所以当性能测试指示性能明显提高时,应当只使用 latx:factor 子选项。假定的预取延迟在不同发行版本中是不同的。因此,无论何时切换到不同的发行版本,强烈建议重新测试延迟因子对性能的影响。
为间接访问的数据数组生成间接预取。
[no%]indirect_array_access [不]以生成直接内存访问预取的相同方式来生成由选项 -xprefetch_level=[1|2|3] 指定的循环的间接预取。
如果不指定 -xprefetch_auto_type 的设置,编译器会将其设置为 -xprefetch_auto_type=no%indirect_array_access。
要求 -xprefetch=auto 以及优化级别 -xO3 或更高级别。
诸如 -xdepend 之类的选项可以影响计算间接预取候选项的主动性,进而影响由于更好的内存别名歧义消除信息而发生的自动间接预取插入的主动性。
控制预取指令的插入程度。
仅当使用 -xprefetch=auto 在优化级别 3 或更高级别 (-xO3) 进行编译且在支持预取的平台上时,该选项才有效。
n 可以为 1、2 或 3。
在 -xprefetch=auto 的情况下,缺省值为级别 2。
预取级别 2 比级别 1 找到更多的预取指令机会。预取级别 3 比级别 2 找到更多的预取指令。
在早期的 SPARC 和 x86 平台上,预取级别 2 和 3 可能不会生效。
收集用于分析的数据或使用分析进行优化。
p 必须为 collect[:profdir]、use[:profdir] 或 tcov[:profdir]
此选项可在执行期间收集并保存执行频率数据,然后在后续运行中可以使用该数据来改进性能。对多线程应用程序来讲,分析收集 (Profile collection) 是一种安全的方法。也就是说,对执行其自己的多任务处理 (-mt) 的程序进行分析可产生准确的结果。只有指定 -xO2 或更高的优化级别时,此选项才有效。
如果分别执行编译和链接,则编译步骤和链接步骤中必须都出现同一 -xprofile 选项。
在 -xprofile=use 时优化器收集并保存执行频率,以供将来使用。编译器生成可测量语句执行频率的代码。
-xMerge、-ztext 和 -xprofile=collect 不应同时使用。-xMerge 会强制将静态初始化的数据存储到只读存储器中,-ztext 禁止在只读存储器中进行依赖于位置的符号重定位,而 -xprofile=collect 会在可写存储器中生成静态初始化的、依赖于位置的符号重定位。
分析目录名 profdir(如果指定)是包含已分析的对象代码的程序或共享库在执行时用来存储分析数据的目录路径名。如果路径名不是绝对路径,在使用选项 -xprofile=use:profdir 编译程序时将相对于当前工作目录来解释该路径。
如果未使用 -xprofile=collect:prof_dir 或 -xprofile=tcov:prof_dir 指定任何分析目录名,则分析数据在运行时将存储在名为 program.profile 的目录中,其中程序是已分析进程的主程序的基名。在此情况下,环境变量 SUN_PROFDATA 和 SUN_PROFDATA_DIR 可用于控制在运行时将分析数据存储在何处。如果已设置,分析数据将写入 $SUN_PROFDATA_DIR/$SUN_PROFDATA 指定的目录。
如果在编译时指定了分析目录名,则 SUN_PROFDATA_DIR 和 SUN_PROFDATA 在运行时不起任何作用。这些环境变量同样控制由 tcov 写入的分析数据文件的路径和名称,如 tcov (1) 手册页中所述。
如果未设置这些环境变量,分析数据将写入当前目录中的目录 profdir.profile,其中 profdir 是可执行文件的名称或在 -xprofile=collect:profdir 标志中指定的名称。如果 profdir 已经以 .profile 结尾,则 -xprofile 不会将 .profile 附加到 profdir。如果多次运行程序,那么执行频率数据会累积在 profdir.profile 目录中;也就是说,以前执行的输出不会丢失。
示例 [1]:在目录 myprof.profile(位于生成程序所在的目录中)中收集分析数据,并使用这些分析数据:
f95 -xprofile=collect:myprof.profile -xO5 prog.f95 -o prog ./prog f95 -xprofile=use:myprof.profile -xO5 prog.f95 -o prog
示例 [2]:在目录 /bench/myprof.profile 中收集分析数据,然后在优化级别为 -xO5 的反馈编译中使用收集的分析数据:
f95 -xprofile=collect:/bench/myprof.profile -xO5 prog.f95 \ -o prog ...run prog from multiple locations... f95 -xprofile=use:/bench/myprof.profile -xO5 prog.f95 -o prog
如果在不同的步骤中进行编译和链接,应确保使用 -xprofile=collect 编译的任何对象文件也使用 -xprofile=collect 进行链接。
有关控制异步分析收集的环境变量的描述,另请参见本手册页下文的“环境变量”部分。
使用从通过 -xprofile=collect[:profdir] 或 -xprofile=tcov[:profdir] 编译的代码中收集的执行频率数据针对在执行已分析代码时执行的工作进行优化。profdir 是包含通过运行使用 -xprofile=collect[:profdir] 或 -xprofile=tcov[:profdir] 编译的程序收集的分析数据的目录的路径名。
要生成 tcov 和 -xprofile=use[:profdir] 都能使用的数据,必须在编译时使用选项 -xprofile=tcov[:profdir] 指定相同的分析目录。为最大限度地减少混淆情况,请将 profdir 指定为绝对路径名。
profdir 是可选的。如果未指定 profdir,将使用可执行二进制文件的名称。如果未指定 -o,将使用 a.out。如果未指定 profdir,编译器将查找 profdir.profile/feedback 或 a.out.profile/feedback。例如:
f95 -xprofile=collect -o myexe prog.f95 f95 -xprofile=use:myexe -xO5 -o myexe prog.f95
程序是使用以前生成并保存在 feedback 文件中的执行频率数据优化的,此数据是先前执行用 -xprofile=collect 编译的程序时写入的。
除了 -xprofile 选项之外,源文件和其他编译器选项必须与用于编译(该编译过程创建了随后生成 feedback 文件的编译程序)的相应选项完全相同。编译器的相同版本必须同时用于collect生成和use生成。
如果用 -xprofile=collect:profdir 编译,则必须将相同的分析目录名 profdir 用在优化编译中:-xprofile=use: profdir。
另请参见 -xprofile_ircache,以了解有关加速 collect 阶段和 use 阶段之间的编译的说明。
使用 tcov(1) 检测对象文件以进行基本块覆盖分析。
如果指定了可选的 :profdir 参数,则编译器将在指定位置创建分析目录。分析目录中存储的数据可通过 tcov (1) 或设置了 -xprofile=use:profdir 的编译器使用。
如果省略可选的 :profdir 参数,执行已进行分析的程序时将创建分析目录。只能通过 tcov (1) 使用该分析目录中存储的数据。使用环境变量 SUN_PROFDATA 和 SUN_PROFDATA_DIR 可以控制分析目录的位置。请参见下面的“环境变量”。
如果 :profdir 指定的位置不是绝对路径名,则在编译程序时会相对于当前工作目录来解释该位置。
如果为任何对象文件指定了 :profdir,则必须为同一程序中的所有对象文件指定同一位置。由 :profdir 指定位置的目录必须在要执行已进行分析的程序的所有计算机中都可以访问。除非不再需要分析目录中的内容,否则不应删除该目录,因为除非重新编译,否则编译器存储在其中的数据将无法恢复。
示例 1:如果用 -xprofile=tcov:/test/profdata 编译一个或多个程序的对象文件,编译器会创建一个名为 /test/profdata.profile 的目录并将其用来存储描述已分析的对象文件的数据。该同一目录还可在执行时用来存储与已进行分析的对象文件关联的执行数据。
示例 2:如果名为 "myprog" 的程序用 -xprofile=tcov 编译并在目录 /home/joe, 中执行,将在运行时创建目录 /home/joe/myprog.profile 并将其用来存储运行时分析数据。
(SPARC) 保存并重用收集阶段和使用分析阶段之间的编译数据。
与 -xprofile=collect|use 一起使用可重用从 collect 阶段保存的编译数据,从而缩短 use 阶段的编译时间。
如果指定,path 将覆盖高速缓存文件的保存位置。缺省情况下,这些文件会与对象文件保存在同一目录下。当收集阶段和使用阶段出现在两个不同的位置时,指定路径便十分有用。
典型的命令序列可能是:
f95 -xO5 -xprofile=collect -xprofile_ircache t1.f95 t2.f95 a.out // run collects feedback data f95 -xO5 -xprofile=use -xprofile_ircache t1.f95 t2.f95
对于大程序,通过用这种方式保存中间数据,可以显著缩短使用阶段的编译时间。但这将以显著增加所用的磁盘空间为代价。
(SPARC) 设置分析数据文件的路径映射。
请将 -xprofile_pathmap 选项与 -xprofile=use 选项一起使用。
如果编译器找不到用 -xprofile=use 编译的对象文件的分析数据,请使用 -xprofile_pathmap,并且:
当前使用 -xprofile=use 进行编译所用的目录,不是先前使用 -xprofile=collect 编译时使用的目录。
目标文件在分析中共享公共基名,但可以根据它们在不同目录中的位置互相区分。
collect-prefix 是某个目录树的 UNIX 路径名的前缀,该目录树中的对象文件是使用 -xprofile=collect 编译的。
use-prefix 是目录树的 UNIX 路径名的前缀,该目录树中的对象文件是使用 -xprofile=use 编译的。
如果指定了 -xprofile_pathmap 的多个实例,编译器将按照这些实例的出现顺序对其进行处理。将 -xprofile_pathmap 实例指定的每个 use-prefix 与对象文件路径名进行比较,直至找到匹配的 use-prefix 或发现最后一个指定的 use-prefix 与对象文件路径名也不匹配。
允许不带 RECURSIVE 属性的已定义例程以递归方式调用它们自己。
通常,只有使用 RECURSIVE 属性定义的子程序才能以递归方式调用它们自己。
使用 -xrecursive 进行编译可使子程序以递归方式调用自身,即使未为其定义属性 RECURSIVE 也是如此。但是,与 RECURSIVE 属性不同,缺省情况下,该标志不会导致在堆栈上分配局部变量。要使局部变量在子程序的每个递归调用中具有不同的值,应该使用 -stackvar 进行编译以便将局部变量放在堆栈上。
使用 -xrecursive 编译例程会导致性能下降。
与 -reduction 等效。
为生成的代码指定寄存器用法。
r 是一个逗号分隔列表,它包含下面的一个或多个子选项:appl、float、frameptr。
用 no% 作为子选项的前缀会禁用该子选项。
示例:-xregs=appl,no%float
请注意,-xregs 子选项仅限于特定的硬件平台。
允许编译器将应用程序寄存器用作临时寄存器来生成代码。应用程序寄存器包括:g2、g3 和 g4(对于 32 位平台)以及 g2 和 g3(对于 64 位平台)。
强烈建议使用 -xregs=no%appl 编译所有系统软件和库。系统软件(包括共享库)必须为应用程序保留这些寄存器值。这些值的使用将由编译系统控制,而且在整个应用程序中必须保持一致。
在 SPARC ABI 中,这些寄存器表示为应用程序寄存器。由于需要更少的装入和存储指令,因此使用这些寄存器可提高性能。但是,这样使用可能与某些用汇编代码编写的旧库程序冲突。
有关 SPARC 指令集的更多信息,请参见 -xarch。
允许编译器通过将浮点寄存器用作整数值的临时寄存器来生成代码。使用浮点值可能会用到与该选项无关的这些寄存器。要生成对浮点寄存器没有任何引用的二进制代码,请使用 -xregs=no%float 并确保源代码未以任何方式使用浮点类型。
允许编译器将帧指针寄存器(在 IA32 上为 %ebp,在 x86 64 位平台上为 %rbp)用作通用寄存器。
缺省值为 -xregs=no%frameptr。
除非也用 -features=no%except 禁用了异常,否则 C++ 编译器将忽略 -xregs=frameptr。另请注意,-xregs=frameptr 是 -fast 的一部分,但除非同时指定 -features=no%except,否则 C++ 编译器将忽略此设置。
通过 -xregs=frameptr,编译器可以自由使用帧指针寄存器来改进程序性能。但是,这可能会限制调试器和性能测量工具的某些功能。堆栈跟踪、调试器和性能分析器不能对通过 -xregs=frameptr 编译的函数生成报告。
此外,对 Posix pthread_cancel() 的 C++ 调用将无法尝试查找清除处理程序。
如果直接调用或从 C 或 Fortran 函数间接调用的 C++ 函数会引发异常,不应该用 -xregs=frameptr 编译 C、Fortran 和 C++ 混合代码。如果使用 -fast 编译此类混合源代码,请在命令行中的 -fast 选项后添加 -xregs=no%frameptr。
由于 64 位平台上的可用寄存器更多,因此与 64 位代码相比,使用 -xregs=frameptr 编译更容易改进 32 位代码的性能。
注意:如果同时指定了 -xpg,编译器会忽略 -xregs=frameptr 并发出警告。而且,-xkeepframe 优先于 -xregs=frameptr。
SPARC 缺省值为 -xregs=appl,float。x86 缺省值为 -xregs=no%frameptr。在 x86 上 -xregs=frameptr 包含在 -fast 的扩展中。
强烈推荐您用 -xregs=no%appl,float 编译那些用于与应用程序链接的共享库的代码。至少共享库应该显式说明它如何使用应用程序寄存器,以便与这些库链接的应用程序知道这些寄存器分配。
例如,在某种全局意义上使用寄存器(例如,使用寄存器指向一些关键数据结构)的应用程序,需要确切地知道其代码未使用 -xregs=no%appl 编译的某个库如何使用应用程序寄存器,以便安全地与该库链接。
(Oracle Solaris) 将调试信息从对象文件链接到可执行文件。
-xs 与 -xs=yes 相同。-xdebugformat=dwarf 的缺省值与 -xs=yes 相同。-xdebugformat=stabs 的缺省值与 -xs=no 相同。
该选项控制可执行文件大小与为了调试而需要保留对象文件之间的权衡。对于 dwarf,请使用 -xs=no 使可执行文件保持较小但依赖于对象文件。对于 stabs,请使用 -xs 或 -xs=yes 以较大的可执行文件为代价避免对对象文件的依赖。该选项对程序的 dbx 性能或运行时性能几乎没有影响。
当编译命令强制链接时(即未指定 -c),没有对象文件和调试信息必须放置在可执行文件中。在这种情况下,将忽略 -xs=no(隐式或显式)。
该功能的实施方法是让编译器调整发出的对象文件中的节标志和/或节名称,然后告知链接程序对该对象文件的调试信息执行什么操作。因此它是一个编译器选项,而非链接程序选项。可以使一个可执行文件的某些对象文件使用 -xs=yes 进行编译,而其他对象文件使用 -xs=no 进行编译。
Linux 编译器接受但是忽略 -xs。Linux 编译器不接受 -xs={yes|no}。
(SPARC) 允许编译器假定未发生违反内存保护的情况。
该选项允许编译器使用 SPARC V9 架构中的无故障装入指令。
警告:
由于在发生诸如地址未对齐或段违规的故障时,无故障装入不会导致陷阱,因此您应该只对不会发生此类故障的程序使用该选项。因为只有很少的程序会导致基于内存的陷阱,所以您可以安全地将该选项用于大多数程序。对于显式依赖基于内存的自陷来处理异常情况的程序,请勿使用该选项。
交互:
对于 -m32 和 -m64 来讲,仅当与优化级别 -xO5 及以下 -xarch 值中的一个一起使用时,此选项才能有效:sparc、sparcvis、sparcvis2 或 sparcvis3。
(Oracle Solaris) 此选项使驱动程序在链接行上包括特殊映射文件。映射文件将文本、数据和 bss 段对齐到 n 指定的值。使用非常大的页面时,在适当的边界上对齐堆和堆栈段非常重要。如果未对齐这些段,将使用小页面直到下一个边界,这会导致性能下降。映射文件确保在适当边界上对齐段。
n 值必须是以下项之一:
SPARC:以下值有效:8K、64K、512K、2M、4M、32M、256M、1G 和 none。
x86:以下值有效:4K、8K、64K、512K、2M、4M、32M、256M、1G 和 none。
SPARC 和 x86 的缺省值为 none。
建议的用法如下所示:
SPARC 32-bit compilation: -xsegment_align=64K SPARC 64-bit compilation: -xsegment_align=4M x86 32-bit compilation: -xsegment_align=8K x86 64-bit compilation: -xsegment_align=4M
驱动程序将包括相应的映射文件。例如,如果用户指定 -xsegment_align=4M,驱动程序会将 -M install-directory/lib/compilers/mapfiles/map.4M.align 添加到链接行,其中 install-directory 是安装目录。然后,将在 4M 边界上对齐上述段。
请勿增加代码大小。
不执行增加代码大小的优化。示例:不解开循环。
为指令集和优化指定目标系统。
t 必须是以下值之一: native、native64、generic、generic64 和 platform-name。
-xtarget 选项允许简便快捷地指定发生在实际系统上的 -xarch、-xchip 和 -xcache 组合。-xtarget 的唯一含义在其扩展中。
-xtarget 值为:
在主机系统(32 位体系结构)上获得最佳性能。扩展至:-m32 -xarch=native -xchip=native -xcache=native。
此选项已过时。改用 -xtarget=native -m64。
为大多数 32 位平台获得最佳性能。这是缺省值并可扩展至:-m32 -xarch=generic -xchip=generic -xcache=generic。
此选项已过时。改用 -xtarget=generic -m64。
获取指定平台的最佳性能。
有效 SPARC 平台名称包括:ultra、ultra2、ultra2i、ultra1/140、ultra1/170、ultra1/200、ultra2/1170、ultra2/1200、ultra2/1300、ultra2/2170、ultra2/2200、ultra2/2300、ultra2e、ultra3、ultra3cu、ultra3i、ultra4、ultra4plus、ultraT1 ultraT2、ultraT2plus、T3、T4、T5、M5、sparc64vi、sparc64vii、sparc64viiplus、sparc64x 和 sparc64xplus。
注意:以下 SPARC 平台名称已过时,在将来的发行版中可能会删除:ultra、ultra2、ultra2e、ultra2i、ultra3、ultra3cu、ultra3i、ultra4 和 ultra4plus。
在 UltraSPARC V9 平台上针对 64 位 Oracle Solaris OS 进行编译由 -m64 标志指示。如果指定了 -xtarget,则 -m64 选项必须也出现,如下所示:
-xtarget=ultra2 ... -m64
否则,将使用 32 位内存模型。
在 x86 系统上,有效的平台名称包括:generic、native、pentium、pentium_pro、pentium3、pentium4、woodcrest、penryn、nehalem、sandybridge、ivybridge、haswell、westmere、barcelona 和 opteron。
在 64 位 x86 AMD Opteron 平台上针对 64 位 Oracle Solaris OS 进行编译由 -m64 标志指示,如下所示:
-xtarget=opteron -m64
否则,编译将恢复为 32 位 x86。
有关显示用于每个平台名称的实际 -xarch -xchip -xarch 值的 -xtarget 扩展,请参见 Fortran 用户指南。
此选项是一个宏。-xtarget 的每个特定值都会扩展到 -xarch、-xchip 和 -xcache 选项的特定值集。例如:-xtarget=ultra4 等效于:-xarch=sparcvis -xcache=64/32/4:8192/128/2 -xchip=ultra4。
要在正在运行的系统上确定任何 -xtarget 平台名称的扩展,请执行命令
f95 -xtarget=platform_name -dryrun |& grep ###
例如:
f95 -dryrun -xtarget=ultra4 |& grep ### ### command line files and options (expanded): ### -dryrun -xarch=sparcvis -xcache=64/32/4:8192/128/2 -xchip=ultra4
请注意:对于特定主机平台,-xtarget 在该平台上编译时扩展到的 -xarch、-xchip 或 -xcache 设置可能与 -xtarget=native 不同。
等效于 -temp=path。
-xthroughput 选项可告知编译器当多个进程同时在系统上运行时应用程序将会运行。
如果 -xthroughput=yes,编译器首选这样的优化:会稍微降低单个进程的性能,同时提高系统上所有进程完成的工作量。例如,编译器可能会选择在预取数据时不太主动。这样的选择会减少该进程消耗的内存带宽,由此该进程运行速度可能会减慢,但是也会留出更多内存带宽供其他进程共享。
缺省值为 -xthroughput=no。
与 -time 等效。
指定缺省数据映射。
该选项提供了一种灵活的方式来指定缺省数据类型的字节大小。
字符串 spec 的语法为:
type:bits,type:bits,...
允许的数据类型为 REAL、DOUBLE、INTEGER。接受的数据大小为 16、32、64 和 128。
该选项适用于已声明不带显式字节大小的所有变量,如 REAL XYZ 中所示。
允许的组合为:
real:32 real:64 double:64 double:128 integer:16 integer:32 integer:64
有用的映射为:
-xtypemap=real:64,double:64,integer:64
它将 REAL 和 DOUBLE 映射为 8 字节,但是不将 DOUBLE PRECISION 提升为 QUAD PRECISION。
另外还请注意,INTEGER 和 LOGICAL 的处理方式相同,并且 COMPLEX 映射为两个 REAL 数据元素。另外,DOUBLE COMPLEX 将以映射 DOUBLE 的方式进行处理。有关更多信息,请参见 Fortran 用户指南。
指定程序是否包含对动态绑定符号的引用。
-xunboundsym=yes 表示程序包含对动态绑定符号的引用。
-xunboundsym=no 表示程序不包含对动态绑定符号的引用。
缺省值为 -xunboundsym=no。
与 -unroll=n。 等效
启用向量库调用自动生成,和/或在支持 SIMD(Single Instruction Multiple Data,单指令多数据)的 x86 处理器上启用 SIMD 指令生成。使用此选项时,必须通过指定 -fround=nearest 来使用缺省的舍入模式。
-xvector 选项需要 -xO3 或更高的优化级别。如果优化级别未指定或低于 -xO3,编译将不会继续,同时会发出消息。
a 等效于以下值:
(Oracle Solaris) 允许编译器将循环内的数学库调用转换为对等效向量数学例程的单个调用(如果能够进行此类转换)。此类转换可提高那些循环计数较大的循环的性能。使用 no%lib 可以禁用此选项。
(SPARC) 对于 -xarch=sparcace 和 -xarch=sparcaceplus,指示编译器使用浮点和整数 SIMD 指令来提高某些循环的性能。与其他 SPARC 平台的该项相对,-xvector=simd 在指定了任何 -xvector 选项(-xvector=none 和 -xvector=no%simd 除外)的 -xarch=sparcace 和 -xarch=sparcaceplus 下始终有效。此外,对于 -xvector=simd,-O 需要大于 3,否则会被跳过而不显示任何警告。
对于所有其他 -xarch 值,指示编译器使用可视化指令集 [VIS1、VIS2、ViS3 等] SIMD 指令来提高某些循环的性能。从根本上来说,使用显式 -xvector=simd 选项,编译器将执行循环转换,从而允许生成特殊向量化的 SIMD 指令以减少循环迭代数。仅当 -O 大于 3 并且 -xarch 为 sparcvis3 及以上时,-xvector=simd 选项才有效。否则,将跳过 -xvector=simd 而不显示任何警告。
(x86) 指示编译器使用本机 x86 SSE SIMD 指令来提高某些循环的性能。在 x86 中,缺省情况下以可产生有利结果的优化级别 3 和更高级别使用流扩展。使用 no%simd 可以禁用该选项。
仅当目标体系结构中存在流扩展(即目标 ISA 至少为 SSE2)时,编译器才会使用 SIMD。例如,可在现代平台中指定 -xtarget=woodcrest、-xarch=generic64、-xarch=sse2、-xarch=sse3 或 -fast 来使用它。如果目标 ISA 没有流扩展,子选项将无效。
完全禁用该选项。
此选项已过时,改为指定 -xvector=lib。
此选项已过时,改为指定 -xvector=%none。
在 x86 平台上的缺省值为 -xvector=simd,在 SPARC 平台上的缺省值为 -xvector=%none。如果指定不带子选项的 -xvector,在 x86 Oracle Solaris、SPARC Solaris 和 Linux 平台上,编译器将分别采用 -xvector=simd,lib、-xvector=lib 和 -xvector=simd。
该选项会覆盖之前的实例,所以 -xvector=%none 会撤消之前指定的 -xvector=lib。
在装入步骤中,编译器包含libmvec库。如果在编译时指定 -xvector,则还必须在链接时指定它。
与 -vpara 等效。
存在重定位时不构建库。
如果保持重定位,则不构建库。-ztext 的一般用途是验证生成的库是否为纯文本;指令全部都是与位置无关的代码。因此,它通常与 -G 和 -pic 一起使用。
使用 -ztext 时,如果 ld 在文本段中找到了不完整的重定位,则不会生成库。如果它在数据段中找到了不完整的重定位,则通常会生成库;数据段是可写的。
不使用 -ztext 时,ld 会生成库,与有无重定位无关。
如果您不知道对象文件是否是使用 -pic 生成的,则一种典型用法是利用源文件和对象文件生成库。
-ztext 和 -xprofile=collect 不应同时使用。-ztext 禁止在只读存储器中进行依赖于位置的符号重定位,而 -xprofile=collect 会在可写存储器中生成静态初始化的、依赖于位置的符号重定位。
其他参数当作链接程序选项参数或者 f95 兼容对象程序(通常由之前的运行生成)或 f95 兼容的例程库的名称。这些程序连同指定的任何编译的结果将按给定的顺序链接,以在 -o 选项指定的文件中生成可执行程序,或者未指定 -o 选项时在名为 a.out 文件中生成可执行程序。
带有以下后缀的文件可能会出现在编译器命令行上。后缀通常标识文件的类型,并确定编译器如何对其进行处理。
固定格式的 Fortran 源文件。
自由格式的 Fortran 90、Fortran 95 或 Fortran 2003 源文件。
包含预处理程序指令的固定格式的 Fortran 源文件。这些文件在进行编译之前由 fpp(1) 进行预处理。(另请参见 -xpp= 选项。)
包含预处理程序指令的自由格式的 Fortran 95 源文件。这些文件在进行编译之前由 fpp(1) 进行预处理。(另请参见 -xpp= 选项。)
汇编程序源文件。
内联汇编程序扩展代码模板文件。由编译器用来将对选定例程的调用扩展到内联代码。有关内联模板文件的更多信息,请参见 inline(1) 手册页和 -inline 选项标志。
要传递给链接程序的对象文件。
要传递给链接程序的共享对象文件或库。
传递给链接程序或从中搜索 MODULE 子程序(请参见 -M 选项标志)的库文件。
包含预编译的 MODULE 程序单元的文件。这些文件由编译器生成。请参见 -M 选项标志。
f95 允许常规编译器指令行以 C$PRAGMA(仅限采用固定格式)或 !$PRAGMA 开头,并且允许大写或小写。
!$PRAGMA C(list_of_subprogram_names) !$PRAGMA SUN UNROLL n !$PRAGMA WEAK function_name !$PRAGMA SUN OPT=n !$PRAGMA PIPELOOP=n !$PRAGMA SUN_PREFETCH_READ_ONCE (name) !$PRAGMA SUN_PREFETCH_READ_MANY (name) !$PRAGMA SUN_PREFETCH_WRITE_ONCE (name) !$PRAGMA SUN_PREFETCH_WRITE_MANY (name) !$PRAGMA IGNORE_TKR list !$PRAGMA ASSUME (expression [, probability])
f95 可识别 OpenMP API 并行化指令。OpenMP 是针对所有 Oracle Solaris Studio 编译器建议的显式并行化模型。
在本发行版中,f95 编译器接受 OpenMP Fortran 95 API 版本 2.5。这些带有标记 !OMP。
有关 Oracle Solaris Studio OpenMP 实现的详细信息,请参见 OpenMP API 用户指南。
下方所示路径假定 Oracle Solaris Studio 软件安装的根目录由 <install-directory> 指示。要确定实际路径,请与系统管理员联系。
要使用 f95,请将以下内容添加到搜索路径的开头:
<install-directory>/bin/
要访问 f95 手册页,请将以下内容添加到 MANPATH 环境变量:
<install-directory>/man/
指定编译器编写 .mod 模块文件所在目录的路径。另请参见 -moddir,它优先于 MODDIR 环境变量的设置。
通常,无需设置 LD_LIBRARY_PATH。如果需要这样做,可能是因为安装存在一些差异或者某些可执行文件生成不正确。
将 LD_LIBRARY_PATH 环境变量设置为:
<install-directory>/lib/
与 LD_LIBRARY_PATH 环境变量类似,LD_LIBRARY_PATH_64 也可设置用于搜索 64 位库的路径。
在支持 64 位的 Oracle Solaris OS 中运行而在 32 位模式下链接时,将忽略 LD_LIBRARY_PATH_64。如果仅定义了 LD_LIBRARY_PATH,它将用于 32 位和 64 位链接。如果定义了 LD_LIBRARY_PATH 和 LD_LIBRARY_PATH_64,将使用 LD_LIBRARY_PATH 进行 32 位链接,使用 LD_LIBRARY_PATH_64 进行 64 位链接。
有关这些环境变量的更多信息,请参见《链接程序和库指南》。
如果使用 LD_RUN_PATH,请注意,对于 f95,LD_RUN_PATH 与 -R 不同。(对于 ld.so,它们相同。)有关详细信息,请参见 Fortran 用户指南中的 -R。
通过为 STACKSIZE 环境变量指定值(单位为千字节),可以在多线程程序中,设置每个从线程使用的堆栈大小:
% setenv STACKSIZE 8192
将每个从线程的堆栈大小设置为 8 MB。
32 位系统上的缺省线程堆栈大小为 4 兆字节。在 64 位系统上为 8 兆字节。
STACKSIZE 环境变量还接受带有 B(字节)、K(千字节)、M(兆字节)或 G(千兆字节)后缀的数值。缺省单位为千字节。(请注意,术语“千字节”实际上表示 1024 字节。)
有关详细信息,请参见 Fortran 编程指南中有关并行化的一章。
控制 OpenMP 运行时库发出的警告消息。如果设置为 TRUE,库会将警告消息发出到 stderr。设置为 FALSE 可禁用警告。缺省值为 FALSE。
控制每个辅助线程的任务结束状态,可以设置为 SPIN 或 SLEEP ns。缺省值为 SLEEP。有关这些以及其他 OpenMP 环境变量的详细信息,请参见 OpenMP API 用户指南。
设置要在应用程序执行期间使用的线程数。有关这些以及其他 OpenMP 环境变量的详细信息,请参见 OpenMP API 用户指南。
编译器通常会在 /tmp 目录中创建临时文件。您可以通过将环境变量 TMPDIR 设置为选择的目录来指定其他目录。(如果 TMPDIR 不是有效的目录,则编译器将使用 /tmp)。-temp 选项优先于 TMPDIR 环境变量。
如果已设置,会在使用 -xprofile=collect 编译的程序执行时将从中收集的分析数据存储在当前工作目录中名为 profdir 的目录中。如果编译时在 -xprofile=collect[:profdir] 中指定了可选参数 :profdir,则 SUN_PROFDATA 没有任何作用。
如果已设置,会将从使用 -xprofile=collect 编译的程序中收集的分析数据存储在 UNIX 目录名为 dirname 的目录中。如果 dirname 不是绝对位置,则在程序执行时会相对于当前工作目录来解释该位置。如果编译时在 -xprofile=collect[:profdir] 中指定了可选参数 :profdir,则 SUN_PROFDATA_DIR 没有任何作用。
设置该环境变量可启用异步分析收集。在异步分析收集模式下,每隔一定时间(持续时间以秒为单位指定)从正在运行的进程收集分析数据。
SUN_PROFDATA_ASYNC_INTERVAL 没有任何作用,除非环境变量 LD_AUDIT、LD_AUDIT_32 或 LD_AUDIT_64 之一设置为 /usr/lib/{,64}/libxprof_audit.so.1。
异步分析收集需要 MT 安全且基于 mmap 的内存分配器,例如 libumem (3LIB) ,通过将 UMEM_OPTIONS 设置为 backend=mmap 指定基于 mmap 的分配。
示例:要从 64 位进程启用时间间隔为 1 分钟的异步分析收集,请指定以下环境变量:
$ env LD_AUDIT_64=/usr/lib/64/libxprof_audit.so.1 \ SUN_PROFDATA_ASYNC_INTERVAL=60 UMEM_OPTIONS=backend=mmap \ 64-bit-program [program-args]
如果设置为非零值,可将来自异步收集器的详细消息输出到 stderr。除非启用异步分析收集,否则 SUN_PROFDATA_ASYNC_VERBOSE 没有任何作用。
如果设置为 1,可使分析器清除进程调用 exit() 与进程退出完成期间的数据结构。如果设置为 0,可避免在应用程序调用 exit() 之前尚未终止的应用程序线程破坏性干扰分析收集。有关详细信息,请参见 exit (3C) 。缺省设置为 SUN_PROFDATA_CLEANUP_AFTER_EXIT=0。
SUN_PROFDATA_REPLACE 表示在运行时检测到对象文件的更改版本时,要重置的分析数据范围。使用 SUN_PROFDATA_REPLACE 可确保分析数据与指定程序单元范围内分析的程序保持一致。
SUN_PROFDATA_REPLACE 的值及其含义如下所示:
重置已更改对象文件的分析数据。
重置包含已更改对象文件的程序中所有对象文件的分析数据。
如有任何对象文件发生更改均重置分析目录的全部内容。
SUN_PROFDATA_REPLACE 的缺省设置为 SUN_PROFDATA_REPLACE=objfile。
示例:
% setenv SUN_PROFDATA_REPLACE program (csh) $ export SUN_PROFDATA_REPLACE=program (ksh)
如果采用该设置,当执行包含已更改对象文件的程序时,程序中所有对象文件的分析数据都会重置。相关选项包括 -xOn 和 -xipo=n。
有关可能出现在编译器命令行上的由名称后缀标识的文件,请参见上文的“文件后缀”部分。
此外,编译器还使用以下文件:
标准 C 系统库
标准系统数学库
编译器临时文件
为了由 prof(1) 进行分析而生成的文件
为了由 gprof(1) 进行分析而生成的文件
以下项目位于 Oracle Solaris Studio 安装目录(由 <install-directory> 指示)中。
Fortran 预处理程序
C 预处理程序
从中搜索 f95 INCLUDE 语句的路径
f95 IEEE 运算类型定义
以下库可能同时存在 .so 和 .a 两个版本。注意:应该避免混用静态和共享 Fortran 运行时库;始终与最新的共享 Fortran 库链接。
f95 支持内部函数
f95-UNIX 接口
Fortran 95 I/O
Fortran 95 数组内部函数库
Fortran 95 区间数组内部函数库
f77 Fortran 77 兼容性库
Oracle Solaris Studio 数学库
Oracle Solaris Studio 间隔数学库
使用 -xprofile=collect 编译的程序的初始化和终结化处理程序
对于 Solaris 发行版 10,要使用 -xprofile 选项,必须安装新的共享库 libxprof.so.1、libxprof_audit.so.1 和 libtdf.so.1。这些库预安装在最新的 Oracle Solaris 发行版上。
Oracle 技术网 Web 站点上提供了本发行版的完整 Oracle Solaris Studio 文档:http://www.oracle.com/technetwork/server-storage/solarisstudio/documentation/index.html。
有关更多信息,请参见以下手册页: asa (1) 、 cc (1) 、 dbx (1) 、 fpp (1) 、 fpr (1) 、 fsplit (1) 、 gprof (1) 、 ld (1) 、 perror (3F) 、 prof (1) 、 tcov (1) 。
有关详细信息,请参见以下手册:
Fortran 用户指南
Fortran 编程指南
OpenMP API 用户指南
数值计算指南
Studio 性能分析器
Fortran 库参考
Oracle Solaris OS《链接程序和库指南》
使用 dbx 调试程序
《Sun Performance Library User's Guide》:本 Oracle Solaris Studio 发行版包括 Sun 性能库,该性能库包含用于计算线性代数和傅立叶变换的运算子例程和函数。
有关更多的信息,请访问 Oracle Solaris Studio Web 站点:
http://www.oracle.com/technetwork/server-storage/solarisstudio
f95 自身生成的诊断不需要加以说明。链接程序可生成偶发消息。