本附录列出此发行版及早期发行版 Fortran 编译器中新增和更改的功能。
Solaris Studio Fortran 95 编译器 8.5 版本是 Oracle Solaris Studio 12.2 发行版中的一个组件。
支持 SPARC VIS3 版本的 SPARC-V9 指令集。如果使用 -xarch=sparcvis3 选项进行编译,编译器可以使用 SPARC-V9 指令集、UltraSPARC 扩展(包括可视指令集 (Visual Instruction Set, VIS) 版本 1.0)、UltraSPARC-III 扩展(包括可视指令集 (Visual Instruction Set, VIS) 版本 2.0)、混合乘加指令和可视指令集 (Visual Instruction Set, VIS) 版本 3.0)中的指令。
在基于 x86 的系统上,-xvector 选项的缺省值已更改为 -xvector=simd。在基于 x86 的系统上,缺省情况下以可产生有利结果的优化级别 3 和更高级别使用流扩展。可以使用子选项 no%simd 将其禁用。在基于 SPARC 的系统上,缺省值为 -xvector=%none。请参见3.4.179 –xvector[= [[ no%]lib, [no%] simd, %none] ]
现在支持 AMD SSE4a 指令集。使用 -xarch=amdsse4a 选项进行编译。
新增的 -traceback 选项使可执行文件在出现严重错误时显示栈跟踪。使用此选项时,可执行文件将捕获一组信号,并显示栈跟踪和核心转储,然后退出。如果多个线程都生成一个信号,则只为第一个线程生成栈跟踪。要使用回溯,请在使用 f95、cc 或 CC 链接程序时添加 -traceback 选项。为方便起见,编译时也会接受该选项,不过会将其忽略。将 -traceback 选项与 -G 选项结合使用来创建共享库的做法是错误的。请参见3.4.95 –traceback[={ %none|common|signals_list}]
-mt 选项已更改为 -mt=yes 或 -mt=no。-mt=yes 选项确保按正确的顺序链接库。请参见3.4.56 -mt[={ yes|no}]
-xprofile=tcov 选项经过增强,支持可选的配置文件目录路径名,还能够生成与 tcov 兼容的反馈数据。请参见3.4.164 –xprofile=p。
新增的 -xkeepframe[=[%all,%none ] 选项禁止对指定的函数进行与栈相关的优化。%all 禁止对所有代码进行与栈相关的优化。%none 允许对所有代码进行与栈相关的优化。缺省值为 -xkeepframe=%none。请参见3.4.135 –xkeepframe[=[ %all,%none,name,no% name]]
已经实现了其他 F2003 功能。请参见4.6 Fortran 200x 的功能
IVDEP 指令指示编译器忽略在循环中找到的部分或全部对数组引用的循环附带依赖性,以进行优化。这样,编译器将可以执行通过其他方式不能实现的各种循环优化。-xivdep 可用于禁用 IVDEP 指令或确定指令的解释方式。请参见2.3.3 IVDEP 指令
对于编译器在 x86 平台上的 Solaris OS 或者 Linux OS 上创建的目标文件,如果应用程序代码包含参数或返回值为 _m128/_m64 数据类型的函数,则这些目标文件与先前版本的编译器不兼容。使用 .il 内联函数文件、汇编程序代码或调用这些函数的 asm 内联语句的用户,也需要了解这些不兼容的情况。
新增 x86 —xtarget 值 woodcrest、penryn、nehalem。
新增 SPARC —xtarget 值 ultraT2plus 和 sparc64vii。
新增 x86 —xarch 和 —xchip 值 ssse3、sse4_1、sse4_2、core2、penryn、nehalem、barcelona。
新增 SPARC —xarch 和 —xchip 值 sparcima、sparc64vii 和 ultraT2plus。
-xprofile=collect 和 -xprofile=use 选项在多线程动态链接应用程序的分析方面提供了改进的支持功能。
-xcrossfile=1 选项成为 -xipo=1 选项的别名。
在 Solaris 平台上,-xpec[= yes|no] 选项会生成可重新编译用于自动调优系统 (Automatic Tuning System, ATS) 的 PEC 二进制文件。
现在,针对 -x03 或更高优化级别隐式启用 -xdepend 选项,该选项不再包括在 -fast 选项的扩展中。
支持 OpenMP 3.0 任务处理。
-xannotate[=yes| no](仅限 SPARC 平台)指示编译器创建稍后可用 binopt(1) 等二进制修改工具转换的二进制文件。
四精度 (REAL*16) 已在 x86 平台上实现。REAL*16 是 128 位 IEEE 浮点。
编译器通常会在 /tmp 目录中创建临时文件。可以通过设置 TMPDIR 环境变量来指定其他目录。
cpu_time() Fortran 内例程的行为在 Solaris 和 Linux 平台之间有所不同。
Fortran 2003 IMPORT 语句现已实现。
目前,Fortran 编译器适用于以下 Linux(x86 和 x64)分发包: SuSe Linux Enterprise Server 9 with Service Pack 3(或更新版本)、Red Hat Enterprise Linux 4 以及其他基于 2.6 内核的 Linux 分发包(尽管不会对这些分发包提供正式支持)。
使用 -m64 创建 64 位可执行文件和共享库。
使用 -xarch 新标志替换已过时的标志。
-xtarget 和 -xchip 的新值为 UltraSPARC T2 和 SPARC64VI 处理器提供代码生成功能。
-fma=fused 新标志允许在支持乘加指令的处理器上生成这些指令。
-xhwcprof 新标志为数据空间分析启用编译器支持。
-xinstrument 新标志使线程分析器支持性能分析。
-xregs=frameptr 已添加至 x86 的 -fast。
提供 -xarch=sse2 和 -xia 选项支持在 Solaris x86 平台上执行区间运算。
x86 平台和 SPARC 平台均接受显式预取指令。(—xprefetch=explicit)
调试信息的缺省格式由 "stabs" 标准格式更改为 "dwarf" 标准格式。( -xdebugformat=dwarf).
新的 -xmodel 选项:使用新的 -xmodel 选项,可以在 64 位 AMD 体系结构上指定内核、小型或中型内存模型。如果全局变量和静态变量的大小超过 2 GB,请指定 -xmodel=medium。否则,请使用缺省设置 -xmodel=small。请参见3.4.148 –xmodel=[small | kernel | medium]。
为 x86 SSE2 平台扩展的 -xvector 选项:使用 -xvector 选项,可以自动生成向量库函数调用和/或生成 SIMD(Single Instruction Multiple Data,单指令多数据)指令。现在,此选项在 x86 SSE2 平台上提供扩展的语法。请参见3.4.179 –xvector[= [[ no%]lib, [no%] simd, %none] ]。
STACKSIZE 环境变量已增强:STACKSIZE 环境变量的语法已加以改进,可以包括单位关键字。
-xpagesize 选项在 x86 平台上可用:现在,在 x86 平台以及 SPARC 上,启用了 -xpagesize、-xpagesize_heap 和 -xpagesize_stack 选项。请参见3.4.155 –xpagesize= size。
启用了新的 UltraSPARC T1 和 UltraSPARC IV+ 目标:-xarch、-xchip、-xcache 和 -xtarget 的值支持新的 UltraSPARC 处理器。请参见3.4.175 –xtarget=t。
针对 AMD-64 处理器进行编译
此发行版引入了 -xarch=amd64 和 -xtarget=opteron,用于编译要在 64 位 x86 平台上运行的应用程序。
在 big-endian 和 little-endian 平台之间进行文件共享
新的编译器标志 -xfilebyteorder 提供了跨平台的二进制 I/O 文件支持。
在 Solaris 操作系统 x86 平台上提供了 OpenMP
对于此发行版的 Solaris Studio,可以使用 OpenMP API 在 Solaris x86 平台以及 Solaris SPARC 平台上实现共享内存并行性。这两种平台现在都启用相同的功能。
不再支持 OpenMP 选项 -openmp=stubs
OpenMP“存根”库是为了方便用户而提供的。要编译调用 OpenMP 库函数但忽略 OpenMP Pragma 的 OpenMP 程序,请使用 -openmp 选项编译该程序,并使用 libompstubs.a 库链接目标文件。例如: % f95 omp_ignore.c -lompstubs
不支持同时与 libompstubs.a 和 OpenMP 运行时库 libmtsk.so 进行链接,因为这样可能会导致意外的行为。
针对 x86 Solaris 平台发行的 Fortran 95 编译器:
此发行版 Solaris Studio 实现了在 Solaris OS x86 平台上使用 Fortran 编译器。使用 -xtarget 值(generic、native、386、486、pentium、pentium_pro、pentium3 或 pentium4)进行编译,可以在 Solaris x86 平台上生成可执行文件。x86 平台上的缺省值为 -xtarget=generic。
以下 f95 功能尚未在 x86 平台上实现,只能在 SPARC 平台上使用:
区间运算(编译器选项 -xia 和 -xinterval)
四倍(128 位)运算(例如 REAL*16)
IEEE 内部模块 IEEE_EXCEPTIONS、IEEE_ARITHMETIC 和 IEEE_FEATURES
sun_io_handler 模块
并行化选项(如 -autopar 和 -openmp)。
以下 f95 命令行选项只能在 x86 平台上使用,不能在 SPARC 平台上使用: -fprecision、-fstore 和 -nofstore
以下 f95 命令行选项只能在 SPARC 平台上使用,不能在 x86 平台上使用:-xcode、-xmemalign、-xprefetch、-xcheck、-xia、-xinterval、-xipo、-xjobs、-xlang、-xlinkopt、-xloopinfo、-xpagesize、-xprofile_ircache、-xreduction、-xvector、-depend、-openmp、-autopar、-vpara、-XlistMP。此外,在 x86 平台上,-fast 增加了 -nofstore。
提高了运行时性能:
使用此发行版,大多数应用程序的运行时性能会显著提高。为获得最佳效果,请使用较高的优化级别 -xO4 或 -xO5 进行编译。在这些优化级别上,编译器现在可以内联所包含的过程,以及那些带假定形状参数、可分配参数或指针参数的过程。
Fortran 2003 命令行内部函数:
Fortran 2003 标准引入了三个新的内部函数,用来处理命令行参数和环境变量。这三个函数已在此发行版的 f95 编译器中实现。新增的内部函数包括:
GET_COMMAND(command, length, status)
以 command 返回调用该程序的整个命令行。
GET_COMMAND_ARGUMENT(number, value, length, status)
以值返回命令行参数。
GET_ENVIRONMENT_VARIABLE(name, value, length, status, trim_name)
返回环境变量的值。
新增和更改的命令行选项:
以下 f95 命令行选项是此发行版中新增的选项。有关详细信息,请参见第 3 章。
-xipo_archive={ none | readonly | writeback }
允许跨文件优化以包括归档 (.a) 库。(仅适用于 SPARC)
-xprefetch_auto_type=[no%]indirect_array_access
为间接访问的数组生成间接预取。(仅适用于 SPARC)
-xprofile_pathmap=collect_prefix:use_prefix
设置配置文件数据文件的路径映射。如果分析所用的目录不是以前使用 -xprofile=collect 进行编译时所用的目录,请将 -xprofile_pathmap 选项和 -xprofile=use 选项一起使用。
在此发行版的 f95 中,以下命令行选项的缺省值已更改。
-xprefetch 的缺省值为 -xprefetch=no%auto,explicit。
-xmemalign 的缺省值为 -xmemalign=8i;当使用其中一个 -xarch=v9 选项进行编译时,缺省值为 -xmemalign=8f。
当使用其中一个 -xarch=v9 选项进行编译时,-xcode 的缺省值为 abs44。
要使用以前的编译器版本中使用的缺省值进行编译,请明确指定以下选项:
-xarch=v8 -xmemalign=4s -xprefetch=no(32 位编译);-xcode=abs64 -xprefetch=no(64 位编译)。
缺省 SPARC 体系结构是 V8PLUS:
缺省 SPARC 架构不再是 V7。在此 Solaris Studio 9 发行版中,对 -xarch=v7 的支持有限。新的缺省值为 V8PLUS (UltraSPARC)。使用 -xarch=v7 进行编译将被作为使用 -xarch=v8 进行编译来处理,因为 Solaris 8 操作系统仅支持 -xarch=v8 或更高版本。
要在 SPARC V8 系统(例如,SPARCStation 10)上进行部署,请使用 -xarch=v8 显式编译。提供的系统库将在 SPARC V8 架构上运行。
要在 SPARC V7 系统(例如,SPARCStation 1)上进行部署,请使用 -xarch=v7 显式编译。提供的系统库将使用 SPARC V8 指令集。对于 Solaris Studio 9 发行版,只有 Solaris 8 OS 支持 SPARC V7 体系结构。如果遇到 SPARC V8 指令,该 OS 将在软件中解释该指令。程序将会运行,但性能会下降。
OpenMP: 增大了最大线程数:
OMP_NUM_THREADS 和多任务库的最大线程数已从 128 增至 256。
OpenMP: 自动确定变量的作用域:
此发行版的 Fortran 编译器中实现了可进行共享内存并行编程的 OpenMP API,因而能够在并行区域中自动确定变量的作用域。有关详细信息,请参见《OpenMP API 用户指南》。(此版本只在 SPARC 平台上实现了 OpenMP。)
增强的 -openmp 选项:
-openmp 选项标志已增强,有助于调试 OpenMP 程序。要使用 dbx 调试 OpenMP 应用程序,请使用以下选项进行编译:
-openmp=noopt -g
随后您可以使用 dbx 在并行区域内设置断点,并显示变量的内容。
多进程编译:
将 -xjobs=n 和 -xipo 一起指定,过程间优化器将调用最多 n 个代码生成器实例,以编译命令行上列出的文件。该选项可大大缩短在多 CPU 机器上生成较大应用程序所需的时间。请参见3.4.134 –xjobs= n。
使用 PRAGMA ASSUME进行断言:
ASSUME pragma 是此发行版编译器中的新增功能。该 pragma 提示编译器在编译过程中某些点上的条件程序员确信为真。这有助于编译器更好地优化代码。程序员也可以使用断言在程序运行时检查程序的合理性。请参见2.3.1.8 ASSUME 指令和3.4.111 –xassume_control[ =keywords]。
更多 Fortran 2003 功能:
在此版本的 Fortran 编译器中,已经实现了 Fortran 2003 标准中的以下功能。第 4 章中描述了这些功能。
异常和 IEEE 运算:
在 Fortran 语言中,新的内部模块 IEEE_ARITHMETIC 和 IEEE_FEATURES 提供了对异常和 IEEE 算法的支持。请参见4.6.2 IEEE 浮点异常处理。
与 C 之间的互操作性:
Fortran 标准提供了一种引用 C 语言过程的方法,以及一种指定 Fortran 子程序可从 C 函数引用的方法。它还提供了一种声明与外部 C 变量链接的全局变量的方法。请参见4.6.1 与 C 函数之间的互操作性。
PROTECTED 属性
现在,Fortran 编译器接受 Fortran 2003 的 PROTECTED 属性。PROTECTED 对模块实体的使用进行了限制。具有 PROTECTED 属性的对象只能在声明这些对象的模块中定义。4.6.4 PROTECTED 属性。
ASYNCHRONOUS I/O 说明符
编译器可识别 I/O 语句中的 ASYNCHRONOUS 说明符:
ASYNCHRONOUS=[’YES’ | ’NO’]
与传统 f77 之间的兼容性得到增强:
很多新增功能增强了 Fortran 编译器与传统 Fortran 77 编译器 f77 之间的兼容性。其中包括变量格式表达式 (variable format expression, VFE)、长标识符、-arg=local 和 -vax 编译器选项。请参见第 3 章和第 4 章。
I/O 错误处理程序:
通过两个新函数,用户可以为逻辑单元上的格式化输入指定自己的错误处理例程。这些例程在4.7.1 I/O 错误处理例程、相关手册页以及《 Fortran 库参考》中进行说明。
无符号整数:
在此发行版中,Fortran 编译器接受一种新的数据类型 (UNSIGNED) 作为对该语言的一种扩展。请参见4.5 无符号整数。
设置首选的栈/堆页面大小:
新的命令行选项 -xpagesize 允许正在运行的程序在程序启动时设置首选的栈和堆页面大小。请参见3.4.155 –xpagesize= size。
更快和增强的分析:
此发行版引入了新的命令行选项 -xprofile_ircache= path,可减少分析反馈过程中“使用”阶段的编译时间。请参见3.4.165 –xprofile_ircache[ =path]。另请参见3.4.166 –xprofile_pathmap= collect_prefix:use_prefix。
增强的“已知库”:
-xknown_lib 选项已增强,可以包括基本线性代数库 (Basic Linear Algebra library, BLAS) 中的更多例程。请参见3.4.136 –xknown_lib=library_list。
链接时优化:
使用新的 -xlinkopt 标志进行编译和链接,可以在链接时调用后优化器,以便对所生成的二进制目标代码应用一些高级性能优化。请参见3.4.144 –xlinkopt[={ 1|2|0}]。
局部变量初始化:
对 -xcheck 选项标志进行了新扩展,从而允许对局部变量进行特殊的初始化。使用 -xcheck=init_local 进行编译时,如果在程序对局部变量进行赋值前使用了该变量,则会将该变量初始化为一个有可能导致运算异常的值。请参见3.4.115 –xcheck=keyword。
Fortran 95 编译器中并入了 Fortran 77 功能
此发行版的 Forte Developer 软件用 f95 编译器中的新增功能替代了 f77 编译器。f77 命令是一个调用 f95 编译器的脚本:
the command: f77 options files libraries becomes a call to the f95 compiler:: f95 -f77=%all -ftrap=%none options files -lf77compat libraries |
有关 Fortran 77 兼容性和不兼容性的详细信息,请参见4.12 混合语言。
Fortran 77 兼容性模式:
新的 -f77 标志选择各种不同的兼容性功能,使编译器能够接受很多通常与 Fortran 95 不兼容的 Fortran 77 结构和约定。请参见3.4.23 –f77[= list]和4.12 混合语言。
对使用非标准别名的“旧式”程序进行编译:
f95 编译器必须假定它所编译的程序符合 Fortran 95 有关通过子程序调用、全局变量、指针和过度索引来设置变量别名的标准。很多“旧式”传统程序特意使用别名技术解决早期版本的 Fortran 语言中存在的缺点。请使用新的 -xalias 标志,让编译器知道程序与标准偏离的程度,以及预计会出现哪种别名问题。在某些情况下,只有在指定了正确的 -xalias 子选项时,编译器才会生成正确的代码。严格遵循标准的程序可以建议编译器不必考虑别名问题,从而可使性能得到一定的提高。请参见3.4.108 –xalias[= keywords]以及《Fortran 编程指南》中有关移植的章节。
增强的 MODULE 功能:
新标志 -use=list 可强制将一个或多个隐式 USE 语句添加到每个子程序中。请参见3.4.100 –use= list。
新标志 -moddir=path 可控制编译器在哪里写入已编译的 MODULE 子程序(.mod 文件)。请参见3.4.55 –moddir= path。新环境变量 MODDIR 也可以控制写入 .mod 文件的位置。
-Mpath 标志现在可以接受在目录路径、归档 (.a) 文件或模块 (.mod) 文件中搜索 MODULE 子程序。编译器通过检查其内容来确定文件的类型;实际的文件扩展名会被忽略。请参见3.4.53 –Mpath。
现在,编译器在搜索模块时,先在写入模块文件的目录中查找。
有关详细信息,请参见4.9 模块文件。
使用 -Xlist 执行增强的全局程序分析:
此发行版的 f95 编译器在由 -Xlist 标志提供的全局程序分析中添加了许多新检查。新的 -XlistMP 子选项在静态程序分析方面开创了一个新的领域:OpenMP 并行化指令验证。有关详细信息,请参见3.4.106 –Xlist[ x]、Forte Developer 的《OpenMP API 用户指南》以及《Fortran 编程指南》中有关程序分析和调试的章节。
使用 -xknown_lib=library 标识已知库:
新选项 -xknown_lib=library 指示编译器将对某些已知库的引用作为内部函数处理,并忽略用户提供的任何版本。这样,编译器就可以基于其对库的特殊了解来对库调用进行优化。在此发行版中,已知库的名称仅限于 blas 和 intrinsics,前者代表 Sun 性能库中 BLAS 例程的一个子集,后者则用于忽略 Fortran 95 标准内部函数以及由用户提供的任何上述例程版本的显式 EXTERNAL 声明。请参见3.4.136 –xknown_lib=library_list。
忽略接口中的哑元参数类型:
新增指令 !$PRAGMA IGNORE_TKR { list_of_variables} 使编译器在解析特定调用时,忽略在通用过程接口中出现的指定哑元参数名称的类型、种类和等级。对于基于参数类型、种类或等级调用特定库例程的包装器来说,使用此指令可大大简化为其编写通用接口的工作。有关详细信息,请参见2.3.1.2 IGNORE_TKR 指令。
增强的 -C 运行时数组检查:
在此发行版的 f95 编译器中,使用 -C 选项进行的运行时数组下标范围检查得到了增强,可以包括数组一致性检查。如果在数组段不一致的地方执行数组语法语句,就会导致运行时错误。请参见3.4.6 –C。
引入 Fortran 2003 功能:
在此发行版的 f95 中,实现了某些为下一个 Fortran 标准而建议的新的格式化 I/O 功能。这些功能包括 DECIMAL=、ROUND= 和 IOMSG= 说明符,它们可以出现在 OPEN、READ、WRITE、PRINT 和 INQUIRE 语句中。另外,还实现了 DP、DC、RP 和 RC 编辑描述符。有关详细信息,请参见4.6.9 Fortran 2003 格式化 I/O 功能。
格式化 I/O 中的舍入:
新增的选项标志 -iorounding 可以为格式化 I/O 设置缺省舍入模式。该模式(processor-defined 或 compatible),对应于作为 Fortran 2003 功能的一部分而实现的 ROUND= 说明符。请参见3.4.45 –iorounding[={ compatible|processor-defined}]。
删除的过时标志:
下列标志已从 f95 命令行中删除:
-db -dbl
f95 编译器中没有实现下列 f77 编译器标志,因此这些标志也被视为过时:
-arg=local -i2 -i4 -misalign -oldldo -r8 -vax-xl -xvpara -xtypemap=integer:mixed
栈溢出检查:
在使用新的 -xcheck=stkovf 标志进行编译时,将在子程序入口处添加对栈溢出条件的运行时检查。如果检测到栈溢出,就会出现 SIGSEGV 段故障。对于在栈中分配了较大数组的多线程应用程序,其中的栈溢出可能导致相邻线程栈中出现隐性数据破坏。如果怀疑存在栈溢出,请使用 -xcheck=stkovf 编译所有例程。请参见3.4.115 –xcheck=keyword。
新的缺省线程栈大小:
在此版本中,SPARC V8 平台上的缺省从属线程栈大小已增加到 4 MB;而 SPARC V9 平台则增加到 8 MB。有关详细信息,请参见《Fortran 编程指南》的“并行化”一章中有关栈和栈大小的讨论。
增强的过程间优化:
编译器可使用 -xipo=1 跨所有源文件执行内联操作。此发行版增加了 -xipo=2,可实现增强的过程间别名分析、内存分配和布局优化,从而提高高速缓存性能。请参见3.4.131 –xipo[={ 0|1|2}]。
使用 -xprefetch_level=n 控制预取指令:
使用新标志 -xprefetch_level=n 可控制通过 -xprefetch=auto 进行的预取指令自动插入。使用时,要求 -xO3 或更高的优化级别以及支持预取的目标平台(-xarch 平台 v8plus、v8plusa、v8plusb、v9、v9a、v9b、generic64 或 native64)。请参见3.4.163 –xprefetch_level={ 1|2|3}。
您可以在 http://docs.sun.com Web 站点上的早期版本文档集中找到 Forte Developer 7 之前各版本的功能历史记录。