编译器设置虚拟内存

设置虚拟内存  时间:2021-01-16  阅读:()

SunMicrosystems,Inc.
www.
sun.
com有关本文档的建议请发到:http://www.
sun.
com/hwdocs/feedbackFortran用户指南SunStudio8部件号码817-5802-102004年4月,修订A请回收版权所有2004SunMicrosystems,Inc.
,4150NetworkCircle,SantaClara,California95054,U.
S.
A.
保留所有权利.
美国政府权利―商业软件.
政府用户在使用时应遵循SunMicrosystems,Inc.
的标准许可协议和FAR及其补充中的适用规定.
使用本软件应遵守许可证条款.
此次分发可能包含由第三方开发的内容.
该产品的部分内容可能出自BerkeleyBSD系统,由加州大学(UniversityofCalifornia)授权.
UNIX是在美国和其它国家(地区)的注册商标,由X/OpenCompany,Ltd.
独家授权.
Sun、SunMicrosystems、Sun徽标、Java、JavaHelp是SunMicrosystems,Inc.
在美国和其它国家(地区)的商标或注册商标.
所有的SPARC商标均需获得授权才能使用,它们是SPARCInternational,Inc.
在美国和其它国家(地区)的商标或注册商标.
标有SPARC商标的产品都基于由SunMicrosystems,Inc.
开发的体系结构.
该产品为美国的出口控制法所涵该和控制,并有可能要遵守其它国家(地区)的出口或进口法规.
严禁将产品用于核、导弹、生化武器或核海事等最终目的或交给有此类企图的最终用户,无论是直接还是间接.
严禁将产品出口或再次出口到美国禁运的国家(地区)或美国出口排除列表中的实体,包括但不限于被拒绝的人员以及专门指定的公民列表.
本文档按"原样"提供,对所有明示或默示的条件、陈述和担保,包括对适销性、特殊用途的适用性或非侵权性的默示保证,均不承担任何责任,除非此免责声明的适用范围在法律上无效.
iii目录开始之前xvii排版惯例xviiShell提示符xviii访问SunStudio软件和手册页xix访问编译器和工具文档xxi访问相关Solaris文档xxiii开发人员资源xxiii与Sun技术支持联系xxiv发送您的意见和建议xxiv1.
简介1–11.
1符合标准1–11.
2Fortran95编译器的功能1–21.
3其它Fortran公用程序1–21.
4调试公用程序1–31.
5SunPerformanceLibrary1–31.
6区间运算1–31.
7手册页1–41.
8自述文件1–51.
9命令行帮助1–6iv《Fortran用户指南》2004年4月2.
使用Fortran952–12.
1快速入门2–12.
2调用编译器2–22.
2.
1编译-链接序列2–32.
2.
2命令行文件命名惯例2–32.
2.
3源文件2–42.
2.
4源文件预处理程序2–42.
2.
5将编译与链接分开2–52.
2.
6编译和链接一致性2–52.
2.
7无法识别的命令行参数2–52.
2.
8Fortran95模块2–62.
3指令2–72.
3.
1通用指令2–72.
3.
2并行化指令2–132.
4库接口和system.
inc2–152.
5编译器用法提示2–162.
5.
1确定硬件平台2–162.
5.
2使用环境变量2–162.
5.
3内存大小2–173.
Fortran编译器选项3–13.
1命令语法3–13.
2选项语法3–23.
3选项摘要3–33.
3.
1常用选项3–73.
3.
2宏标志3–83.
3.
3向后兼容性和传统选项3–93.
3.
4已废弃的选项标志3–93.
4选项参考3–10目录v–a3–10-aligncommon[=n]3–10–ansi3–10-arg=local3–10-autopar3–11–B{static|dynamic}3–11–C3–12–c3–12–cg893–12–cg923–13–copyargs3–13–Dname[=def]3–13–dalign3–14–dbl_align_all={yes|no}3–14–depend{=yes|no}3–15-dn3–15–dryrun3–15–d{y|n}3–15–e3–15–erroff=taglist3–16–errtags[={yes|no}]3–16–explicitpar3–16–ext_names=e3–17–F3–17–f3–18-f77[=list]3–18–fast3–19–fixed3–21vi《Fortran用户指南》2004年4月–flags3–21–fnonstd3–21–fns[={no|yes}]3–22–fpover[={yes|no}]3–23-fpp3–23–free3–23–fround=r3–23–fsimple[=n]3–23–ftrap=t3–24–G3–25–g3–25–hname3–26–help3–26–Ipath3–26–inline=[%auto][[,][no%]f1,…[no%]fn]3–27-iorounding=mode3–28–Kpic3–28–KPIC3–28–Lpath3–28–lx3–29–libmil3–29–loopinfo3–30–Mpath3–30-moddir=path3–30–mp={%none|sun|cray}3–31–mt3–31–native3–32–noautopar3–32目录vii–nodepend3–32–noexplicitpar3–32–nolib3–32–nolibmil3–32–noreduction3–33–norunpath3–33–O[n]3–33–O3–33–O13–34–O23–34–O33–34–O43–34–O53–34–oname3–34–onetrip3–35-openmp[=keyword]3–35–PIC3–36–p3–36–pad[=p]3–36–parallel3–37–pg3–38–pic3–38–Qoptionprls3–38–qp3–38–Rls3–38-r8const3–39–reduction3–39–S3–40viii《Fortran用户指南》2004年4月–s3–40–sb3–40–sbfast3–40–silent3–40–stackvar3–40–stop_status=yn3–42–temp=dir3–42–time3–42–U3–42-Uname3–43–u3–43–unroll=n3–43-use=list3–43–V3–43–v3–44-vax=keywords3–44–vpara3–44–w[n]3–45–Xlist[x]3–45–xa3–46-xalias[=keywords]3–46–xarch=isa3–48-xassume_control[=keywords]3–52–xautopar3–53–xcache=c3–53–xcg893–53–xcg923–54-xcheck=keyword3–54目录ix–xchip=c3–54–xcode=addr3–56–xcommonchk[={no|yes}]3–57–xcrossfile[=n]3–58–xdepend3–59–xexplicitpar3–59–xF3–59-xhasc[={yes|no}]3–59–xhelp=h3–60-xia[=v]3–60–xild{off|on}3–61–xinline=list3–61-xinterval[=v]3–61-xipo[={0|1|2}]3–61-xjobs=n3–63-xknown_lib=library_list3–63-xlang=f773–64–xlibmil3–64–xlibmopt3–64–xlic_lib=sunperf3–65–xlicinfo3–65-xlinkopt[=level]3–65–xloopinfo3–66–xmaxopt[=n]3–66-xmemalign[=]3–67–xnolib3–67–xnolibmil3–67–xnolibmopt3–67x《Fortran用户指南》2004年4月–xOn3–68-xopenmp3–68–xpad3–68-xpagesize=size3–68-xpagesize_heap=size3–69-xpagesize_stack=size3–69–xparallel3–69–xpg3–69–xpp={fpp|cpp}3–69–xprefetch[=a[,a]]3–70-xprefetch_level=n3–72–xprofile=p3–72-xprofile_ircache[=path]3–73-xprofile_pathmap=collect_prefix:use_prefix3–74-xrecursive3–74–xreduction3–75–xregs=r3–75–xs3–75–xsafe=mem3–76–xsb3–76–xsbfast3–76–xspace3–76–xtarget=t3–76–xtime3–78–xtypemap=spec3–78–xunroll=n3–79–xvector[={yes|no}]3–79–ztext3–79目录xi4.
Fortran95功能和差异4–14.
1源语言功能4–14.
1.
1续行限制4–14.
1.
2固定格式源代码行4–14.
1.
3采用的源代码格式4–24.
1.
4限制和缺省值4–34.
2数据类型4–34.
2.
1布尔类型4–34.
2.
2数值数据类型的缩写大小表示法4–64.
2.
3数据类型的大小和对齐4–74.
3Cray指针4–84.
3.
1语法4–84.
3.
2Cray指针的用途4–94.
3.
3声明Cray指针和Fortran95指针4–94.
3.
4Cray指针的功能4–94.
3.
5Cray指针的限制4–104.
3.
6Cray指针对象的限制4–104.
3.
7Cray指针的用法4–104.
4STRUCTURE和UNION(VAXFortran)4–114.
5无符号整数4–124.
5.
1算术表达式4–124.
5.
2关系表达式4–134.
5.
3控制构造4–134.
5.
4输入/输出构造4–134.
5.
5内部函数4–134.
6Fortran2000功能4–144.
6.
1与C函数之间的互操作性4–144.
6.
2IEEE浮点异常处理4–14xii《Fortran用户指南》2004年4月4.
6.
3PROTECTED属性4–144.
6.
4Fortran2000异步I/O4–154.
6.
5扩展的ALLOCATABLE属性4–154.
6.
6VALUE属性4–154.
6.
7Fortran2000流I/O4–164.
6.
8Fortran2000格式化I/O功能4–164.
7其它的I/O扩展4–174.
7.
1I/O错误处理例程4–174.
7.
2变量格式表达式4–174.
7.
3NAMELIST输入格式4–174.
7.
4二进制未格式化I/O4–184.
7.
5各种I/O扩展4–184.
8指令4–194.
8.
1特殊f95指令行的格式4–194.
8.
2FIXED和FREE指令4–204.
8.
3并行化指令4–204.
9模块文件4–214.
9.
1搜索模块4–224.
9.
2-use=list选项标记4–224.
9.
3fdumpmod命令4–234.
10内部函数4–234.
11向前兼容性4–244.
12混合语言4–245.
FORTRAN77兼容性:迁移到Fortran955–15.
1兼容的f77功能5–15.
2不兼容问题5–55.
3与f77编译的例程链接5–75.
3.
1Fortran95内部函数5–7目录xiii5.
4有关迁移到f95编译器的附加说明5–8A.
运行时错误消息6–1F.
1操作系统错误消息6–1F.
2f95运行时I/O错误消息6–2B.
功能版本历史7–1G.
1SunStudio8Fortran发行版本:7–1G.
2SunONEStudio7编译器集合(ForteDeveloper7)版本:7–4C.
不常用的–xtarget平台扩展8–1D.
Fortran指令摘要9–1I.
1通用Fortran指令9–1I.
2特殊的Fortran95指令9–3I.
3Fortran95OpenMP指令9–3I.
4Sun并行化指令9–4I.
5Cray并行化指令9–5索引索引–1xiv《Fortran用户指南》2004年4月xv表表1-1感兴趣的自述文件1–5表2-1由Fortran95编译器识别的文件名后缀2–3表2-2通用Fortran指令摘要2–8表3-1选项语法3–2表3-2选项的印刷符号3–2表3-3按功能分组的编译器选项3–3表3-4常用选项3–7表3-5宏选项标志3–8表3-6向后兼容性选项3–9表3-7已废弃的f95选项3–9表3-8次正规的REAL和DOUBLE3–22表3-9-xlist子选项3–46表3-10–xalias选项关键字3–47表3-11–xarchISA关键字3–48表3-12SPARC平台上最常用的-xarch选项3–48表3-13SPARC平台的-xarch值3–49表3-14–xcache值3–53表3-15常用的-xchip处理器名称3–55表3-16较不常用的-xchip处理器名称3–55表3-17常用的-xtarget系统平台的扩展3–77xvi《Fortran用户指南》2004年4月表4-1F95源代码格式命令行选项4–2表4-2数值数据类型的大小表示法4–6表4-3缺省的数据大小和对齐(以字节为单位)4–7表4-4非标准的内部函数4–23表F-1f95运行时I/O消息6–2表H-1-xtarget扩展8–1表I-1通用Fortran指令摘要9–1表I-2特殊的Fortran95指令9–3表I-3Sun风格并行化指令摘要9–4表I-4Cray并行化指令摘要9–5xvii开始之前《Fortran用户指南》描述了SunStudioFortran95编译器f95的环境和命令行选项.
本指南适用于已经具备Fortran语言应用知识并要了解如何有效地使用Fortran编译器的科学家、工程师和程序员.
通常,还假定他们熟悉Solaris操作环境或UNIX.
有关输入/输出、程序开发、库、程序分析和调试、数值准确性、移植、性能、优化、并行化和互操作性的基础信息,另请参见随附的《Fortran编程指南》.
排版惯例表P-1字体惯例字体含义示例AaBbCc123命令、文件以及目录的名称;计算机屏幕输出编辑您的.
login文件.
使用ls-a列出所有文件.
%Youhavemail.
AaBbCc123键入的内容,以便与计算机屏幕输出相区别%suPassword:AaBbCc123书名、新词或术语以及要强调的词请阅读《用户指南》中的第6章.
这些被称为类选项.
您必须是超级用户才能执行此操作.
AaBbCc123命令行占位符文本;用实际的名称或值替换要删除文件,请键入rmfilename.
xviii《Fortran用户指南》2004年4月符号表示有效的空格.
FORTRAN77标准使用较旧的惯例,以大写字母来拼写名称"FORTRAN".
当前的惯例是使用小写字母:"Fortran95"出现的联机手册页参考带有主题名称和章节号.
例如,库例程GETENV的参考显示为getenv(3F),这意味着访问此手册页的man命令为:man-s3FgetenvShell提示符36.
001表P-2代码惯例代码符号含义表示法代码示例[]方括号包含可选的参数.
O[n]-O4,-O{}大括号包含所需选项的一组选项.
d{y|n}-dy|"管道"或"竖线"符号用于分隔参数,只能选择其中的一个参数.
B{dynamic|static}-Bstatic:与逗号类似,冒号有时也用于分隔参数.
Rdir[:dir]-R/local/libs:/U/a…省略号表示序列中的省略部分.
-xinline=f1[,…fn]-xinline=alpha,dosShell指示符Cshellmachine-name%Cshell超级用户machine-name#Bourneshell和Kornshell$Bourneshell和Kornshell超级用户#开始之前xix访问SunStudio软件和手册页编译器、工具及其手册页没有安装到标准的/usr/bin/和/usr/share/man目录中.
要访问编译器和工具,您必须正确设置您的PATH环境变量(请参见xix页上的"访问编译器和工具").
要访问手册页,您必须正确设置您的MANPATH环境(请参见xx页上的"访问手册页").
有关PATH变量的详细信息,请参见csh(1)、sh(1)和ksh(1)手册页.
有关MANPATH变量的详细信息,请参见man(1)手册页.
有关设置PATH变量和MANPATH变量以访问此版本的详细信息,请参阅安装指南或咨询系统管理员.
注意–本节中的信息假定将SunStudio编译器和工具安装在/opt目录中.
如果没有将软件安装在/opt目录中,请向系统管理员询问系统上的等价路径.
访问编译器和工具请使用以下步骤确定您是否需要更改PATH变量以访问编译器和工具.
确定您是否需要设置PATH环境变量1.
通过在命令提示符下键入以下内容来显示当前的PATH变量值.
2.
检查输出以查找包含/opt/SUNWspro/bin/的路径字符串.
如果找到该路径,则说明已设置了PATH变量来访问编译器和工具.
如果没有找到该路径,则按照以下步骤中的说明设置PATH环境变量.
设置PATH环境变量以启用对编译器和工具的访问1.
如果使用的是Cshell,请编辑主目录中的.
cshrc文件.
如果使用的是Bourneshell或Kornshell,请编辑主目录中的.
profile文件.
2.
将以下内容增加到PATH环境变量中.
如果您已经安装了SunONEStudio软件或ForteDeveloper软件,则请在这些安装路径之前添加以下路径.
/opt/SUNWspro/bin%echo$PATHxx《Fortran用户指南》2004年4月访问手册页请使用以下步骤确定您是否需要更改MANPATH变量以访问手册页.
确定您是否需要设置MANPATH环境变量1.
通过在命令提示符下键入以下内容来请求dbx手册页.
2.
检查输出(如果有的话).
如果找不到dbx(1)手册页,或者显示的手册页不用于所安装软件的当前版本,请按照以下步骤中有关设置MANPATH环境变量的说明操作.
设置MANPATH环境变量以启用对手册页的访问1.
如果使用的是Cshell,请编辑主目录中的.
cshrc文件.
如果使用的是Bourneshell或Kornshell,请编辑主目录中的.
profile文件.
2.
将以下内容增加到MANPATH环境变量中.
/opt/SUNWspro/man访问集成开发环境SunStudio8集成开发环境(IDE)提供用于创建、编辑、生成、调试和分析C、C++或Fortran应用程序性能的模块.
此IDE要求SunStudio8核心平台组件.
如果核心平台组件并未安装或装配在下列位置之中,您就必须为核心平台组件的安装或装配位置(installation_directory/netbeans/3.
5R)设置SPRO_NETBEANS_HOME环境变量:缺省安装目录为/opt/netbeans/3.
5R与SunStudio8的编译器和工具组件的位置相同(例如,编译器和工具组件安装在/foo/SUNWspro,核心平台组件安装在/foo/netbeans/3.
5R)启动此IDE的命令是sunstudio.
有关此命令的详细信息,请参见sunstudio(1)手册页.
%mandbx开始之前xxi访问编译器和工具文档可以在下列位置访问文档:可以从使用软件安装到本地系统或网络中的文档索引(file:/opt/SUNWspro/docs/index.
html)来访问文档.
如果没有将软件安装在/opt目录中,请向系统管理员询问系统上的等价路径.
可以从docs.
sun.
comsm网站中访问大多数手册.
以下手册只能通过安装的软件来访问:StandardC++LibraryClassReferenceStandardC++LibraryUser'sGuideTools.
h++ClassLibraryReferenceTools.
h++User'sGuide可以从docs.
sun.
com网站访问这些发行说明.
通过帮助菜单以及通过IDE中一些窗口和对话框的帮助按钮都可以访问此IDE所有组件的联机帮助.
在docs.
sun.
com网站(http://docs.
sun.
com)上,可通过Internet阅读、打印和购买SunMicrosystems手册.
如果找不到手册,请参见使用软件安装到本地系统或网络上的文档索引.
注意–Sun对本文中提到的第三方网站的可用性概不负责;对于此类站点或资源上(或通过它们获得)的任何内容、广告、产品或其它材料,Sun并不认可、负责或承担任何责任.
对于使用或依靠任何此类站点或资源上(或通过它们获得)的任何内容、商品或服务而引起或被指控引起的任何损害或损失,Sun概不负责或承担任何责任.
xxii《Fortran用户指南》2004年4月具有易读格式的文档文档以易读的格式提供,残障用户可使用辅助技术阅读这些文档.
可以找到如下表中所述的易读文档版本.
如果没有将软件安装在/opt目录中,请向系统管理员询问系统上的等价路径.
相关的编译器和工具文档下表描述了位于file:/opt/SUNWspro/docs/index.
html和http://docs.
sun.
com的相关文档.
如果没有将软件安装在/opt目录中,请向系统管理员询问系统上的等价路径.
文档类型易读版本的格式和位置手册(第三方手册除外)HTML:位于http://docs.
sun.
com第三方手册:StandardC++LibraryClassReferenceStandardC++LibraryUser'sGuideTools.
h++ClassLibraryReferenceTools.
h++User'sGuideHTML:在安装的软件中通过文档索引(file:/opt/SUNWspro/docs/index.
html)进行访问自述文件和手册页HTML:在安装的软件中通过文档索引(file:/opt/SUNWspro/docs/index.
html)进行访问发行说明HTML:位于http://docs.
sun.
com/文档标题描述《Fortran编程指南》描述如何在Solaris环境中编写有效的Fortran程序;输入/输出、库、性能、调试和并行化.
《Fortran库参考》详细介绍Fortran库和内在例程.
《OpenMPAPI用户指南》OpenMP多处理API摘要,并提供有关实现的详细信息.
《数值计算指南》描述有关浮点计算数值准确性方面的问题.
开始之前xxiii访问相关Solaris文档下表描述通过docs.
sun.
com网站访问的相关文档.
开发人员资源请访问http://developers.
sun.
com/prodtech/cc以查找这些经常更新的资源:有关编程技巧和最佳做法的文章有关简短编程技巧的知识库编译器和工具组件的文档以及使用软件安装的文档修订有关支持级别的信息用户论坛可下载的代码示例新技术预览可以从http://developers.
sun.
com中找到其它的开发人员资源.
文档集合文档标题描述Solaris参考手册集合请参见手册页章节的标题.
提供有关Solaris操作环境的信息.
Solaris软件开发人员集合LinkerandLibrariesGuide描述Solaris链接编译器和运行时链接程序的操作.
Solaris软件开发人员集合MultithreadedProgrammingGuide涵盖POSIX和Solaris线程API、使用同步对象进行编程、编译多线程程序以及查找用于多线程程序的工具.
xxiv《Fortran用户指南》2004年4月与Sun技术支持联系如果您有关于本产品的技术问题而本文档未予以解答,请访问:http://www.
sun.
com/service/contacting发送您的意见和建议Sun愿意对其文档进行改进,并欢迎您提出意见和建议.
请通过以下地址将您的评论以电子邮件的形式发送给Sun:docfeedback@sun.
com请在电子邮件主题行中加入您的文档的部件号码(817-5802-10).
1-1第章1简介此处和随附的《Fortran编程指南》中介绍的SunStudioFortran95编译器f95可在SPARC和UltraSPARC平台上的Solaris操作系统中使用.
此编译器符合发布的Fortran语言标准,并提供很多扩展的功能,其中包括多处理器并行化、高级的优化代码编译以及混合的C/Fortran语言支持.
f95编译器还提供接受大多数传统Fortran77源代码的Fortran77兼容性模式.
不再存在单独的Fortran77编译器.
有关FORTRAN77兼容性和迁移问题的信息,请参见第5章.
1.
1符合标准f95从设计上与ANSIX3.
198-1992、ISO/IEC1539:1991和ISO/IEC1539:1997标准文档兼容.
浮点算术基于IEEE标准754-1985和国际标准IEC60559:1989.
f95提供对SPARCV8和SPARCV9优化利用功能的支持(包括UltraSPARC实现).
这些功能是在Prentice-HallforSPARCInternational发布的SPARC结构手册版本8(ISBN0-13-825001-4)和版本9(ISBN0-13-099227-5)中定义的.
在本文档中,"标准"是指符合上面列出标准的版本.
"非标准"或"扩展"是指超出这些标准版本的功能.
负责编写标准的机构可能会随时修订这些标准.
可能会修订或替代这些编译器遵循的适用标准的版本,从而导致SunFortran编译器将来版本中的功能与先前版本不兼容.
1-2《Fortran用户指南》2004年4月1.
2Fortran95编译器的功能SunStudioFortran95编译器提供以下功能和扩展:在例程中对参数、公共区等进行全局程序一致性检查.
优化多处理器系统的自动和显式循环并行化.
VAX/VMSFortran扩展,其中包括:结构、记录、联合和映射递归OpenMP并行化指令.
Cray风格的并行化指令,其中包括TASKCOMMON.
全局、窥孔和潜在的并行化优化可产生高性能的应用程序.
基准测试表明优化的应用程序的运行速度比未优化的代码快得多.
Solaris系统上相同的调用惯例允许将使用C或C++编写的例程与Fortran程序结合起来.
在UltraSPARC平台上支持64位的Solaris环境.
使用%VAL按值进行调用.
Fortran77和Fortran95程序和对象二进制文件之间的兼容性.
区间算术编程.
某些"Fortran2000"功能,其中包括流I/O.
有关在每个软件版本的编译器中已增加的新功能和扩展功能的详细信息,请参见附录7.
1.
3其它Fortran公用程序以下公用程序可为使用Fortran进行软件程序开发提供帮助.
SunStudio性能分析器―用于单线程和多线程应用程序的综合性能分析器工具.
请参见analyzer(1).
asa-此Solaris公用程序是一个Fortran输出过滤器,用于打印在第一列中包含Fortran回车控制符的文件.
可使用asa将按照Fortran回车控制惯例设置格式的文件转换为按照UNIX行打印机惯例设置格式的文件.
请参见asa(1).
fdumpmod-此公用程序用于显示文件或归档中包含的模块的名称.
请参见fdumpmod(1).
fpp-一个Fortran源代码预处理程序.
请参见fpp(1).
第1章简介1-3fsplit-此公用程序将一个包含几个例程的Fortran文件分成几个文件,每个文件包含一个例程.
可使用fsplit处理FORTRAN77或Fortran95源文件.
请参见fsplit(1).
1.
4调试公用程序可以使用以下调试公用程序:-Xlist-一个用于检查例程中参数、COMMON块等一致性的编译器选项.
dbx-提供可靠且功能丰富的运行时和静态调试器,并且包含一个性能数据收集器.
1.
5SunPerformanceLibrarySunPerformanceLibrary是一个用于计算线性代数和傅立叶变换的优化子例程和函数库.
它基于一般通过Netlib(www.
netlib.
org)提供的标准库LAPACK、BLAS1、BLAS2、BLAS3、FFTPACK、VFFTPACK和LINPACK.
与标准库版本相比,SunPerformanceLibrary中的每个子程序都执行相同的操作并且具有相同的接口,但通常这些子程序的速度要快得多且准确得多,这些子程序可以用于多处理环境中.
有关详细信息,请参见performance_library自述文件和SunPerformanceLibraryUser'sGuide.
(性能库例程的手册页位于第3P节.
)1.
6区间运算Fortran95编译器提供编译器标记-xia和-xinterval以启用新的语言扩展,并生成相应的代码以实现区间运算计算.
有关详细信息,请参见Fortran95IntervalArithmeticProgrammingReference.
1-4《Fortran用户指南》2004年4月1.
7手册页联机手册(man)页提供了有关命令、函数、子例程或此类集合的直接文档.
有关用于访问SunStudio手册页的MANPATH环境变量的正确设置,请参见前言.
可通过运行以下命令来显示手册页:在整个Fortran文档中,出现的手册页参考带有主题名称和手册章节号:可使用manf95访问f95(1).
例如,可在man命令中使用-s选项来访问用ieee_flags(3M)指示的其它章节:Fortran库例程是在手册页第3F节中介绍的.
下面列出了Fortran用户感兴趣的man页:demo%mantopicdemo%man-s3Mieee_flagsf95(1)Fortran95命令行选项analyzer(1)性能分析器asa(1)Fortran回车控制打印输出后处理器dbx(1)命令行交互调试器fpp(1)Fortran源代码预处理器cpp(1)C源代码预处理器fdumpmod(1)显示模块(.
mod)文件的内容fsplit(1)预处理器将Fortran源例程分成单个文件ieee_flags(3M)检查、设置或清除浮点异常位ieee_handler(3M)处理浮点异常matherr(3M)数学库错误处理例程ild(1)目标文件的增量链接编辑器ld(1)目标文件的链接编辑器第1章简介1-51.
8自述文件READMEs目录包含描述以下内容的文件:新增功能、软件不兼容性、错误以及在手册印刷后发现的信息.
此目录的位置取决于安装软件的位置.
路径为:/opt/SUNWspro/READMEs/.
可使用-xhelp=readme命令行选项方便地查看每个编译器的自述文件.
例如,命令:直接显示fortran_95自述文件.
表1-1感兴趣的自述文件自述文件描述.
.
.
fortran_95此版本Fortran95编译器f95的新增功能和修改的功能、已知限制和文档勘误表.
fpp_readmefpp功能概述interval_arithmeticf95中的区间运算功能概述math_libraries可用的优化和专用数学库.
profiling_tools使用性能配置工具prof、gprof和tcov.
runtime_libraries可依照最终用户许可协议的条款重新分发的库和可执行文件.
performance_librarySunPerformanceLibrary概述%f95-xhelp=readme1-6《Fortran用户指南》2004年4月1.
9命令行帮助可通过调用编译器的-help选项来查看f95命令行选项的简短描述(如下所示):%f95-help=flagsItemswithin[]areoptional.
Itemswithinarevariableparameters.
Bar|indicateschoiceofliteralvalues.
-someoption[={yes|no}]implies-someoptionisequivalentto-someoption=yes-aCollectdatafortcovbasicblockprofiling-aligncommon[=]Aligncommonblockelementstothespecifiedboundaryrequirement;={1|2|4|8|16}-ansiReportnon-ANSIextensions.
-autoparEnableautomaticloopparallelization-BdynamicAllowdynamiclinking-BstaticRequirestaticlinking-CEnableruntimesubscriptrangechecking-cCompileonly;produce.
ofilesbutsuppresslinking.
.
.
etc.
2-1第章2使用Fortran95本章介绍如何使用Fortran95编译器.
所有编译器的主要用途都是将使用过程语言(如Fortran)编写的程序转换为可由目标计算机硬件执行的数据文件.
在此过程中,编译器还可能会自动调用系统链接程序来生成可执行文件.
Fortran95编译器还可以用于:生成并行的可执行文件以用于多处理器(-openmp).
跨源文件和子例程分析程序一致性并生成报告(-Xlist).
将源文件转换为:可重定位的二进制(.
o)文件,可随后将其链接到可执行文件或静态库(.
a)文件.
动态共享库(.
so)文件(-G).
将文件链接到可执行文件.
在启用运行时调试的情况下编译可执行文件(-g).
使用运行时语句或过程级文件配置进行编译(-pg).
检查源代码是否符合ANSI标准(-ansi).
2.
1快速入门本节简要介绍如何使用Fortran95编译器来编译和运行Fortran程序.
下一章将详细介绍命令行选项.
运行Fortran应用程序的基本步骤包括:使用编辑器创建带有文件名后缀.
f、.
for、.
f90、.
f95、.
F、.
F90或.
F95的Fortran源文件;调用编译器来生成可执行文件;最后通过键入文件名来启动并执行该程序:2-2《Fortran用户指南》2004年4月示例:此程序在屏幕上显示一条消息:在本示例中,f95编译源文件greetings.
f,并在缺省情况下将可执行程序链接到文件a.
out.
要启动该程序,请在命令提示符下键入可执行文件的名称a.
out.
习惯上,UNIX编译器将可执行输出写入到名为a.
out的缺省文件中.
但每次编译时都写入到相同的文件中的做法会造成不便.
再者,如果该文件已存在,那么在下次运行编译器时它将会被覆盖.
因此,请使用-o编译器选项来显式地指定可执行输出文件的名称:在前面的示例中,-o选项告知编译器将可执行代码写入到文件greetings中.
(按照惯例,通常给可执行文件指定与主源文件相同的名称,但可执行文件没有扩展名.

)或者,可在每次编译后通过mv命令来重命名缺省的a.
out文件.
无论使用哪种方法,都要在shell提示符下键入可执行文件的名称来运行程序.
本章的后面几节将讨论f95命令使用的惯例、编译器源文件行指令以及有关使用这些编译器的其它问题.
下一章将详细介绍命令行语法和所有选项.
2.
2调用编译器在shell提示符下调用编译器有一个简单的命令,其语法是:f95[options]files.
.
.
其中,files.
.
.
是一个或多个以.
f、.
F、.
f90、.
f95、.
F90、.
F95或.
for结尾的Fortran源文件名称;options是一个或多个编译器选项标记.
(以.
f90或.
f95扩展名结尾的文件是只能由f95编译器识别的"自由格式"Fortran95源文件.
)demo%catgreetings.
fPROGRAMGREETINGSPRINT*,'RealprogrammerswriteFortran!
'ENDdemo%f95greetings.
fdemo%a.
outRealprogrammerswriteFortran!
demo%demo%f95–ogreetingsgreetings.
fdemo%greetingsRealprogrammerswriteFortran!
demo%第2章使用Fortran952-3在下面的示例中,我们在启用运行时调试的情况下,使用f95来编译两个源文件以生成名为growth的可执行文件:注意–可以使用f95或f90命令来调用Fortran95编译器.
2.
2.
1编译-链接序列在上一示例中,编译器自动生成加载器目标文件growth.
o和fft.
o,然后调用系统链接程序以创建可执行程序文件growth.
在编译后,目标文件growth.
o和fft.
o将保留.
此惯例允许您方便地重新链接和重新编译文件.
如果编译失败,则会收到每个错误的消息.
对于出现错误的源文件,不会生成任何.
o文件,也不会生成任何可执行程序文件.
2.
2.
2命令行文件命名惯例在命令行上出现的文件名后附加的后缀扩展名决定了编译器处理文件的方式.
如果文件没有扩展名,或者其后缀扩展名不是以下列出的某个扩展名,那么这些文件将被传递给链接程序.
demo%f95-g-ogrowthgrowth.
ffft.
f95表2-1由Fortran95编译器识别的文件名后缀后缀语言操作.
fFortran77或Fortran95固定格式编译Fortran源文件,将目标文件放在当前目录中;目标文件的缺省名称是源文件的名称,但具有.
o后缀.
.
f95.
f90Fortran95自由格式执行与.
f相同的操作.
.
forFortran77或Fortran95执行与.
f相同的操作.
.
FFortran77或Fortran95固定格式在编译前,将Fortran(或C)预处理程序应用于Fortran77源文件.
2-4《Fortran用户指南》2004年4月第4章将介绍Fortran95自由格式.
2.
2.
3源文件Fortran编译器可从命令行接受多个源文件.
单个源文件(也称为编译单元)可以包含任意数量的过程(主程序、子例程、函数、块数据、模块等).
可以将应用程序配置为每个文件一个源代码过程,或者将协同工作的过程集中到单个文件中.
《Fortran编程指南》描述了这些配置的优缺点.
2.
2.
4源文件预处理程序f95支持两种源文件预处理程序:fpp和cpp.
编译器可以在编译之前调用这两种源文件预处理程序中的某个来扩展源代码"宏"和符号定义.
在缺省情况下,编译器将使用fpp;-xpp=cpp选项将缺省设置由fpp更改为cpp.
(另请参见有关-Dname选项的讨论.
)fpp是Fortran特有的源文件预处理程序.
有关详细信息,请参见"fpp(1)手册页"和"fpp自述文件".
在缺省情况下,系统会对具有.
F、.
F90或.
F95扩展名的文件调用该预处理程序.
fpp的源代码可从Netlib网站下载:http://www.
netlib.
org/fortran/有关标准UnixC语言预处理程序的详细信息,请参见cpp(1).
对于Fortran源文件,建议使用fpp而不是cpp.
.
F95.
F90Fortran95自由格式在Fortran编译Fortran95自由格式源文件前,将Fortran(或C)预处理程序应用于该文件.
.
s汇编程序使用汇编程序汇编源文件.
.
S汇编程序在对汇编程序源文件进行汇编之前,将C预处理程序应用于该文件.
.
il内联扩展处理内联扩展的模板文件.
编译器将使用模板来扩展对选定例程的内联调用.
(模板文件是特殊的汇编程序文件;请参见"inline(1)手册页".
).
o目标文件将目标文件传递给链接程序.
.
a、.
so、.
so.
n库将库名称传递给链接程序.
.
a文件是静态库,.
so和.
so.
n文件是动态库.
表2-1由Fortran95编译器识别的文件名后缀(续)后缀语言操作第2章使用Fortran952-52.
2.
5将编译与链接分开可以使用单独的步骤来进行编译和链接.
-c选项编译源文件并生成.
o目标文件,但不会创建可执行文件.
如果不使用-c选项,则编译器将调用链接程序.
如果通过这种方式将编译和链接步骤分开,那么就不必只为了修复一个文件而重新执行完整的编译(如以下示例所示):使用单独的步骤来编译一个文件,并将其与其它文件链接在一起:确保链接步骤列出了创建完整程序所需的所有目标文件.
如果在此步骤中缺少任何目标文件,则链接将会失败,并出现未定义的外部引用错误(缺少例程).
2.
2.
6编译和链接一致性每当使用单独的步骤来完成编译和链接时,您必须确保使用一致的编译和链接选项.
在使用选项编译程序的任何部分时,必须使用相同的选项进行链接.
另外,很多选项要求使用自身对所有源文件进行编译(包括链接步骤).
第3章中的选项描述指明了此类选项.
示例:使用-fast编译sbr.
f,编译C例程,然后使用单独的步骤进行链接:2.
2.
7无法识别的命令行参数编译器无法识别的命令行参数将被解释为可能是链接程序选项、对象程序文件名或库名称.
根本区别是:无法识别的选项(带有-)生成警告.
无法识别的非选项(无-)不生成警告.
但是,这些非选项将被传递给链接程序,如果链接程序无法识别它们,那么将生成链接程序错误消息.
demo%f95-cfile1.
f(创建新的目标文件)demo%f95-oprgrmfile1.
ofile2.
ofile3.
o(创建可执行文件)demo%f95-c-fastsbr.
fdemo%cc-c-fastsimm.
cdemo%f95-fastsbr.
osimm.
o链接步骤;将-fast传递给链接程序2-6《Fortran用户指南》2004年4月例如:请注意在第一个示例中,f95无法识别-bit,该选项将被传递给链接程序(ld),后者试图对其进行解释.
因为单字母ld选项可以串联起来,所以链接程序会将-bit视为-b-i-t,而这些都是合法的ld选项!
这可能是(也可能不是)用户所希望的结果.
在第二个示例中,用户想键入f95选项-fast,但却忽略了开头短线.
编译器再次将参数传递给链接程序,而后者将其解释为一个文件名.
这些示例表明在编写编译器命令行时应极其小心!
2.
2.
8Fortran95模块f95自动为在源文件中遇到的每个MODULE声明创建模块信息文件,并搜索USE语句引用的模块.
对于遇到的每个模块(MODULEmodule_name),编译器都在当前目录中生成相应的文件module_name.
mod.
例如,f95为文件mysrc.
f95中出现的MODULElist单元生成模块信息文件list.
mod.
有关如何设置编写和搜索模块信息文件时的缺省路径的信息,请参见-Mpath和-moddirdirlist选项标记.
有关隐式调用所有编译单元中的MODULE声明的信息,另请参见-use编译器选项.
可使用fdumpmod(1)命令显示有关.
mod模块信息文件内容的信息.
有关详细信息,请参见第4-21页上的第4.
9节"模块文件".
demo%f95-bitmove.
f1,则优化器可以解开循环n次.
如果实际解开了任何循环,那么可执行文件会变大.
有关详细信息,请参见《Fortran编程指南》中有关性能与优化的章节.
示例-解开循环两次:2.
3.
1.
4WEAK指令WEAK指令定义一个符号,其优先级比以前定义的相同符号要低.
此pragma主要用在源文件中以创建库.
如果链接程序无法解析弱符号,则它并不生成错误消息.

WEAK(name1)将name1定义为弱符号.
如果链接程序没有找到name1的定义,则它并不生成错误消息.
WEAK(name1=name2)将name1定义为弱符号以及name2的别名.
如果程序调用name1,但没有对其进行定义,那么链接程序将使用库中的定义.
但是,如果程序定义了自己的name1版本,那么将采用程序的定义,而不是使用库中name1的弱全局定义.
如果程序直接调用name2,则将使用库中的定义;重复的name2定义将导致错误.
有关详细信息,请参见SolarisLinkerandLibrariesGuide.
C$PRAGMASUNUNROLL=2C$PRAGMAWEAK(name1[=name2])第2章使用Fortran952-112.
3.
1.
5OPT指令OPT指令要求您在C$PRAGMA后面指定SUN.
OPT指令设置子程序的优化级别,它将覆盖编译命令行中指定的级别.
该指令必须紧挨在目标子程序前面出现,并且仅应用于该子程序.
例如:在使用指定-O4的f95命令编译以上内容时,该指令将覆盖此级别,并以-O2级别编译子例程.
除非该例程后面另有一个指令,否则下一个子程序将以-O4级别编译.
您还必须使用-xmaxopt[=n]选项来编译例程以识别该指令.
此编译器选项为PRAGMAOPT指令指定最大的优化值:如果PRAGMAOPT指定的优化级别大于-xmaxopt级别,则使用-xmaxopt级别.
2.
3.
1.
6NOMEMDEP指令NOMEMDEP指令要求您在C$PRAGMA后面指定SUN.
此指令必须紧挨在DO循环前面出现.
它向优化器断言,在循环的迭代中没有基于内存的依存关系来禁止并行化.
要求使用-parallel或-explicitpar选项.
2.
3.
1.
7PIPELOOP=n指令PIPELOOP=n指令要求您在C$PRAGMA后面指定SUN.
此指令必须紧挨在DO循环前面出现.
n是正整型常数或零,它向优化器断言循环迭代之间是否存在依存关系.
值零表示循环中没有迭代间的(即循环带有的)依存关系,优化器可以对循环执行任意流水线处理.
正值n意味着,循环的第I次迭代与第(I-n)次迭代之间存在依存关系,每次最多只能对n个迭代进行管线处理.
有关优化的详细信息,请参见《Fortran编程指南》.
C$PRAGMASUNOPT=2SUBROUTINEsmart(a,b,c,d,e).
.
.
etcCWeknowthatthevalueofKissuchthattherecanbenoCcross-iterationdependencies(E.
g.
K>N)C$PRAGMASUNPIPELOOP=0DOI=1,NA(I)=A(I+K)+D(I)B(I)=B(I)+A(I)ENDDO2-12《Fortran用户指南》2004年4月2.
3.
1.
8PREFETCH指令-xprefetch选项标记第3-70页上的"–xprefetch[=a[,a]]"允许使用一组PREFETCH指令,这些指令建议编译器为指定的数据元素生成预取指令.
预取指令仅在UltraSPARC平台上可用.
有关预取指令的进一步信息,请参见《C用户指南》或SPARCArchitectureManual,Version9.
2.
3.
1.
9ASSUME指令ASSUME指令向编译器提供有关程序中某些点上的条件的提示.
这些断言可以帮助编译器指导其优化策略.
程序员也可以在执行过程中使用这些指令检查程序的有效性.

ASSUME有两种格式.
"点断言"ASSUME的语法是:而"范围断言"ASSUME的语法是:请使用点断言格式声明编译器可在程序中的该点采用的条件.
而使用范围断言格式声明适用于闭合的语句范围的条件.
范围断言中的BEGIN和END对必须正确嵌套.
必需的expression是一个布尔表达式,该表达式可在程序中的该点计算出来,并且其中不包含用户定义的运算符或函数调用(下面列出的除外).
可选的probability值是一个介于0.
0和1.
0之间的实数或者整数0或1,它给出表达式为真的可能性.
probability的值为0.
0(或0)意味着永远不会为真;值为1.
0(或1)则意味着始终为真.
如果没有指定,则认为表达式很有可能为真,但并不必然为真.

probability并不恰好为0或1的断言是非必然断言.
类似地,probability恰好为0或1的断言是必然断言.
C$PRAGMASPARC_PREFETCH_READ_ONCE(name)C$PRAGMASPARC_PREFETCH_READ_MANY(name)C$PRAGMASPARC_PREFETCH_WRITE_ONCE(name)C$PRAGMASPARC_PREFETCH_WRITE_MANY(name)C$PRAGMAASSUME(expression[,probability])C$PRAGMABEGINASSUME[expression[,probability)blockofstatementsC$PRAGMAENDASSUME第2章使用Fortran952-13例如,如果程序员知道DO循环的长度始终大于10,000,则给编译器提供该提示可使之生成更好的代码.
通常,以下循环在使用ASSUMEpragma时比不使用时运行得要快.
有两个内部函数专用于ASSUME指令的表达式子句.
(注意,它们的名称前面有两个下划线.
)在将来的版本中,特殊内部函数的列表可能会扩展.
与-xassume_control编译器选项结合使用.
(参见第3-52页上的"-xassume_control[=keywords]")例如,在使用-xassume_control=check进行编译时,如果出现行程数小于10,000的情况,则上述示例将生成一条警告.
如果使用-xassume_control=retrospective进行编译,那么在程序终止时,将会生成一个摘要报告,指出所有断言是真还是假.
有关-xassume_control的详细信息,请参见"f95手册页".
另一个示例:如果使用-xassume_control=check编译上述示例,则在由于行程数为零或负数而没有执行循环时,将会发出一条运行时警告.
2.
3.
2并行化指令并行化指令显式地请求编译器尝试并行处理该指令后面的DO循环或代码区域.
其语法与一般指令不同.
只有在使用-openmp、-parallel或-explicitpar编译选项时,才能识别并行化指令.
有关Fortran并行化的详细信息,请参见《OpenMPAPI用户指南》和《Fortran编程指南》.
C$PRAGMABEGINASSUME(__tripcount().
GE.
10000,1)!
!
abigloopdoi=j,na(i)=a(j)+1enddoC$PRAGMAENDASSUME__branchexp()用于紧挨在包含布尔控制表达式的分支转移语句前面的点断言.
它产生与控制分支转移语句的布尔表达式相同的结果.
__tripcount()生成紧跟在指令后面的或指令所包含的循环的行程数.
在用于点断言时,指令后面的语句必须位于DO的第一行.
在用于范围断言时,它应用于最外层的闭合循环.
C$PRAGMAASSUME(__tripcount.
GT.
0,1)doi=n0,nx2-14《Fortran用户指南》2004年4月Fortran编译器支持OpenMP共享内存并行化模型以及传统的Sun和Cray指令.
2.
3.
2.
1OpenMP并行化指令Fortran95编译器将OpenMPFortran共享内存多处理API识别为首选的并行编程模型.
该API是由OpenMP体系结构审查委员会(http://www.
openmp.
org)指定的.
要启用OpenMP指令,您必须使用命令行选项-openmp进行编译.
(请参见第3-35页上的"-openmp[=keyword]".
)有关f95接受的OpenMP指令的详细信息,请参见《OpenMPAPI用户指南》.
2.
3.
2.
2传统的Sun/Cray并行化指令Sun风格的并行化指令是-parallel和-explicitpar的缺省设置.
Sun指令具有指令标记$PAR.
Cray风格的并行化指令具有标记MIC$(这些指令是用-mp=cray编译器选项启用的).
在Sun和Cray风格中,类似指令的解释是不同的.
有关详细信息,请参见《Fortran编程指南》中有关并行化方面的章节.
有关将传统的Sun/Cray并行化指令转换为OpenMP指令的指导原则,另请参见《OpenMPAPI用户指南》.
Sun/Cray并行化指令使用以下语法:第一个字符必须在第一列中.
第一个字符可以是以下任一字符:c、C、*或!
.
后4个字符可以是大写或小写的$PAR(Sun风格)或MIC$(Cray风格),字符之间没有空格.
然后是指令关键字和限定符,它们之间用空格分隔.
显式的并行化指令关键字有:TASKCOMMON、DOALL、DOSERIAL和DOSERIAL*每个并行化指令都具有自己的一组可选限定符(放在关键字后面).
示例:使用共享变量指定一个循环:C$PARDOALLSHARED(yvalue)Sun风格CMIC$DOALLSHARED(yvalue)Cray风格第2章使用Fortran952-152.
4库接口和system.
incFortran95编译器提供一个INCLUDE文件system.
inc,它为大多数非内在库例程定义了接口.
请声明此INCLUDE文件以确保所调用函数及其参数的类型得到正确的设置,尤其是在使用-xtypemap更改了缺省数据类型时.
例如,以下命令可能会产生一个算术异常,原因是没有显式地设定函数getpid()的类型:getpid()例程返回一个整数值,但如果没有为该函数声明显式的类型,则编译器认为它返回一个实数值.
此值被进一步转换为整数,很有可能会导致浮点错误.

要纠正这种错误,您应该显式地设定所调用的getuid()及类似函数的类型:您可以使用-Xlist(全局程序检查)选项诊断此类问题.
Fortran95INCLUDE文件"system.
inc"为这些例程提供显式的接口定义.
通过在调用Fortran库中的例程的程序单元中包含system.
inc,可以自动定义接口,并帮助编译器诊断类型不匹配的问题.
(有关详细信息,请参见《Fortran库参考》.
)integer(4)mypidmypid=getpid()print*,mypidinteger(4)mypid,getpidmypid=getpid()print*,mypidinclude'system.
inc'integer(4)mypidmypid=getpid()print*,mypid2-16《Fortran用户指南》2004年4月2.
5编译器用法提示后面几节向您建议了一些高效地使用Fortran95编译器的方法.
下一章中给出了完整的编译器选项参考.
2.
5.
1确定硬件平台某些编译器标记允许用户使用一组特定的硬件平台选项来优化代码生成.
公用程序命令fpversion显示本机处理器的硬件平台规范:打印的值取决于调用fpversion时的系统负载.
有关详细信息,请参见fpversion(1)和《数值计算指南》.
2.
5.
2使用环境变量可通过设置FFLAGS或OPTIONS变量来指定选项.
可以在命令行中显式地使用FFLAGS或OPTIONS.
在使用make的隐式编译规则时,make程序会自动使用FFLAGS.
示例:设置FFLAGS:(CShell)demo%fpversionASPARC-basedCPUisavailable.
KernelsaysCPU'sclockrateis750.
0MHz.
Kernelsaysmainmemory'sclockrateis150.
0MHz.
Sun-4floating-pointcontrollerversion0found.
AnUltraSPARCchipisavailable.
Use"-xtarget=ultra3"code-generationoption.
Hostid=hardware_host_id.
demo%setenvFFLAGS'-fast-Xlist'第2章使用Fortran952-17示例:显式地使用FFLAGS:在使用make时,如果按上述方式设置了FFLAGS变量并且makefile的编译规则是隐式的(即没有显式的编译器命令行),则调用make将导致相当于以下内容的编译:f95-fast-Xlistfiles…make是一个功能很强的程序开发工具,可以方便地将其用于所有的Sun编译器.
请参见"make(1)手册页"和《Fortran编程指南》中的"程序开发"一章.
注意–make使用的缺省隐式规则可能无法识别具有.
f95和.
mod(Fortran95模块文件)扩展名的文件.
有关详细信息,请参见《Fortran编程指南》和Fortran95自述文件.
2.
5.
3内存大小编译可能需要使用大量内存.
这取决于选定的优化级别和待编译文件的大小和复杂性.

在SPARC平台上,如果优化器内存不足,它将尝试通过在较低的优化级别中重试当前的过程来进行恢复,并以命令行上-On选项中指定的原始级别继续后续的例程.
运行编译器的处理器应该至少具有64MB的内存;建议使用256MB的内存.
此外还应该分配足够的交换空间.
最低为200MB;建议为300MB.
内存使用取决于每个过程的大小、优化级别、为虚拟内存设置的限制、磁盘交换文件的大小以及各种其它参数.
在编译包含多个例程的单个源文件时,可能出现编译器内存或交换空间不足的情况.

如果编译器内存不足,请尝试降低优化级别,或者使用fsplit(1)将多例程的源文件分成多个文件,使每个文件包含一个例程.
2.
5.
3.
1交换空间限制命令swap-s显示可用的交换空间.
请参见swap(1M).
demo%f95$FFLAGSany.
f2-18《Fortran用户指南》2004年4月示例:使用swap命令:确定实际的真实内存:2.
5.
3.
2增加交换空间使用mkfile(1M)和swap(1M)来增加工作站上交换空间的大小.
要执行此操作,您必须成为超级用户.
mkfile创建一个特定大小的文件,而swap-a将该文件增加到系统交换空间中:2.
5.
3.
3虚拟内存的控制以-O3或更高的优化级别编译很大的例程时,可能需要额外的内存,这可能会降低编译时的性能.
您可通过限制单个进程的可用虚拟内存的数量来控制这种情况.

在shshell中,请使用ulimit命令.
请参见sh(1).
示例:将虚拟内存限定在16MB以内:在cshshell中,请使用limit命令.
请参见csh(1).
示例:将虚拟内存限定在16MB以内:demo%swap-stotal:40236kbytesallocated+7280kreserved=47516kused,1058708kavailabledemo%/usr/sbin/dmesg|grepmemmem=655360K(0x28000000)availmem=602476544demo#mkfile-v90m/home/swapfile/home/swapfile94317840bytesdemo#/usr/sbin/swap-a/home/swapfiledemo$ulimit-d16000demo%limitdatasize16M第2章使用Fortran952-19这些命令行中的每一个都将导致优化器尝试在数据空间为16MB的情况下进行恢复.
此限值不能大于总的系统可用交换空间,并且实际上在进行较大的编译时,此限值必须很小以保证还能够正常地使用系统.
请确保没有任何编译占用一半以上的空间.

示例:在使用32MB的交换空间时,请使用以下命令:在shshell中:在cshshell中:最佳设置取决于所请求的优化等级和可用真实内存和虚拟内存的数量.

在64位Solaris环境中,应用程序数据段大小的软限制为2GB.
如果应用程序需要分配更多的空间,请使用shell的limit或ulimit命令删除该限制.
对于csh,请使用:对于sh或ksh,请使用:有关详细信息,请参见Solaris64-bitDeveloper'sGuide.
demo$ulimit-d1600demo%limitdatasize16Mdemo%limitdatasizeunlimiteddemo$ulimit-dunlimited2-20《Fortran用户指南》2004年4月3-1第章3Fortran编译器选项本章详细说明f95编译器的命令行选项.
从第3-1页上的第3.
1节"命令语法"开始是对用于编译器选项标志的语法的描述.
从第3-3页上的第3.
3节"选项摘要"开始是按功能排列的选项的摘要.
从第3-10页上的第3.
4节"选项参考"开始是详细说明每个编译器选项标志的完整参考.
3.
1命令语法编译器命令行的通用语法如下:方括号内的项表示可选参数.
方括号不是命令的一部分.
options是前面带有短划线(–)的选项关键字列表.
一些关键字选项将列表中的下一项作为参数.
list_of_files是由空格隔开的源文件名、目标文件名或库文件名的列表.
此外,有一些选项(例如,-B、-l和-L)必须出现在源文件列表之后,而且这些选项可能包括其它文件列表.

f95[options]list_of_filesadditional_options3-2《Fortran用户指南》2004年4月3.
2选项语法典型的编译器选项格式如下:在说明各个选项时使用以下印刷惯例:括号、管道符和省略号是在选项描述中使用的元字符,它们不是选项本身的一部分.

以下列举了一些有关选项的一般规则:–lx是用于与库libx.
a链接的选项.
将–lx放在文件名列表之后以确保搜索顺序库始终是比较安全的.
通常,编译器选项是从左向右处理的,允许选择性地覆盖宏选项(包括其它选项的选项).
上述规则不适用于链接程序选项.
表3-1选项语法语法格式示例–flag–g–flagvalue–Dnostep–flag=value–xunroll=4–flagvalue–ooutfile表3-2选项的印刷符号符号含义示例:文本/实例[]方括号包含的参数是可选的.
–O[n]–O4,–O{}花括号(大括号)包含必需选项的一组选择.
–d{y|n}–dy|"管道"(或"竖线")符号用来隔开参数,您只能选择其中的一个参数.
–B{dynamic|static}–Bstatic:与逗号一样,冒号有时也用于分隔参数.
–Rdir[:dir]–R/local/libs:/U/a…省略号表示序列中的省略部分.
–xinline=f1[,…fn]–xinline=alpha,dos第3章Fortran编译器选项3-3但是,当在同一命令行上重复出现时,某些选项(例如–I、–L和–R)将累加值,而不是覆盖前面的值.
源文件、目标文件和库是按它们在命令行上出现的顺序编译和链接的.

3.
3选项摘要在本节中,按功能对编译器选项进行分组,以便于参考.
有关详细信息,请参见以下几节中指明的页.
下表按功能汇总了f95编译器选项.
该表不包括已废弃的和传统的选项标志.
某些标志用于多个目的,因此出现多次.
表3-3按功能分组的编译器选项功能选项标志编译模式:仅编译;不生成可执行文件-c显示由驱动程序生成的命令,但不进行编译-dryrun支持Fortran77扩展和兼容性-f77为编写已编译的.
mod模块文件指定路径-moddir=path指定要编写的目标文件、库文件或可执行文件的名称-ofilename进行编译并只生成汇编代码-S将符号表与可执行文件分离-s禁止编译器消息(错误消息除外)-silent定义临时文件所在目录的路径-temp=path显示每个编译阶段占用的时间-time显示编译器的版本号及其阶段-V冗余消息-v指定非标准别名情况-xalias=list使用多个处理器进行编译-xjobs=n已编译代码:对于外部名称,增加/删除尾随下划线-ext_names=x内联指定的用户函数-inline=list与编译位置无关的代码-KPIC/-kpic3-4《Fortran用户指南》2004年4月内联某些数学库例程-libmilSTOP将整数状态值返回给shell-stop_status[=yn]指定代码地址空间-xcode=x启用UltraSPARC预取指令-xprefetch[=x]指定可选寄存器的使用-xregs=x指定缺省数据映射-xtypemap=x数据对齐:指定对齐COMMON块中的数据-aligncommon[=n]强制对齐COMMON块数据以允许双字获取/存储-dalign强制所有数据按8字节边界对齐-dbl_align_all按8字节边界对齐COMMON块数据-f指定内存对齐和行为-xmemalign[=ab]调试:启用运行时下标范围检查-C为使用dbx调试而进行编译-g为使用源浏览器浏览而进行编译-sb、-sbfast标记未声明变量的使用-u检查C$PRAGMAASSUME断言-xassume_control=check检查在运行时栈是否溢出-xcheck=stkovf启用运行时任务普通检查-xcommonchk为性能分析器进行编译-xF生成交叉引用列表-Xlistx在没有目标文件的情况下启用调试-xs诊断:标记非标准扩展名的使用-ansi禁止特定错误消息-erroff=list与错误消息一起显示错误标记名称-errtags显示编译器选项的摘要-flags、-help显示编译器的版本号及其阶段-V冗余消息-v表3-3按功能分组的编译器选项(续)功能选项标志第3章Fortran编译器选项3-5冗余的并行化消息-vpara显示/禁止警告消息-wn显示编译器自述文件-xhelp=readme许可:显示许可证服务器信息-xlicinfo链接和库:允许/要求动态/静态库-Bx只允许动态/静态库链接-dy、-dn生成动态(共享对象)库-G为动态库指定名称-hname将目录增加到库搜索路径-Lpath与库libname.
a或libname.
so链接-lname将运行时库搜索路径生成到可执行文件中-Rpath禁用递增链接程序ild-xildoff与优化的数学库链接-xlibmopt与Sun性能库链接-xlic_lib=sunperf链接编辑器选项-zx在不重定位的情况下生成纯库-ztext数字和浮点:使用非标准浮点首选项-fnonstd选择SPARC非标准浮点-fns启用输入过程中的运行时浮点溢出-fpover选择IEEE浮点舍入模式-fpround=r选择浮点优化级别-fsimple=n选择浮点捕获模式-ftrap=t指定用于格式化输入/输出的舍入方法-iorounding=mode将单精度常量提升为双精度常量-r8const启用区间运算并设置相应的浮点环境(包括-xinterval)-xia[=e]启用区间运算扩展-xinterval[=e]表3-3按功能分组的编译器选项(续)功能选项标志3-6《Fortran用户指南》2004年4月优化与性能:分析循环以了解数据相关性-depend使用所选的选项进行优化-fast指定优化级别-On填充数据布局以便有效使用高速缓存-pad[=p]在内存栈上分配局部变量-stackvar启用循环解开-unroll[=m]启用跨源文件的优化-xcrossfile[=n]调用过程间优化传递-xipo[=n]为#pragmaOPT设置最高优化级别-xmaxopt[=n]启用/调整编译器生成的预取指令-xprefetch=list控制预取指令的自动生成-xprefetch_level=n启用性能文件配置数据的生成或使用-xprofile=p断言不会出现基于内存的陷阱-xsafe=mem不执行增加代码大小的优化-xspace自动生成对向量库函数的调用-xvector[=yn]并行化:启用DO循环的自动并行化-autopar启用由指令显式标记的循环的并行化-explicitpar显示循环的并行化信息-loopinfo指定Cray式样的并行化指令-mp=CRAY为手动编码的多线程编程进行编译-mt接受OpenMPAPI指令并设置相应的环境-openmp[=keyword]使用-autopar-explicitpar-depend组合对循环进行并行化-parallel识别具有自动并行化的循环中的约简操作-reduction冗余的并行化消息-vpara源代码:定义预处理程序符号-Dname[=val]未定义预处理程序符号-Uname接受扩展(132个字符)源行-e表3-3按功能分组的编译器选项(续)功能选项标志第3章Fortran编译器选项3-73.
3.
1常用选项编译器具有许多供可选命令行参数选择的功能.
您可以从以下常用选项的简要列表开始了解这些常用选项.
将预处理程序应用于.
F和/或.
F90及.
F95文件,但不进行编译-F接受Fortran95固定格式输入-fixed使用fpp预处理程序预处理所有源文件-fpp接受Fortran95自由格式输入-free将目录添加到包含文件搜索路径-Ipath将目录添加到模块搜索路径-Mpath区分大小写-U在实际参数中将霍尔瑞斯常数视为字符-xhasc={yes|no}选择要使用的预处理程序(cpp或fpp)-xpp[={fpp|cpp}]允许递归子程序调用-xrecursive目标平台:为主机系统进行优化-native为优化器指定目标平台指令集-xarch=a为优化器指定目标高速缓存属性-xcache=a为优化器指定目标处理器-xchip=a为优化器指定目标平台-xtarget=a表3-4常用选项操作选项调试—为确保参数、公共块等的一致性在例程之间进行的全局程序检查.
–Xlist调试—产生其它符号表信息以启用dbx和调试.
–g性能—调用优化器以生成运行速度更快的程序.
–O[n]性能—使用一组预先确定的选项,为本机平台产生高效的编译时和运行时.
–fast动态(–Bdynamic)或静态(–Bstatic)库联编.
–Bx表3-3按功能分组的编译器选项(续)功能选项标志3-8《Fortran用户指南》2004年4月3.
3.
2宏标志某些选项标志是扩展为由其它标志组成的特定集合的宏.
提供这些选项标志的目的是,便于指定通常一起使用以选择某项功能的多个选项.
命令行上跟在宏标志后面的设置将覆盖宏扩展.
例如,要使用-fast,但优化级别是-O3,则在命令行上-O3必须跟在-fast后面.
只编译—禁止链接;为每个源文件生成.
o文件.
–c输出文件—将可执行输出文件命名为nm,而不是命名为a.
out.
–onm源代码—编译固定格式的Fortran源代码.
-fixed表3-5宏选项标志选项标志扩展-dalign-xmemalign=8s-aligncommon=16-f-aligncommon=16-fast-xO5-libmil-fsimple=2-dalign-xlibmopt-depend-fns-ftrap=common-pad=local-xvector=yes-xprefetch=yes-fnonstd-fns-ftrap=common-parallel-autopar-explicitpar-depend-xia=widestneed-xinterval=widestneed-ftrap=%none-fns=no-fsimple=0-xia=strict-xinterval=strict-ftrap=%none-fns=no-fsimple=0-xtarget-xarch=a-xcache=b-xchip=c表3-4常用选项(续)操作选项第3章Fortran编译器选项3-93.
3.
3向后兼容性和传统选项提供以下选项的目的是与早期编译器发行版本和某些Fortran传统功能向后兼容.
建议在生成可移植的Fortran95程序时不要使用这些选项标志.
3.
3.
4已废弃的选项标志下面的选项被认为是已废弃的,不应该使用它们.
在编译器的以后发行版本中可能会删除这些选项.
表3-6向后兼容性选项操作选项允许为常量参数赋值.
–copyargs在调用参数列表中将霍尔瑞斯常数视为字符或无类型.
-xhasc[={yes|no}]支持Fortran77扩展和惯例-f77非标准运算—允许非标准运算.
–fnonstd为主机系统优化性能.
–nativeDO循环—使用单行程DO循环.
–onetrip允许存在传统的别名情况-xalias=keywords表3-7已废弃的f95选项选项标志等效于-a-xprofile=tcov-cg89-xtarget=ss2-cg92-xtarget=ss1000-noqueue许可证排队.
不再需要.
-p文件配置.
使用-pg或性能分析器.
-pic-xcode=pic13-PIC-xcode=pic323-10《Fortran用户指南》2004年4月3.
4选项参考本节列出所有的f95编译器命令行选项标志,包括各种风险、限制、警告、交互作用、示例和其它详细信息.
此选项参考详细说明每个选项标志.
–a使用tcov按基本块进行文件配置,这是旧式用法.
(已废弃)这是tcov的基本块文件配置的旧式用法.
有关文件配置的新式用法,请参见–xprofile=tcov;有关更多详细信息,请参见tcov(1)手册页.
另请参见手册《程序性能分析工具》.
-aligncommon[=n]指定对齐公共块和数值序列类型中的数据.
n可以是1、2、4、8或16,它指示公共块和数值序列类型内数据元素的最大对齐(用字节表示).
例如,-aligncommon=4将按4字节或大于4字节边界来自然对齐数据元素.
此选项不影响自然对齐小于指定大小的数据.
如果不使用-aligncommon,则编译器按(最大)4字节边界对齐公共块和数值序列类型中的元素.
在没有值缺省为1的情况下指定-aligncommon:公共块和数值序列类型中的所有元素按字节边界对齐(即元素之间无填充).
在未启用64位的平台(除v9、v9a或v9b之外的平台)上,-aligncommon=16回复为-aligncommon=8.
–ansi标识许多非标准扩展.
如果在源代码中使用非标准Fortran95扩展,则发出警告消息.
-arg=local通过ENTRY语句保留实际参数.
第3章Fortran编译器选项3-11在使用此选项编译具有替换入口点的子程序时,f95使用复制/恢复保留伪参数和实际参数之间的关联.
提供此选项的目的是与传统的Fortran77程序兼容.
依赖此选项的代码是非标准的.
-autopar启用自动循环并行化.
查找和并行化相应的循环,以便在多个处理器上并行运行.
分析循环以了解迭代间的数据相关性并重构循环.
如果未将优化级别指定为–O3或更高,则将它自动提升到–O3.
在使用任何并行化选项(包括–autopar)时,也要指定–stackvar选项.
如果程序已经包含对libthread线程库的显式调用,请避免使用-autopar.
请参见3-31页上的"–mt"中的注意事项.
-autopar选项不适合于单处理器系统,而且已编译的代码通常会运行更慢.
要在多线程环境中运行并行化的程序,必须在执行之前设置PARALLEL(或OMP_NUM_THREADS)环境变量.
这将通知运行时系统程序可以创建的最大线程数.
缺省值是1.
通常,将PARALLEL或OMP_NUM_THREADS变量设置为目标平台上的可用处理器数.
如果使用–autopar并在同一步骤中进行编译和链接,则将自动链接多线程库和线程安全的Fortran运行时库.
如果使用-autopar并在单独步骤中进行编译和链接,则还必须使用-autopar进行链接以确保链接了相应的库.
-reduction选项与–autopar一起使用也可能是很有用的.
其它并行化选项是–parallel和–explicitpar.
有关并行化的详细信息,请参见《Fortran编程指南》.
–B{static|dynamic}首选动态库链接或要求静态库链接.
在–B与dynamic或static之间不允许有空格.
如果未指定–B,则缺省值为–Bdynamic.
–Bdynamic:首选动态链接(试图找到共享库).
–Bstatic:要求静态链接(无共享库).
另请注意:如果指定static,但是链接程序仅找到动态库,则不链接库,并发出警告"未找到库".
如果指定dynamic,但链接程序仅找到静态版本,则链接该库,并且不发出警告.
3-12《Fortran用户指南》2004年4月您可以在命令行上切换–Bstatic和–Bdynamic.
也就是说,通过在命令行上任意次指定-Bstatic和-Bdynamic,可以静态以及动态地链接一些库,如下所示:这些是加载器和链接程序选项.
使用编译命令上的-Bx在单独步骤中编译和链接时,也将在链接步骤中使用它.
您不能在命令行上同时指定-Bdynamic和-dn,因为-dn禁止动态库的链接.
在64位Solaris环境中,许多系统库仅作为共享动态库提供.
它们包括libm.
so和libc.
so(未提供libm.
a和libc.
a).
这意味着,在64位Solaris环境中,–Bstatic和–dn可能导致链接错误.
在这些情况下,应用程序必须与动态库链接.
有关静态库和动态库的详细信息,请参见《Fortran编程指南》.
–C检查数组引用以查找超出范围的下标并在运行时检查一致性.
引用的下标超过数组声明大小可能导致意外结果(包括段故障).
–C选项检查源代码中和执行过程中可能的数组下标违规.
-C还在运行时检查数组语法表达式中的数组一致性.
指定–C可能使可执行文件更大.
如果使用–C选项,则将数组下标违规视为错误.
如果在编译过程中检测到源代码中存在数组下标违规,则将它视为编译错误.
如果只能在运行时确定数组下标违规,则编译器将在可执行程序中生成范围检查代码.

这可能导致执行时间增加.
因此,应该在开发和调试程序时启用完全数组下标检查,然后重新编译成品可执行程序,而无须进行下标检查.
–c仅编译;产生对象.
o文件,但禁止链接.
为每个源文件编译.
o文件.
如果仅编译单个源文件,则可以使用–o选项指定写入的.
o文件的名称.
–cg89为通用SPARC体系结构进行编译.
(已废弃)此选项是以下选项的宏:–xarch=v7–xchip=old–xcache=64/32/1,它等效于–xtarget=ss2.
f95prog.
f-Bdynamic-lwells-Bstatic-lsurface第3章Fortran编译器选项3-13–cg92为SPARCV8体系结构进行编译.
(已废弃)此选项是以下选项的宏:–xarch=v8–xchip=super–xcache=16/32/4:1024/32/1,它等效于–xtarget=ss1000.
–copyargs允许为常量参数赋值.
允许子程序更改类型为常量的伪参数.
提供此选项只是为了能够编译和执行以前原有的代码而不发出运行时错误.
在不使用–copyargs的情况下,如果将常量参数传递给子例程,然后在子例程内尝试更改该常量,则运行将终止.
在使用–copyargs的情况下,如果将常量参数传递给子例程,然后在子例程内更改该常量,则运行不一定终止.
当然,除非使用–copyargs进行编译,否则终止的代码是不符合Fortran标准的.
此外,这样的代码通常是不可预知的.
–Dname[=def]为预处理程序定义符号name.
此选项仅适用于.
F、.
F90和.
F95源文件.
–Dnamedef将name定义为具有值def–Dname将name定义为1在命令行上,此选项将这样定义name,正如:#definename[=def]已经出现在源文件中.
如果未指定=def,则将名称name定义为值1.
将宏符号name传递给预处理程序fpp(或cpp—请参见–xpp选项)以进行扩展.
预定义的宏符号具有两个前导下划线.
Fortran语法可能不支持这些宏的实际值—它们应该仅出现在fpp或cpp预处理程序指令中.
产品版本是在__SUNPRO_F90和__SUNPRO_F95中预定义的(用十六进制表示).
例如,对于SunStudio8发行版本,__SUNPRO_F95是0x800.
以下宏是在相应系统上预定义的:__sparc、__unix、__sun、__SVR4、__SunOS_5_6、__SunOS_5_7、__SunOS_5_83-14《Fortran用户指南》2004年4月例如,值__sparc是在SPARC系统上定义的.
您可以在类似如下的预处理程序条件中使用这些值:#ifdef__sparc下面的预定义值不带下划线,但是在以后的发行版本中可能删除这些值:sparc、unix、sun在SPARCV9系统上,还定义了__sparcv9宏.
缺省情况下,f95使用fpp(1)预处理程序.
与C预处理程序cpp(1)一样,fpp扩展源代码宏并启用代码的条件编译.
与cpp不同,fpp了解Fortran语法,并且是作为首选的Fortran预处理程序.
使用–xpp=cpp标志可以将编译器强制为明确使用cpp,而不是使用fpp.
–dalign对齐COMMON块和数值序列类型,并生成速度更快的多字装入/存储.
此标志更改COMMON块中的数据布局、数值序列类型和EQUIVALENCE类,并使编译器能够为该数据生成速度更快的多字装入/存储.
数据布局效果与-f标志的效果相同:COMMON块和EQUIVALENCE类中的双精度和四倍精度数据在内存中是根据其"自然"对齐(按8字节边界;使用-xarch=v9或v9a为64位环境编译时,四倍精度数据按16字节边界对齐)布局的.
缺省情况下,COMMON块中的数据按4字节边界对齐.
还允许编译器假定自然对齐并生成速度更快的多字装入/存储以引用数据.
注意–-dalign可能导致数据的非标准对齐,这样就可能导致EQUIVALENCE或COMMON中的变量出现问题,并可能在需要–dalign的情况下使程序变为不可移植.
-dalign是一个宏,它等效于:-xmemalign=8s-aligncommon=16.
请参见3-10页上的"-aligncommon[=n]"和3-67页上的"-xmemalign[=]".
如果使用–dalign编译一个子程序,请使用–dalign编译该程序的所有子程序.
此选项包括在–fast选项中.
请注意,因为-dalign调用-aligncommon,所以此选项还影响数值序列类型.
–dbl_align_all={yes|no}强制按8字节边界对齐数据.
值可以是yes或no.
如果是yes,将按8字节边界对齐所有变量.
缺省值是–dbl_align_all=no.
使用-xarch=v9或v9a为64位环境进行编译时,此标志将按16字节边界对齐四倍精度数据.
第3章Fortran编译器选项3-15此标志不改变COMMON块或用户定义结构中的数据的布局.
与–dalign一起使用可以提高多字装入/存储的效率.
如果使用了此标志,则所有例程都必须使用此标志进行编译.
–depend{=yes|no}分析循环以了解数据相关性并重构循环.
使用-depend或-depend=yes可启用相关性分析.
使用-depend=no(编译器的缺省值)可禁用相关性分析.
如果未指定优化级别,或者指定的级别低于O3,则此选项将优化级别提升到O3.
–depend还包括在–fast、-autopar和-parallel中.
另请注意,将优化级别指定为-O3或更高将自动增加-depend.
(请参见《Fortran编程指南》.
)-dn禁止动态库.
请参见3-15页上的"–d{y|n}".
–dryrun显示由f95命令行驱动程序生成的命令,但不进行编译.
此选项在调试时是很有用的,它显示编译器为执行编译将调用的命令和子选项.

–d{y|n}允许或禁止对整个可执行文件使用动态库.
–dy:允许使用动态/共享库.
–dn:不允许使用动态/共享库.
如果未指定,则缺省值是–dy.
与–Bx不同,此选项适用于整个可执行文件,并且只需在命令行上出现一次.
–dy|–dn是加载器和链接程序选项.
如果使用这些选项在单独步骤中编译和链接,则在链接步骤中需要同一选项.
在64位Solaris环境中,许多系统库不仅仅作为共享动态库.
它们包括libm.
so和libc.
so(未提供libm.
a和libc.
a).
这意味着,在64位Solaris环境中,–dn和–Bstatic可能导致链接错误.
在这些情况下,应用程序必须与动态库链接.
–e接受扩展长度的输入源代码行.
3-16《Fortran用户指南》2004年4月扩展的源代码行的长度最大可以是132个字符.
编译器在右侧用结尾空白一直填充到第132列.
如果在使用–e进行编译时使用续行,则不跨行拆分字符常量;否则,可能会在常量中插入不必要的空白.
–erroff=taglist禁止由标记名称列出的警告消息.
禁止显示在标记名称的逗号分隔列表taglist中指定的警告消息.
如果taglist由%none组成,则不禁止警告.
如果taglist由%all组成,则禁止所有警告(这等效于–w选项).
示例:f95-erroff=WDECL_LOCAL_NOTUSEDink.
f使用–errtags选项可以查看与警告消息关联的标记名称.
–errtags[={yes|no}]与每个警告消息一起显示消息标记.
如果使用-errtags=yes,编译器的内部错误标记名称将与警告消息一起显示.
缺省情况下不显示标记(-errtags=no).
单独使用-errtags时表示-errtags=yes.
–explicitpar对Sun或Cray指令显式标记的循环进行并行化.
即使DO循环中存在数据相关性(在循环并行运行时,这些相关性将使循环生成错误结果),编译器也将生成并行代码.
对于显式并行化,您需要在用并行化指令标记循环之前,正确地分析它们以了解数据相关性问题.
并行化仅适合于多处理器系统.
此选项启用Sun和/或Cray显式并行化指令.
紧随在并行化指令之后的DO循环将为这些并行化指令生成线程代码.
要启用OpenMP显式并行化指令,请不要使用-explicitpar,而改用-openmp.
请参见3-35页上的"-openmp[=keyword]")demo%f95–errtagsink.
fink.
f:MAIN:"ink.
f",第11行:警告:从未使用局部变量"i"(WDECL_LOCAL_NOTUSED)1建议优化器尝试解开循环n次.
通常,循环解开可提高性能,但会增加可执行文件的大小.
有关此编译器和其它编译器优化的详细信息,请参见《Fortran编程指南》中的"性能与优化"一章.
另请参见2-10页上的"UNROLL指令".
-use=list指定隐式USE模块.
list是一个模块名称或模块文件名称的逗号分隔列表.
使用-use=module_name进行编译可将USEmodule_name语句增加到正编译的每个子程序或模块.
使用-use=module_file_name进行编译可为包含在指定文件中的每个模块增加USEmodule_name.
有关Fortran95中模块的详细信息,请参见4-21页上的"模块文件".
–V显示每个编译器传递的名称和版本.
此选项在编译器执行时打印每个传递的名称和版本.
在与Sun服务工程师讨论问题时,此信息可能很有用.
3-44《Fortran用户指南》2004年4月–v冗余模式–显示每个编译器传递的详细信息.
与–V一样,此选项在编译器执行时显示每个传递的名称,以及驱动程序使用的选项、宏标志扩展和环境变量的详细信息.
-vax=keywords指定启用VAXVMSFortran扩展的选择.
keywords说明符必须是以下子选项之一或从中选择的子选项的逗号分隔列表.
通过在子选项前面加上no%,可以单独选择或关闭该子选项.
示例:-vax=debug,rsize,no%blank_zero–vpara显示冗余并行化消息.
在编译器分析用指令显式标记为并行化的循环时,它发出有关所检测到的某些数据相关性的警告消息;但是仍将对循环进行并行化.
示例:冗余并行化警告:blank_zero在内部文件上将格式化输入中的空格解释为零.
debug将以字符"D"开头的行解释为正规Fortran语句,而不是像VMSFortran中那样解释为注释.
rsize将无格式的记录大小解释为以字为单位,而不是解释为以字节为单位.
struct_align内存中VAX结构的布局组件,与VMSFortran中一样,没有填充.
注意:这可能导致数据无法对齐.
%all启用所有这些VAXVMS功能.
%none禁止所有这些VAXVMS功能.
demo%f95-explicitpar-vparaany.
fany.
f:MAINany:"any.
f",第11行:警告:循环可能有约束引用的并行第3章Fortran编译器选项3-45–w[n]显示或禁止警告消息.
此选项显示或禁止大多数警告消息.
但是,如果一个选项覆盖命令行上前面选项的全部或部分,您一定会收到一个警告.
n可以是0、1、2、3或4.
-w0仅显示错误消息.
它等效于-w-w1显示错误和警告.
在不使用-w的情况下,这是缺省值.
-w2显示错误、警告和注意.
-w3显示错误、警告、注意和说明.
-w4显示错误、警告、注意、说明和注释.
示例:–w仍然允许显示某些警告:–Xlist[x]产生列表并进行全局程序检查(GPC).
使用此选项可查找潜在的编程错误.
它调用额外的编译器传递,在全局程序中检查子程序调用参数、公共块和参数的一致性.
此选项还生成带行号的源代码列表,包括交叉引用表.
由–Xlist选项发出的错误消息是建议性警告,不会阻止程序的编译和链接.
注意–确保在使用-Xlist进行编译之前,更正了源代码中的所有语法错误.
在具有语法错误的源代码上运行时,可能产生不可预知的报告.
示例:检查例程之间的一致性:上述示例将以下内容写入输出文件fil.
lst:带行号的源代码列表(缺省)有关例程间不一致性的错误消息(嵌入在列表中)标识符的交叉引用表(缺省)缺省情况下,将列表写入文件name.
lst,其中name取自命令行上列出的第一个源文件.
demo%f95-w-parallelany.
ff95:警告:优化器级别已从0改为3以支持并行化代码demo%demo%f95-Xlistfil.
f3-46《Fortran用户指南》2004年4月许多子选项为操作选择提供了进一步的灵活性.
它们是由–Xlist主选项的后缀指定的,如下表所示有关详细信息,请参见《Fortran编程指南》的"程序分析和调试"一章.
–xa等效于–a.
-xalias[=keywords]指定要由编译器假定的别名程度.
一些非标准编程方法会产生干扰编译器优化策略的情况.
过多索引和指针的使用,以及将全局或非唯一变量作为子程序参数进行传递,会产生歧义别名的情况,使生成的代码无法按预期结果运行.
使用-xalias标志可通知编译器程序偏离Fortran标准的别名要求的程度.
表3-9–Xlist子选项选项功能–Xlist显示错误、列表和交叉引用表–Xlistc显示调用图和错误–XlistE显示错误–Xlisterr[nnn]禁止错误nnn消息–Xlistf显示错误、列表和交叉引用,但不显示目标文件–Xlisth如果检测到错误,则终止编译–XlistI分析#include和INCLUDE文件以及源文件–XlistL仅显示列表和错误–Xlistln将页面长度设置为n行-XlistMP检查OpenMP指令–Xlistoname将报告文件输出到name,而不是file.
lst–Xlists禁止来自交叉引用表的未引用名称–Xlistvn将检查级别设置为n(1、2、3或4)–缺省值是2–Xlistw[nnn]将输出行的宽度设置为nnn列–缺省值是79–Xlistwar[nnn]禁止警告nnn消息–XlistX显示交叉引用表和错误第3章Fortran编译器选项3-47此标志可能带有关键字列表,也可能不带关键字列表.
keywords列表由逗号分隔,各个关键字指示程序中存在的别名情况.
可以在每个关键字前面加上no%,以指示不存在的别名类型.
别名关键字如下:指定不带列表的-xalias将为不违反Fortran别名规则的大多数程序提供最佳的性能,不带列表的-xalias等效于:no%dummy,no%craypointer,no%actual,no%overindex,no%ftnpointer表3-10-xalias选项关键字关键字含义dummy子程序的伪(形式)参数可以互为别名,也可以作为全局变量的别名.
no%dummy(缺省值).
伪参数的使用遵循Fortran标准,它们不能互为别名,也不作为全局变量的别名.
craypointer(缺省值).
Cray指针可以指向任何全局变量或LOC()函数采用其地址的局部变量.
此外,两个Cray指针可能指向同一数据.
这是可以禁止某些优化的安全假定.
no%craypointerCray指针仅指向唯一内存地址,如从malloc()获得的地址.
此外,没有两个Cray指针是指向同一数据的.
此假定允许编译器优化Cray指针引用.
actual编译器将子程序的实际参数视为全局变量.
将参数传递给子程序可能会导致通过Cray指针命名别名.
no%actual(缺省值)传递参数不会导致进一步命名别名.
overindex对COMMON块中元素的引用可能引用COMMON块或等价组中的任何元素.
将COMMON块或等价组中的任何元素作为实际参数传递给子程序,被调用的子程序就可以访问该COMMON块或等价组中的任何元素.
将序列派生类型的变量视为COMMON块,此类变量的元素可能作为该变量其它元素的别名.
可能违反了单个数组边界,但除上文所述外,假定引用的数组元素仍然在数组内.
没有考虑数组语法、WHERE和FORALL语句以便建立过多索引.
如果过多的索引发生在这些构造中,则应该将它们作为DO循环重新编写.
no%overindex(缺省值)没有违反数组边界.
数组引用不引用其它变量.
ftnpointer对外部函数的调用可能使Fortran指针指向任何类型、种类或等级的目标变量.
no%ftnpointer(缺省值)Fortran指针遵循标准中的规则.
3-48《Fortran用户指南》2004年4月为提高效率,在使用优化级别-xO3和更高级别进行编译时,应该使用-xalias.
如果未指定-xalias标志,则缺省情况下编译器假定程序符合Fortran95标准(Cray指针除外):no%dummy,craypointer,no%actual,no%overindex,no%ftnpointer有关各种别名情况的示例以及如何使用-xalias指定它们,请参见《Fortran编程指南》中的"移植"一章.
–xarch=isa指定指令集架构(ISA).
-xarch关键字isa接受的架构如表3-11所示:请注意,虽然-xarch可以单独使用,但它是–xtarget选项扩展的一部分,并且可以用于覆盖由特定–xtarget选项设置的–xarch值.
例如:%f95-xtarget=ultra2-xarch=v8plusb.
.
.
覆盖由-xtarget=ultra2设置的-xarch=v8通过只允许指定的指令集,此选项使编译器生成的代码只包含指定指令集架构的指令.

此选项不保证使用任何目录特定的指令.
如果此选项与优化一起使用,则适当的选择可以在指定的架构上为可执行文件提供良好性能.
由不适当的选择而产生的二进制程序在预定目标平台上是不可执行的.

表3-12汇总了最常用的-xarch选项:表3-11–xarchISA关键字平台有效的-xarch关键字SPARCgeneric、generic64、native、native64、v7、v8a、v8、v8plus、v8plusa、v8plusb、v9、v9a、v9b表3-12SPARC平台上最常用的-xarch选项-xarch=性能generic在所有平台上运行都可以获得足够的性能v8plusa在UltraSPARC-II处理器上以32位模式运行可以获得最佳性能第3章Fortran编译器选项3-49另请注意以下事项:SPARC指令集架构V7、V8和V8a都是二进制兼容的.
使用v8plus和v8plusa编译的对象二进制文件(.
o)可以进行链接并可一起执行,但是只能在SPARCV8plusa兼容平台上运行.
使用v8plus、v8plusa和v8plusb编译的对象二进制文件(.
o)可以进行链接并可一起执行,但是只能在SPARCV8plusb兼容平台上运行.
-xarch值v9、v9a和v9b只能在UltraSPARC64位Solaris环境中使用.
使用v9和v9a编译的对象二进制文件(.
o)可以进行链接并可一起执行,但是将只能在SPARCV9a兼容平台上运行.
使用v9、v9a和v9b编译的对象二进制文件(.
o)可以进行链接并可一起执行,但是将只能在SPARCV9b兼容平台上运行.
对于任何特定选择,生成的可执行文件可能在早期架构上运行得非常慢.
此外,虽然四倍精度(REAL*16和longdouble)浮点指令在其中的许多指令集架构中是可用的,但是编译器在它所生成的代码中并不使用这些指令.
表3-13提供有关SPARC平台上每个-xarch关键字的详细信息.
v8plusb在UltraSPARC-III处理器上以32位模式运行可以获得最佳性能不能在其它平台上执行v9a在UltraSPARC-II处理器上以64位模式运行可以获得最佳性能不能在其它平台上执行v9b在UltraSPARC-III处理器上以64位模式运行可以获得最佳性能不能在其它平台上执行表3-13SPARC平台的-xarch值-xarch=含义generic为了在大多数32位系统上获得良好性能而进行编译.
这是缺省值.
此选项使用最佳指令集以便在大多数处理器上获得良好性能,而不使其中任一处理器上的性能有较大幅度的降低.
对于每个新的发行版本,"最佳"指令集的定义可能会有所调整(如果适当),当前解释为v8.
generic64为了在大多数启用64位的系统上获得良好性能而进行编译.
此选项使用最佳指令集以便在大多数启用64位的处理器上获得良好性能,而不使其中任一处理器上的性能有较大幅度的降低.
对于每个新的发行版本,"最佳"指令集的定义可能会有所调整(如果适当),当前解释为v9.
native为了在此系统上获得良好性能而进行编译.
这是-fast选项的缺省值.
编译器为运行它的当前系统处理器选择适当的设置.
表3-12SPARC平台上最常用的-xarch选项(续)-xarch=性能3-50《Fortran用户指南》2004年4月native64为了在此系统上获得64位模式下的良好性能而进行编译.
与native一样,编译器在运行它的当前系统处理器上为64位模式选择适当的设置.
v7为SPARC-V7ISA进行编译.
使编译器能够生成用于在V7ISA上获得良好性能的代码.
这等效于为了在V8ISA上获得良好性能而使用最佳指令集,但是不使用整数mul和div指令及fsmuld指令.
示例:SPARCstation1,SPARCstation2v8a为SPARC-V8ISA的V8a版本进行编译.
按照定义,V8a是指不包含fsmuld指令的V8ISA.
此选项使编译器能够生成用于在V8aISA上获得良好性能的代码.
示例:基于microSPARCI芯片架构的任何系统v8为SPARC-V8ISA进行编译.
使编译器能够生成用于在V8架构上获得良好性能的代码.
示例:SPARCstation10v8plus为SPARC-V9ISA的V8plus版本进行编译.
按照定义,V8plus是指仅包含V8plusISA规范定义的32位子集、不包含可视指令集(VIS)和其它实现特定的ISA扩展的V9ISA.
此选项使编译器能够生成用于在V8plusISA上获得良好性能的代码.
生成的对象代码是SPARC-V8+ELF32格式的,只能在SolarisUltraSPARC环境中执行—它不能在V7或V8处理器上运行.
示例:基于UltraSPARC芯片架构的任何系统v8plusa为SPARC-V9ISA的V8plusa版本进行编译.
按照定义,V8plusa是指带有可视指令集(VIS)1.
0版和UltraSPARC扩展的V8plus架构.
此选项使编译器能够生成用于在UltraSPARC架构上(但仅限于V8plus规范定义的32位子集)获得良好性能的代码.
生成的对象代码是SPARC-V8+ELF32格式的,只能在SolarisUltraSPARC环境中执行—它不能在V7或V8处理器上运行.
示例:基于UltraSPARC芯片架构的任何系统v8plusb为SPARC-V8plusISA的V8plusb版本(带有UltraSPARC-III扩展)进行编译.
使编译器能够生成用于带有可视指令集(VIS)2.
0版和UltraSPARC-III扩展的UltraSPARC架构的对象代码.
生成的对象代码是SPARC-V8+ELF32格式的,只能在SolarisUltraSPARC-III环境中执行.
如果使用此选项进行编译,则将使用用于在UltraSPARC-III架构上获得良好性能的最佳指令集.
表3-13SPARC平台的-xarch值(续)-xarch=含义第3章Fortran编译器选项3-51v9为SPARC–V9ISA进行编译.
使编译器能够生成用于在V9SPARC架构上获得良好性能的代码.
生成的.
o目标文件是ELF64格式的,只能与相同格式的其它SPARC-V9目标文件链接.
只能在运行启用64位且具有64位内核的Solaris操作环境的UltraSPARC处理器上运行生成的可执行文件.
仅当在启用64位的Solaris环境中进行编译时,–xarch=v9才是可用的.
v9a为带有UltraSPARC扩展的SPARC–V9ISA进行编译.
将UltraSPARC处理器特定的可视指令集(VIS)和扩展增加到SPARC-V9ISA,并使编译器能够生成用于在V9SPARC结构上获得良好性能的代码.
生成的.
o目标文件是ELF64格式的,只能与相同格式的其它SPARC-V9目标文件链接.
只能在运行启用64位且具有64位内核的Solaris操作环境的UltraSPARC处理器上运行生成的可执行文件.
仅当在启用64位的Solaris操作环境中进行编译时,–xarch=v9a才是可用的.
v9b为带有UltraSPARC-III扩展的SPARC-V9ISA进行编译.
将UltraSPARC-III扩展和VIS2.
0版增加到SPARC-V9ISA的V9a版本.
如果使用此选项进行编译,则将使用用于在SolarisUltraSPARC-III环境中获得良好性能的最佳指令集.
生成的对象代码是SPARC-V9ELF64格式的,只能与相同格式的其它SPARC-V9目标文件链接.
只能在运行启用64位且具有64位内核的Solaris操作环境的UltraSPARC-III处理器上运行生成的可执行文件.
仅当在启用64位的Solaris操作环境中进行编译时,–xarch=v9b才是可用的.
表3-13SPARC平台的-xarch值(续)-xarch=含义3-52《Fortran用户指南》2004年4月-xassume_control[=keywords]设置参数以控制ASSUME编译指示.
使用此标志可控制编译器处理源代码中ASSUME编译指示的方式.
ASSUME编译指示为程序员提供了一种断言特殊信息(编译器使用这些特殊信息可实现较佳的优化)的方法.
可以使用可能值限定这些断言.
将可能值为0或1的断言标记为"确定",否则视为不确定.
也可以使用可能或确定性断言将要执行的DO循环的行程计数,或断言将要采取的分支.
有关f95编译器识别的ASSUME编译指示的描述,请参见第2-12页上的第2.
3.
1.
9节"ASSUME指令".
-xassume_control选项上的keywords可以是单个子选项关键字,也可以是逗号分隔的关键字列表.
识别的关键字子选项如下:编译器的缺省值是-xassume_control=optimize这意味着,编译器识别ASSUME编译指示,而且后者将影响优化,但是不进行检查.
如果指定不带参数的-xassume_control,则隐含-xassume_control=check,fatal在这种情况下,编译器接受并检查所有确定的ASSUME编译指示,但是后者不影响优化.
无效的断言将导致程序终止.
optimize在ASSUME编译指示上作出的断言影响程序的优化.
check编译器生成用于检查标记为"确定"的所有断言是否正确的代码,并在断言被违反时发出运行时消息;如果没有同时指定fatal,则程序继续运行.
fatal与check一起使用时,如果标记为"确定"的断言被违反,则程序将终止.
retrospective[:d]d参数是可选的容差值,它必须是小于1的正实常量.
缺省值是".
1".
retrospective编译代码以确定所有断言的真假.
容差值d之外的那些值在程序终止时的输出结果中列出.
%none忽略所有ASSUME编译指示.
第3章Fortran编译器选项3-53–xautopar等效于–autopar.
–xcache=c为优化器定义高速缓存属性.
c必须是以下值之一:genericnatives1/l1/a1s1/l1/a1:s2/l2/a2s1/l1/a1:s2/l2/a2:s3/l3/a3si/li/ai的定义如下:sii级数据高速缓存的大小(千字节)lii级数据高速缓存的行大小(字节)aii级数据高速缓存的结合性此选项指定优化器可以使用的高速缓存属性.
它不保证使用了任何特定高速缓存属性.

虽然此选项可以单独使用,但它是–xtarget选项扩展的一部分;提供它是为了允许覆盖特定的–xtarget选项所隐含的–xcache值.
示例:–xcache=16/32/4:1024/32/1指定以下内容:一个1级高速缓存具有以下属性:16K字节、32字节行大小、4向结合性.
一个2级高速缓存具有以下属性:1024K字节、32字节行大小、直接映射结合性.
–xcg89等效于–cg89.
表3-14–xcache值值含义generic定义高速缓存属性,以便在大多数SPARC处理器上获得良好性能,而且不使性能有较大幅度的降低.
这是缺省值.
native定义高速缓存属性,以便在此主机平台上获得良好性能.
s1/l1/a1定义1级高速缓存属性.
s1/l1/a1:s2/l2/a2定义1级和2级高速缓存属性.
s1/l1/a1:s2/l2/a2:s3/l3/a3定义1级、2级和3级高速缓存属性3-54《Fortran用户指南》2004年4月–xcg92等效于–cg92.
-xcheck=keyword生成特殊的运行时检查和初始化.
keyword必须是以下项之一:栈溢出(尤其是在栈上分配大数组的多线程应用程序中)可以在邻近线程栈中导致无提示的数据损坏.
如果怀疑存在栈溢出,请使用-xcheck=stkovf编译所有例程.
但是请注意,使用此标志进行编译不保证将检测到所有栈溢出情况,因为它们可能出现在不是使用此标志编译的例程中.
–xchip=c为优化器指定目标处理器.
此选项通过指定目标处理器来指定计时属性.
虽然此选项可以单独使用,但它是–xtarget选项扩展的一部分;提供它是为了允许覆盖特定的–xtarget选项所隐含的–xchip值.
–xchip=c的一些作用是:指令调度编译分支的方式在语义等价的两个选择项之间作出选择keyword功能stkovf打开用于检测子程序入口上是否有栈溢出的运行时检查.
如果检测到栈溢出,则将引发SIGSEGV段故障.
no%stkovf禁止用于检测栈溢出的运行时检查.
init_local执行局部变量的特殊初始化.
编译器将局部变量初始化为这样一个值:如果在赋予该值之前程序使用了它,则可能导致运算异常.
也将以此方式对ALLOCATE语句分配的内存进行初始化.
不对模块变量、SAVE变量和COMMON块中的变量进行初始化.
no%init_local禁止局部变量初始化.
这是缺省值.
%all打开所有这些运行时检查功能.
%none禁止所有这些运行时检查功能.
第3章Fortran编译器选项3-55下面的两个表列出有效的–xchip处理器名称值:下面是较旧且不常用的-xchip处理器名称,在此处列出供参考:表3-15常用的–xchip处理器名称-xchip=为以下项目进行优化generic大多数SPARC处理器.
(这是缺省值.
)native此主机平台.
ultraUltraSPARC处理器.
ultra2UltraSPARCII处理器.
ultra2eUltraSPARCIIe处理器.
ultra2iUltraSPARCIIi处理器.
ultra3UltraSPARCIII处理器.
ultra3cuUltraSPARCIIIcu处理器.
表3-16较不常用的-xchip处理器名称-xchip=为以下项目进行优化oldpre–SuperSPARC处理器.
superSuperSPARC处理器.
super2SuperSPARCII处理器.
microMicroSPARC处理器.
micro2MicroSPARCII处理器.
hyperHyperSPARC处理器.
hyper2HyperSPARCII处理器.
powerupWeitekPowerUp处理器.
3-56《Fortran用户指南》2004年4月–xcode=addr指定SPARC平台上的代码地址空间.
addr的值有:缺省值(如果不显式指定-xcode=addr)是:–xcode=abs32在SPARCV8和V7平台上.
–xcode=abs64在SPARC和UltraSPARCV9(–xarch=v9或v9a)上与位置无关的代码:在创建动态共享库以提高运行时性能时,可使用-xcode=pic13或-xcode=pic32.
尽管动态可执行文件内的代码通常绑定到内存中的固定地址,但是可以将与位置无关的代码装入进程地址空间中的任意位置.
在使用与位置无关的代码时,将生成可重定位引用,作为通过全局偏移表的间接引用.

在使用-xcode=pic13或-xcode=pic32进行编译时,由于不要求大量的重定位(这些重定位是与位置有关的代码所强制的),从而使共享对象中的频繁访问项获益.
全局偏移表的大小不应超过8Kb.
-xcode={pic13|pic32}有两个名义性能成本:使用-xcode=pic13或-xcode=pic32编译的例程在入口处执行几个额外指令,以便将寄存器设置为指向用于访问共享库的全局变量或静态变量的全局偏移表.

每次对全局变量或静态变量的访问都会涉及通过全局偏移表的额外间接内存引用.

如果编译是使用pic32进行的,则每个全局和静态内存引用都有两个额外指令.
addr功能abs32生成32位绝对地址.
代码+数据+bss的大小不应超过2**32字节.
下面是32位平台上的缺省值:-xarch=generic,v7,v8,v8a,v8plus,v8plusaabs44生成44位绝对地址.
代码+数据+bss的大小不应超过2**44字节.
仅在64位平台上可用:-xarch=v9,v9aabs64生成64位绝对地址.
仅在64位平台上可用:-xarch=v9,v9apic13生成与位置无关的代码(小模型).
等效于-pic.
在32位平台上,允许至多引用2**11个唯一外部符号;在64位平台上为2**10个.
pic32生成与位置无关的代码(大模型).
等效于-PIC.
在32位平台上允许至多引用2**30个唯一外部符号;在64位平台上为2**29个.
第3章Fortran编译器选项3-57在考虑上述成本时,请记住:由于受到库代码共享的影响,使用-xcode=pic13或-xcode=pic32可以大大减少系统内存需求.
共享库中已使用-xcode=pic13或-xcode=pic32编译的每个代码页都可以由使用该库的每个进程共享.
如果共享库中的代码页包含非pic(即绝对)内存引用,即使仅包含单个非pic内存引用,该页也将变为不可共享,而且每次执行使用该库的程序时都必须创建该页的副本.

确定是否已经使用-xcode=pic13或-xcode=pic32编译.
o文件的最简单方法是使用nm命令:nmfile.
o|grep_GLOBAL_OFFSET_TABLE_包含与位置无关的代码的.
o文件将包含对_GLOBAL_OFFSET_TABLE_非分辨的外部引用(用字母U标记).
要确定是使用-xcode=pic13还是使用-xcode=pic32,请使用nm确定在库中使用或定义的不同全局变量和静态变量的数目.
如果_GLOBAL_OFFSET_TABLE_的大小小于8,192字节,则可以使用pic13.
否则,必须使用pic32.
在生成动态库时,建议使用-xcode=pic13或pic32(或者-pic或-PIC)选项进行编译.
请参见SolarisLinkerandLibrariesGuide.
–xcommonchk[={no|yes}]启用公共块不一致性的运行时检查.
此选项提供了检测使用TASKCOMMON及并行化的程序中的公共块不一致性的调试检查.
(请参见《Fortran编程指南》的"并行化"一章中有关TASKCOMMON指令的讨论.
)缺省值是–xcommonchk=no;用于检测公共块不一致性的运行时检查已禁止,因为它会导致性能的降低.
应仅在程序开发和调试过程中使用-xcommon=yes,而不应将其用于符合最终产品质量的程序.
使用–xcommonchk=yes进行编译会启用运行时检查.
如果在一个源程序单元中声明为正规公共块的公共块出现在TASKCOMMON指令上的某个其它位置,则程序将停止并显示一条错误消息,指出第一个此类不一致.
3-58《Fortran用户指南》2004年4月示例:在tc.
f中缺少TASKCOMMON指令–xcrossfile[=n]启用跨源文件的优化和内联.
如果指定n,则它可以是0或1.
通常,将编译器的分析范围限制为命令行上的每个单独文件.
例如,–O4的自动内联被限制为在同一源文件内定义和引用的子程序.
如果使用–xcrossfile,则编译器分析在命令行上指定的所有文件,就好像已经将它们连接到单个源文件中.
仅当–xcrossfile与–O4或–O5一起使用时,它才是有效的.
跨文件内联会创建一个可能的源文件互相依存(通常不会出现此依存关系).
当一组文件使用–xcrossfile一起进行编译时,如果其中的任一文件被更改,则必须重新编译所有文件才能确保新代码是正确内联的.
请参见3-27页上的"–inline=[%auto][[,][no%]f1,…[no%]fn]".
如果没有在命令行上指定–xcrossfile,则缺省值为-xcrossfile=0,而且不执行跨文件优化.
要启用跨文件优化,请指定–xcrossfile(等效于–xcrossfile=1).
demo%cattc.
fcommon/x/y(1000)do1i=1,10001y(i)=1.
callz(57.
)enddemo%cattz.
fsubroutinez(c)common/x/h(1000)C$PARTASKCOMMONXC$PARDOALLdo1i=1,10001h(i)=c*h(i)returnenddemo%f95-c-O4-parallel-xcommonchktc.
fdemo%f95-c-O4-parallel-xcommonchktz.
fdemo%f95-otc-O4-parallel-xcommonchktc.
otz.
odemo%tcERROR(libmtsk):inconsistentdeclarationofthreadprivate/taskcommonx_:notdeclaredasthreadprivate/taskcommonatline1oftc.
fdemo%第3章Fortran编译器选项3-59–xdepend等效于–depend.
–xexplicitpar等效于–explicitpar.
–xF允许通过性能分析器进行函数级重新排序.
允许使用编译器、性能分析器和链接程序对磁芯映像中的函数(子程序)重新排序.
如果使用-xF选项进行编译,然后运行分析器,则可以生成一个映射文件,该文件根据内存中函数的协同工作方式来优化函数的排序.
通过使用链接程序-Mmapfile选项,可以指示用于生成可执行文件的后续链接使用该映射.
它将可执行文件中的每个函数放置在单独的部分中.
仅当应用程序文本缺页时间占用大部分应用程序时间时,对内存中的子程序重新排序才是有用的.
否则,重新排序可能不会提高应用程序的总体性能.
有关分析器的进一步信息,请参见《程序性能分析工具》手册.
-xhasc[={yes|no}]将实际参数列表中的霍尔瑞斯常数视为字符串.
如果使用-xhasc=yes,则在霍尔瑞斯常数以实际参数的形式出现在子例程或函数调用上时,编译器将它们视为字符串.
这是缺省值,而且符合Fortran标准.
(编译器生成的实际调用列表包含每个字符串的隐藏字符串长度.
)如果使用-xhasc=no,则将子程序调用中的霍尔瑞斯常数视为无类型值,并且仅将它们的地址放在实际参数列表上.
(在传递给子程序的实际调用列表上,不会生成任何字符串长度.
)如果例程使用霍尔瑞斯常数调用子程序,而且被调用的子程序需要将该参数作为INTEGER(或者除CHARACTER之外的任何类型),那么请使用-xhasc=no编译该例程.
3-60《Fortran用户指南》2004年4月示例:通过使用-xhasc=no进行编译,可以正确处理将4habcd传递给z的操作.
提供此标志的目的是辅助移植传统的Fortran77程序.
–xhelp=h显示有关选项的摘要帮助信息或自述文件.
h是readme或flags.
-xhelp=readme显示此发行版本编译器的联机自述文件.
-xhelp=flags显示编译器标志(选项),它与-help等价.
-xia[=v]启用区间运算扩展并设置合适的浮点环境.
v可以是widestneed或strict中的一个.
如果未指定,则缺省值是widestneed.
Fortran95的区间运算扩展在IntervalArithmeticProgrammingReference中进行详细说明.
另请参见3-61页上的"-xinterval[=v]".
-xia标志是一个宏,其扩展如下所示:demo%cathasc.
fcallz(4habcd,'abcdefg')endsubroutinez(i,s)integericharacter*(*)sprint*,"stringlength=",len(s)returnenddemo%f95-ohas0hasc.
fdemo%has0stringlength=4]指定假定的最大内存对齐和未对齐数据访问的行为.
对于在编译时可确定对齐的内存访问,编译器将为该数据对齐生成相应的装入/存储指令序列.
对于在编译时无法确定对齐的内存访问,编译器必须假定一种对齐才能生成所需的装入/存储序列使用-xmemalign标志,用户可以为那些不确定的情况指定编译器假定的最大内存数据对齐.
在确实发生未对齐内存访问时,它还指定运行时的错误行为.
指定的值包括以下两部分:对齐数值和字母行为标志.
对齐值允许是:1假定至多1字节对齐.
2假定至多2字节对齐.
4假定至多4字节对齐.
8假定至多8字节对齐.
16假定至多16字节对齐.
在访问未对齐数据时错误行为的允许值有:i解释访问并继续执行s引发信号SIGBUSf仅对小于或等于4的对齐值引发信号SIGBUS在不指定-xmemalign的情况下,缺省值如下:对于-xarch=generic、v7、v8、v8a、v8plus、v8plusa,为4s对于-xarch=v9,为8s;对于C和C++,为v9a对于-xarch=v9,为8f;对于Fortran,为v9a如果指定不带值的-xmemalign,则对于所有平台其缺省值都是1i.
-dalign选项是一个宏:-dalign是以下选项的宏:-xmemalign=8s-aligncommon=16–xnolib等效于–nolib.
–xnolibmil等效于–nolibmil.
–xnolibmopt不使用快速数学库.
3-68《Fortran用户指南》2004年4月与–fast一起使用可以覆盖链接已优化数学库的操作:f95–fast–xnolibmopt…–xOn等效于–On.
-xopenmp等效于-openmp.
–xpad等效于–pad.
-xpagesize=size为栈和堆设置首选页面大小.
size值必须是下列值之一:8K64K512K4M32M256M2G16G或default例如:-xpagesize=4M并不是所有这些页面大小在所有平台上均受支持,这取决于架构和Solaris环境.
指定的页面大小必须是目标平台上Solaris操作环境的有效页面大小,如getpagesizes(3C)返回的那样.
如果它不是有效页面大小,则在运行时将无提示地忽略请求.
Solaris环境不保证可接受页面大小请求.
您可以使用pmap(1)或meminfo(2)确定您的运行程序是否收到请求的页面大小.
如果指定-xpagesize=default,则忽略该标志;如果指定不带size值的-xpagesize,则它等效于-xpagesize=default.
此选项是以下选项的宏:-xpagesize_heap=size-xpagesize_stack=size这两个选项与-xpagesize接受同样的参数:8K、64K、512K、4M、32M、256M、2G、16G或default.
通过指定-xpagesize=size可以将它们设置为同一个值,或者分别将它们指定为不同的值.
使用此标志进行编译与以下两种方法具有相同的效果:使用等价选项将LD_PRELOAD环境变量设置为mpss.
so.
1;在启动程序之前运行带有等价选项的Solaris9命令ppgsz(1).
有关详细信息,请参见Solaris9手册页.
请注意,此功能在Solaris7和8环境中不可用.
在Solaris7和8环境中,不能链接使用此选项编译的程序.
第3章Fortran编译器选项3-69-xpagesize_heap=size为堆设置首选页面大小.
size值必须是以下值之一:8K64K512K4M32M256M2G16G或default例如:-xpagesize_heap=4M有关详细信息,请参见-xpagesize.
-xpagesize_stack=size为栈设置首选页面大小.
size值必须是以下值之一:8K64K512K4M32M256M2G16G或default例如:-xpagesize_stack=4M有关详细信息,请参见-xpagesize.
–xparallel等效于–parallel.
–xpg等效于–pg.
–xpp={fpp|cpp}选择源文件预处理程序.
缺省值是–xpp=fpp.
编译器使用fpp(1)预处理.
F或.
f95源文件.
此预处理程序适合于Fortran.
以前的版本使用标准C预处理程序cpp.
要选择cpp,请指定–xpp=cpp.
3-70《Fortran用户指南》2004年4月–xprefetch[=a[,a]]在支持预取的那些架构上启用预取指令,此类架构的示例是UltraSPARCII或UltraSPARCIII(-xarch=v8plus、v8plusa、v9plusb、v9、v9a或v9b)有关FortranPREFETCH指令的描述,请参见2-12页上的"PREFETCH指令".
a必须是以下值之一:如果使用-xprefetch、-xprefetch=auto和-xprefetch=yes,则编译器可以自由地将预取指令插入到它生成的代码中.
在支持预取的架构上,这可能会导致性能的改进.
如果正在大型多处理器上运行计算密集型代码,则可能发现使用-xprefetch=latx:factor是有利的.
此选项指示代码发生器按指定的因子调整预取与其关联装入或存储之间的缺省等待时间.
预取等待时间是预取指令的执行和要预取数据在高速缓存中可用的时间之间的硬件延迟.
在确定预取指令与使用预取数据的装入或存储指令的执行时间间隔时,编译器假定一个预取等待时间值.
注意–假定的预取与装入之间的等待时间可能和假定的预取和存储之间的等待时间不同.
编译器调整预取机制,以便在范围很广的计算机和应用程序中获得最佳性能.
此调整不可能始终是最佳的.
对于内存密集型应用程序,尤其是用于在大型多处理器上运行的应用程序,您也许能够通过增加预取等待时间值来获得更佳性能.
要增加值,请使用大于1的因子.
介于.
5和2.
0之间的值最有可能提供最高性能.
对于具有完全驻留在外部高速缓存内的数据集的应用程序,您也许能够通过减小预取等待时间值来获得更佳性能.
要减小值,请使用小于1的因子.
a是含义auto启用预取指令的自动生成no%auto禁止预取指令的自动生成explicit启用显式预取宏no%explicit禁止显式预取宏latx:factor按指定的因子调整编译器假定的预取到装入和预取到存储的等待时间.
因子必须是正的浮点数或整数.
yes-xprefetch=yes与-xprefetch=auto,explicit等价no-xprefetch=no与-xprefetch=no%auto,no%explicit等价第3章Fortran编译器选项3-71要使用-xprefetch=latx:factor选项,请从接近1.
0的因子值开始,并针对应用程序运行性能测试.
然后根据需要增加或减小因子,并再次运行性能测试.
继续调整因子并运行性能测试,直到性能达到最佳.
以小的差值增加或减小因子时,您将看到在进行几次因子增减时没有出现性能差异,然后突然出现性能差异,接下来性能将再次趋于平稳.
缺省值:如果未指定-xprefetch,则假定缺省值是-xprefetch=no%auto,explicit.
如果仅指定-xprefetch,则假定缺省值是-xprefetch=auto,explicit.
除非使用不带任何参数或者带有参数auto或yes的-xprefetch显式覆盖,否则假定缺省值是no%auto.
例如,-xprefetch=explicit与-xprefetch=explicit,no%auto等价.
除非使用参数no%explicit或no显式覆盖,否则假定缺省值是explicit.
例如,-xprefetch=auto与-xprefetch=auto,explicit等价.
如果启用自动预取,如通过使用-xprefetch或-xprefetch=yes,但是未指定等待时间因子,则假定缺省值是-xprefetch=latx:1.
0.
交互作用:如果使用-xprefetch=explicit,则编译器将识别以下指令:$PRAGMASPARC_PREFETCH_READ_ONCE(name)$PRAGMASPARC_PREFETCH_READ_MANY(name)$PRAGMASPARC_PREFETCH_WRITE_ONCE(name)$PRAGMASPARC_PREFETCH_WRITE_MANY(name)-xchip设置影响假定等待时间的确定,因此影响latx:factor设置的结果.
latx:factor子选项仅在启用自动预取时才有效.
也就是说,除非latx:factor与yes或auto一起使用,否则将忽略它.
警告:显式预取应该仅在受度量支持的特殊情况下使用.
由于编译器调整预取机制以便在范围很广的计算机和应用程序中获得最佳性能,因此应该仅在性能测试指示具有明确好处时使用-xprefetch=latx:factor.
假定的预取等待时间可能随发行版本的不同而不同.
因此,强烈建议每当切换到不同的发行版本时都要重新测试等待时间因子对性能的影响.
3-72《Fortran用户指南》2004年4月-xprefetch_level=n控制预取指令的自动生成.
仅当在下列情况下进行编译时,此选项才有效:-xprefetch=auto,使用优化级别3或更高级别,在支持预取的平台(-xarch=v8plus、v8plusa、v8plusb、v9、v9a、v9b、generic64、native64)上.
n可以是1、2或3.
如果不指定-xprefetch_level,则-xprefetch=auto的缺省值是2.
预取级别2生成比级别1更多的预取指令.
预取级别3生成比级别2更多的预取指令.
预取级别2和3仅在UltraSPARCIII平台(v8plusb或v9b)上有效.
–xprofile=p收集或优化运行时文件配置数据,或执行基本块覆盖分析.
p必须是collect[:name]、use[:name]或tcov之一.
通过为编译器提供运行时性能反馈,可以增强使用高优化级别(-xO5)进行的编译.
要产生编译器进行其最佳优化所需的配置文件反馈,您必须首先使用-xprofile=collect进行编译,针对典型数据集运行可执行文件,然后使用-xprofile=use在最高优化级别上重新编译.
collect[:name]收集并保存执行频率数据,以供优化器日后将其与-xprofile=use一起使用.
编译器生成度量语句执行频率的代码.
name是正分析的程序的名称.
此名称是可选的.
如果未指定name,则将a.
out假定为可执行文件的名称.
缺省情况下,使用–xprofile=collect:name编译的程序在运行时将创建子目录name.
profile,以容纳运行时反馈信息.
程序将其运行时配置文件数据写入此子目录中名为feedback的文件.
如果数次运行该程序,则执行频率数据在feedback文件中累积;也就是说,以前运行的输出不会丢失.
您可以设置环境变量SUN_PROFDATA和SUN_PROFDATA_DIR,以控制使用-xprofile=collect编译的程序写入其运行时配置文件数据的文件和目录.
如果设置了这些变量,则使用-xprofile=collect编译的程序将其配置文件数据写入$SUN_PROFDATA_DIR/$SUN_PROFDATA.
这些环境变量同样控制由tcov写入的配置文件数据文件的路径和名称,如tcov(1)手册页中所述.
配置文件的收集是"MT安全的".
也就是说,通过使用-mt进行编译并直接调用多任务库对执行自身多任务的程序进行文件配置,将得到准确的结果.
第3章Fortran编译器选项3-73当在单独步骤中进行编译和链接时,如果-xprofile=collect出现在编译步骤中,也必须在链接步骤中指定它.
use[:nm]使用执行频率数据可以在优化级别-xO5上进行战略性优化.
与collect:nm一样,nm是可选的,并可以用于指定程序的名称.
优化程序的方法是:使用以前生成的执行频率数据,并将其保存在配置文件数据文件中(该文件由使用–xprofile=collect编译的程序的以前执行所写入).
源文件和其它编译器选项必须与用于编译的文件和选项完全相同(此编译创建了生成feedback文件的已编译程序).
如果使用–xprofile=collect:nm进行编译,则同一程序名称nm必须出现在优化编译中:–xprofile=use:nm.
有关加速收集阶段和使用阶段之间的编译的信息,另请参见-xprofile_ircache.
有关控制编译器查找配置文件数据文件的位置的信息,另请参见-xprofile_pathmap.
tcov使用"新"式样tcov的基本块覆盖分析.
优化级别必须是-O2或更高.
代码实现与–a的类似,但是不再为每个源文件生成.
d文件.
而是生成单个文件,其名称基于最终可执行文件的名称.
例如,如果stuff是可执行文件,则stuff.
profile/tcovd是数据文件.
在运行tcov时,您必须将–x选项传递给它,它才能使用数据的新式用法.
如果没有这样做,则缺省情况下tcov将旧的.
d文件(如果有的话)用于数据,并产生非预期的输出.
与–a不同,TCOVDIR环境变量在编译时没有任何影响.
但是,将在程序运行时使用其值以标识创建配置文件子目录的位置.
有关更多详细信息,请参见tcov(1)手册页、《Fortran编程指南》的"性能剖析"一章和《程序性能分析工具》手册.
注意–如果因-O4或-inline而存在子程序的内联,则tcov产生的报告可能是不可靠的.
未记录对已内联例程的调用的覆盖.
-xprofile_ircache[=path]在收集阶段和使用配置文件阶段之间保存并重用编译数据.
与-xprofile=collect|use一起使用,可以通过重用在收集阶段中保存的编译数据,从而在使用阶段中缩短编译时间.
如果指定了path,则它将覆盖保存已高速缓存文件的位置.
缺省情况下,这些文件与目标文件保存在同一目录中.
当收集阶段和使用阶段发生在两个不同的位置时,指定路径是很有用的.
3-74《Fortran用户指南》2004年4月典型的命令序列可能如下所示:对于大型程序,以这种方式保存中间数据可以大大缩短使用阶段的编译时间.
但是,其代价是磁盘空间的占用量显著增加.
-xprofile_pathmap=collect_prefix:use_prefix为配置文件数据文件设置路径映射.
将-xprofile_pathmap选项与-xprofile=use选项一起使用.
编译器无法在使用-xprofile=use编译的目标文件中找到配置文件数据,而且出现以下情况时,请使用-xprofile_pathmap:您正在使用-xprofile=use编译到的目录不是在以前使用-xprofile=collect进行编译时所使用的目录.
您的目标文件共享配置文件中的公共基名,但是通过所在的不同目录来互相区分.

collect-prefix是使用-xprofile=collect编译的目标文件所在目录树的UNIX路径名的前缀.
use-prefix是使用-xprofile=use编译的目标文件所在目录树的UNIX路径名的前缀.
如果指定-xprofile_pathmap的多个示例,则编译器按其出现顺序处理它们.
将-xprofile_pathmap的实例指定的每个use-prefix与目标文件路径名进行比较,直到识别出匹配的use-prefix或者发现最后一个指定的use-prefix与目标文件路径名不匹配.
-xrecursive允许没有RECURSIVE属性的例程以递归方式调用自身.
通常,只有使用RECURSIVE属性定义的子程序才能以递归方式调用自身.
使用-xrecursive进行编译使子程序可以调用自身,即使尚未使用RECURSIVE属性定义它们也可以这样做.
但是,与使用RECURSIVE定义的子例程不同,使用此标志在缺省情况下不会导致在栈上分配局部变量.
为了使局部变量在子程序的每次递归调用中具有单独的值,还要使用-stackvar进行编译以便将局部变量放在栈上.
间接递归(例程A调用例程B,然后例程B又调用例程A)在高于-xO2的优化级别上会产生不一致的结果.
使用-xrecursive标志进行编译可保证间接递归的正确性,甚至在较高的优化级别上也是如此.
使用-xrecursive进行编译会导致性能降低.
demo%f95-xO5-xprofile=collect-xprofile_ircachet1.
ct2.
cdemo%a.
out收集反馈数据demo%f95-xO5-xprofile=use-xprofile_ircachet1.
ct2.
c第3章Fortran编译器选项3-75–xreduction等效于–reduction.
–xregs=r指定寄存器用法.
r是一个逗号分隔列表,它包括以下项中的一个或多个:[no%]appl、[no%]float.
其中,%是一个必要字符.
示例:–xregs=appl,no%floatappl:允许编译器将应用程序寄存器用作临时寄存器.
在SPARC系统上,某些寄存器被描述为应用程序寄存器.
使用这些寄存器可以提高性能,因为所需的装入和存储指令较少.
但是,这样的使用会与用汇编代码编写的某些旧的库程序发生冲突.
应用程序寄存器集取决于SPARC平台:-xarch=v8或v8a—寄存器%g2、%g3和%g4-xarch=v8plus或v8plusa—寄存器%g2、%g3和%g4-xarch=v9或v9a—寄存器%g2和%g3no%appl:不使用appl寄存器.
float:允许编译器将浮点寄存器用作整数值的临时寄存器.
此选项对编译器将浮点寄存器用于浮点值没有影响.
no%float:不使用浮点寄存器.
如果使用此选项,则源程序不能包含任何浮点代码.
编译器缺省值为:–xregs=appl,float.
–xs允许dbx在不使用对象(.
o)文件的情况下进行调试.
如果使用–xs,则将所有调试信息复制到可执行文件中.
如果将可执行文件移动到另一个目录,则可以使用dbx并忽略对象(.
o)文件.
当无法保留.
o文件时,请使用此选项.
编译器将-s传递给汇编程序,然后链接程序将dbx的所有符号表放在可执行文件中.
这一处理符号表的方式是较旧的方式.
此方式有时称为非自动读取.
链接程序的链接速度较慢,而且dbx的初始化速度也较慢.
在不使用–xs的情况下,如果移动可执行文件,则必须同时移动源文件和对象(.
o)文件,或者使用dbxpathmap或use命令设置路径.
3-76《Fortran用户指南》2004年4月这一处理符号表的方式是较新的方式,而且是装入符号表的缺省方式.
此方式有时称为自动读取.
符号表分布在.
o文件中,以便当且仅当需要符号表信息时dbx才装入该信息.
因此,链接程序的链接速度较快,而且dbx的初始化速度较快.
–xsafe=mem允许编译器假定没有发生内存保护违规.
使用此选项,允许编译器假定没有出现基于内存的陷阱.
它授予在SPARCV9平台上使用推测性装入指令的权限.
仅当在下列架构(-xarch)之一上与优化级别-O5一起使用时,此选项才是有效的:v8plus、v8plusa、v8plusb、v9、v9a或v9b警告–因为在出现诸如地址未对齐或段违规之类的故障时非故障装入不会导致陷阱,所以应该将此选项仅用于不可能出现此类故障的程序.
因为导致基于内存的陷阱的程序很少,所以可以安全地将此选项用于大多数程序.
不要将此选项与显式依赖基于内存的陷阱的程序一起使用来处理异常情况.
–xsb等效于–sb.
–xsbfast等效于–sbfast.
–xspace如果优化会增加代码大小,则不要这样做.
示例:如果解开或并行化循环会增加代码大小,则不要这样做.
–xtarget=t为指令集和优化指定目标平台.
t必须是以下项之一:native、native64、generic、generic64、platform–name.
–xtarget选项用于快速而轻松地指定出现在实际平台上的–xarch、-xchip和–xcache的组合.
–xtarget的唯一意义在于它可以扩展.
第3章Fortran编译器选项3-77通过为编译器提供目标计算机硬件的准确描述,可能会提高某些程序的性能.
如果程序性能是至关重要的,则指定正确的目标硬件是非常重要的.
当在较新的SPARC处理器上运行时,这一点尤其正确.
但是,对于大多数程序和较旧的SPARC处理器,对性能的改进很小,而且指定generic就是足够的.
native:为主机平台优化性能.
编译器生成为主机平台优化的代码.
它确定运行编译器的计算机的可用架构、芯片和高速缓存属性.
native64:为本机64位环境进行编译.
在运行编译器的计算机上为64位环境设置架构、芯片和高速缓存属性.
generic:获取普通架构、芯片和高速缓存的最佳性能.
编译器将–xtarget=generic扩展为:–xarch=generic–xchip=generic–xcache=generic这是缺省值.
generic64:为普通64位环境进行编译.
此选项扩展为-xarch=v9-xcache=generic-xchip=genericplatform–name:获取指定平台的最佳性能.
使用fpversion(1)命令可以在运行系统上确定-xtarget=native的扩展.
请注意,当在特定主机平台上进行编译时,该平台的-xtarget可能不扩展为与-xtarget=native相同的-xarch、-xchip或-xcache设置.
下表列出编译器接受的常用系统平台名称.
附录8提供了较旧且较不常用的系统平台名称的列表表3-17常用的-xtarget系统平台的扩展-xtarget=platform-name-xarch-xchip-xcachegenericgenericgenericgenericgeneric64v9genericgenericentr150v8plusaultra16/32/1:512/64/1entr2v8plusaultra16/32/1:512/64/1entr2/1170v8plusaultra16/32/1:512/64/1entr2/1200v8plusaultra16/32/1:512/64/1entr2/2170v8plusaultra16/32/1:512/64/1entr2/2200v8plusaultra16/32/1:512/64/1entr3000v8plusaultra16/32/1:512/64/13-78《Fortran用户指南》2004年4月–xtime等效于–time.
–xtypemap=spec指定缺省的数据映射.
此选项提供了一种为缺省数据类型指定字节大小的灵活方法.
此选项同时适用于缺省大小的变量和常量.
规范字符串spec可能将以下任一项或所有项包含在逗号分隔列表中:real:sizedouble:sizeinteger:size每个平台上的允许组合如下:entr4000v8plusaultra16/32/1:512/64/1entr5000v8plusaultra16/32/1:512/64/1entr6000v8plusaultra16/32/1:512/64/1ultrav8plusaultra16/32/1:512/64/1ultra1/140v8plusaultra16/32/1:512/64/1ultra1/170v8plusaultra16/32/1:512/64/1ultra1/200v8plusaultra16/32/1:512/64/1ultra2v8plusaultra216/32/1:512/64/1ultra2/1170v8plusaultra16/32/1:512/64/1ultra2/1200v8plusaultra16/32/1:1024/64/1ultra2/1300v8plusaultra216/32/1:2048/64/1ultra2/2170v8plusaultra16/32/1:512/64/1ultra2/2200v8plusaultra16/32/1:1024/64/1ultra2/2300v8plusaultra216/32/1:2048/64/1ultra2ev8plusaultra2e16/32/1:256/64/4ultra2iv8plusaultra2i16/32/1:512/64/1ultra3v8plusaultra364/32/4:8192/512/1ultra3cuv8plusaultra3cu64/32/4:8192/512/2表3-17常用的-xtarget系统平台的扩展-xtarget=platform-name-xarch-xchip-xcache第3章Fortran编译器选项3-79real:32real:64double:64double:128integer:32integer:64例如:–xtypemap=real:64,double:64,integer:64将缺省的REAL和DOUBLE都映射为8字节.
此选项适用于使用缺省规范声明的所有变量(无显式字节大小),如REALXYZ(产生64位XYZ).
此外,所有单精度REAL常数都被提升到REAL*8.
请注意,INTEGER和LOGICAL被认为是相同的,而COMPLEX被映射为两个REAL.
此外,DOUBLECOMPLEX将按映射DOUBLE的方式处理.
–xunroll=n等效于–unroll=n.
–xvector[={yes|no}]启用对SPARC向量库函数的自动调用.
如果使用–xvector=yes,则允许编译器尽可能将DO循环内的某些数学库调用变换为对等价的向量化库例程的单个调用.
对于使用大型循环计数的循环,这可以提高性能.
编译器缺省为–xvector=no.
仅指定–xvector缺省为-xvector=yes.
此选项还触发–depend.
(在命令行上–xvector之后加上–nodepend可以取消相关性分析.
)如果出现–xvector,则编译器将自动通知链接程序将libmvec和libc库包括在装入步骤中.
但是,如果在单独步骤中进行编译和链接,则需要在链接步骤中也指定–xvector以便正确地选择这些必需库.
–ztext仅生成无需重定位的纯库.
–ztext一般用于检验生成的库是否为纯文本的;指令都是与位置无关的代码.
因此,它通常与–G和–pic一起使用.
在使用–ztext的情况下,如果ld在text段中找到一个不完整的重定位,则它不生成库.
如果它在data段中找到一个不完整的重定位,则在一般情况下,无论如何它都生成库;data段是可写入的.
3-80《Fortran用户指南》2004年4月如果不使用–ztext,则不管是否重定位ld都生成库.
典型用途是:在您不知道目标文件是否是使用–pic生成的情况下,同时从源文件和目标文件生成库.
示例:同时从源文件和目标文件生成库:另一种用途是询问代码是否已经与位置无关:在不使用–pic的情况下进行编译,但是询问它是否是纯文本的.
示例:询问它是否已经是纯文本的—甚至是在不使用–pic的情况下:如果使用–ztext进行编译且ld不生成库,则可以在不使用–ztext的情况下重新编译,ld将生成库.
未能使用-ztext生成库意味着无法共享库的一个或多个组件;但是,也许可以共享其它组件中的一些组件.
这将引发性能问题,这些问题最好由作为程序员的您来解决.
demo%f95–G–pic–ztext–oMyLib–hMyLiba.
fb.
fx.
oy.
odemo%f95–G–ztext–oMyLib–hMyLiba.
fb.
fx.
oy.
o4-1第章4Fortran95功能和差异本附录介绍了标准Fortran95和Fortran95编译器f95之间的一些主要功能差异.
4.
1源语言功能Fortran95编译器提供Fortran95标准的下列源语言功能和扩展.
4.
1.
1续行限制f95允许99个续行(1个初始行和99个续行).
标准Fortran95在固定格式中允许19个续行;在自由格式中,允许39个续行.
4.
1.
2固定格式源代码行在固定格式源代码中,行的长度可以超过72个字符,但忽略第73列以后的任何内容.
标准Fortran95只允许使用72个字符长的行.
4-2《Fortran用户指南》2004年4月f95中的制表符强制将行的其余部分填充到第72列.
如果制表符出现在延续到下一行的字符串内,这可能会导致出现意外结果:4.
1.
3采用的源代码格式f95采用的源代码格式取决于选项、指令和后缀.
具有.
f或.
F后缀的文件使用固定格式.
具有.
f90、.
f95、.
F90或.
F95后缀的文件使用自由格式.
如果使用-free或-fixed选项,则它覆盖文件名后缀.
如果使用!
DIR$FREE或!
DIR$FIXED指令,则它覆盖选项和文件名后缀.
4.
1.
3.
1混合格式允许混合使用某些源代码格式.
在相同的f95命令中,某些源文件可以是固定格式,而某些源文件可以是自由格式.
在相同的文件中,可通过使用!
DIR$FREE和!
DIR$FIXED指令将自由格式与固定格式混合使用.
源文件:^Iprint*,"Tabonnextline^I1thiscontinuationlinestartswithatab.
"^Iend运行代码:Tabonnextlinethiscontinuationlinestartswithatab.
表4-1F95源代码格式命令行选项选项操作-fixed将所有源文件解释为Fortran固定格式-free将所有源文件解释为Fortran自由格式第4章Fortran95功能和差异4-34.
1.
3.
2大小写在缺省情况下,SunFortran95不区分大小写.
这意味着,变量AbcDeF的处理方式与将其拼写为abcdef时相同.
要让编译器区别处理大写字母和小写字母,请使用-U选项进行编译.
4.
1.
4限制和缺省值单个Fortran95程序单元可定义最多65,535个派生类型以及16,777,215个不重复的常量.
变量和其它对象的名称最多为127个字符长.
标准长度为31个.
4.
2数据类型本节介绍Fortran95数据类型的功能和扩展.
4.
2.
1布尔类型f95支持布尔类型的常量和表达式.
但是没有布尔变量或数组,也没有布尔类型语句.

4.
2.
1.
1控制布尔类型的各种规则屏蔽-具有布尔结果的按位逻辑表达式;它的每个位是对相应操作数位进行一个或多个逻辑运算的结果.
用于二进制算术运算符和关系运算符:如果一个操作数是布尔型,则在执行运算时不进行转换.
如果两个操作数均是布尔型,则在执行运算时就当它们是整数一样.
用户指定的函数均不能生成布尔结果,但某些(非标准的)内部函数可以.
布尔和逻辑类型具有以下差异:变量、数组和函数可以是逻辑类型,但它们不能是布尔类型.
可以使用LOGICAL语句,但不能使用BOOLEAN语句.
逻辑型的变量、常量或表达式仅有两个值:.
TRUE.
或.
FALSE.
.
布尔型的变量、常量或表达式可以表示任意二进制值.
逻辑类型实体在算术表达式、关系表达式或按位逻辑表达式中无效.
布尔型实体在所有3种表达式中都有效.
4-4《Fortran用户指南》2004年4月4.
2.
1.
2布尔常量的替代格式f95允许使用下列替代格式(没有二进制)的布尔常量(八进制、十六进制或霍尔瑞斯).
不能将变量声明为布尔型.
标准Fortran不允许使用这些格式.
八进制ddddddB,其中d是任意八进制数字可以使用字母B或b.
可以是1至11个八进制数字(0至7).
11个八进制数字表示完整的32位字,最左侧的数字可以是0、1、2或3.
每个八进制数字指定3位的值.
最后一个(最右侧的)数字指定最右侧3位(第29、第30和第31位)的内容.
如果位数不足11个,则该值右对齐,即它表示字最右侧的位:位n至31.
其它位均为0.
忽略空格.
在I/O格式规范中,字母B表示二进制数字;而在其它地方则表示八进制数字.
十六进制X'ddd'或X"ddd",其中,d是任意的十六进制数字可以是1至8个十六进制数字(0至9,A-F).
任何字母都可以是大写或小写字母(X、x、A-F、a-f).
数字必须用撇号或引号括起来.
忽略空格.
十六进制数字可以用+或-符号开头.
8个十六进制数字表示一个完整的32位字,等价的二进制数字对应于32位字中每个位的内容.
如果位数不足8个,则该值右对齐,即它表示字最右侧的位:位n至31.
其它位均为0.
第4章Fortran95功能和差异4-5霍尔瑞斯接受的霍尔瑞斯数据格式为:上面的".
.
.
"是一个字符串,而n是字符数.
霍尔瑞斯常量是布尔类型.
如果任何字符常量存在于位逻辑表达式中,则该表达式的计算结果为霍尔瑞斯型.

霍尔瑞斯常量可以包含1至4个字符.
示例:八进制和十六进制常量.
示例:赋值语句中的八进制和十六进制数.
在算术表达式中,使用八进制或十六进制常量可产生未定义的结果,并且不会生成语法错误.
nH.
H".
.
.
"HnL.
L".
.
.
"LnR.
R".
.
.
"R布尔常量32位字的内部八进制数0B0000000000077740B00000077740X"ABE"00000005276X"-340"37777776300X'123'00000000443X'FFFFFFFFFFFFFFFF'37777777777i=1357Bj=X"28FF"k=X'-5A'4-6《Fortran用户指南》2004年4月4.
2.
1.
3布尔常量的替代上下文f95允许在非DATA语句中使用BOZ常量.
如果将它们赋值给实数变量,则不进行类型转换.
标准Fortran只允许在DATA语句中使用它们.
4.
2.
2数值数据类型的缩写大小表示法f95允许在声明语句、函数语句和IMPLICIT语句中使用以下非标准的类型声明格式.
第一列中的格式虽然获得了广泛使用,但它们是非标准的Fortran95格式.
第二列中的种类数字可能会因供应商而发生变化.
B'bbb'O'ooo'Z'zzz'B"bbb"O"ooo"Z"zzz"表4-2数值数据类型的大小表示法非标准声明符简短形式含义INTEGER*1INTEGER(KIND=1)INTEGER(1)有符号的单字节整数INTEGER*2INTEGER(KIND=2)INTEGER(2)有符号的双字节整数INTEGER*4INTEGER(KIND=4)INTEGER(4)有符号的4字节整数LOGICAL*1LOGICAL(KIND=1)LOGICAL(1)单字节逻辑值LOGICAL*2LOGICAL(KIND=2)LOGICAL(2)双字节逻辑值LOGICAL*4LOGICAL(KIND=4)LOGICAL(4)4字节逻辑值REAL*4REAL(KIND=4)REAL(4)IEEE单精度4字节浮点值REAL*8REAL(KIND=8)REAL(8)IEEE双精度8字节浮点值REAL*16REAL(KIND=16)REAL(16)IEEE四倍精度16字节浮点值COMPLEX*8COMPLEX(KIND=4)COMPLEX(4)单精度复数(每个部分4个字节)COMPLEX*16COMPLEX(KIND=8)COMPLEX(8)双精度复数(每个部分8个字节)COMPLEX*32COMPLEX(KIND=16)COMPLEX(16)四倍精度复数(每个部分16个字节)第4章Fortran95功能和差异4-74.
2.
3数据类型的大小和对齐存储和对齐始终以字节为单位.
可以划分为单字节的值按字节对齐.
类型的大小和对齐取决于各种编译器选项和平台以及变量的声明方式.

COMMON块中的缺省最大对齐位置是4字节边界.
可使用特殊选项进行编译以更改缺省的数据对齐和存储分配,如-aligncommon、-f、-dalign、-dbl_align_all、-xmemalign和-xtypemap.
本手册中的缺省描述假定这些选项无效.
下表汇总了缺省的大小和对齐,并忽略类型和选项的其它方面.
请注意以下问题:REAL*16和COMPLEX*32:正如表中的8/16所示,在64位环境(使用-xarch=v9或v9a进行编译)中,缺省对齐位置是16-字节(而非8字节)边界.
表4-3缺省的数据大小和对齐(以字节为单位)Fortran95数据类型大小缺省对齐COMMON中的对齐BYTEXCHARACTERXCHARACTER*nX11n111111COMPLEXXCOMPLEX*8XDOUBLECOMPLEXXCOMPLEX*16XCOMPLEX*32X8816163244888/1644444DOUBLEPRECISIONXREALXREAL*4XREAL*8XREAL*16X84481684488/1644444INTEGERXINTEGER*2XINTEGER*4XINTEGER*8X424842484244LOGICALXLOGICAL*1XLOGICAL*2XLOGICAL*4XLOGICAL*8X4124841248412444-8《Fortran用户指南》2004年4月数组和结构按照其元素或字段对齐.
数组对齐方式与数组元素相同.
结构对齐方式与具有最宽对齐边界的字段相同.
选项-f或-dalign强制在8字节边界上对齐所有8、16或32字节数据.
选项-dbl_align_all导致在8字节边界上对齐所有数据.
依赖于这些选项如何使用的程序可能无法进行移植.
4.
3Cray指针Cray指针是一个变量,其值是另一个实体(称为指针对象)的地址.
f95支持Cray指针;标准Fortran95不支持.
4.
3.
1语法CrayPOINTER语句使用以下格式:其中,关于pointer_name、pointee_name和array_spec的说明如下所示:示例:声明指向两个指针对象的Cray指针.
以上示例声明Cray指针p及其指针对象b、Cray指针q及其指针对象c.
POINTER(pointer_name,pointee_name[array_spec]),…pointer_name指向相应pointee_name的指针.
pointer_name包含pointee_name的地址.
必须是:标量变量名(但不是派生类型)不能是:常量、结构名称、数组或函数pointee_name指向相应pointer_name的指针对象.
必须是:变量名、数组声明符或数组名称array_spec如果包含array_spec,则它必须是显式状态(常量或非常量边界)或假定大小.
POINTER(p,b),(q,c)第4章Fortran95功能和差异4-9示例:声明指向数组的Cray指针.
以上示例声明Cray指针ix及其指针对象x;并将x声明为n*m+1维数组.
4.
3.
2Cray指针的用途将变量与存储块中的特定位置动态关联起来后,可以使用指针访问用户管理的存储.

Cray指针允许访问绝对内存地址.
4.
3.
3声明Cray指针和Fortran95指针Cray指针声明如下:POINTER(pointer_name,pointee_name[array_spec])Fortran95指针声明如下:POINTERobject_name不能混用这两种类型的指针.
4.
3.
4Cray指针的功能无论何时引用指针对象,f95均使用当前的指针值作为指针对象的地址.
Cray指针类型语句声明指针和指针对象.
Cray指针为Cray指针类型.
在32位处理器中,Cray指针的值占用一个存储单元;在64位SPARCV9处理器中,Cray指针的值占用两个存储单元.
Cray指针可以出现在COMMON列表中,或者作为伪参数出现.
在定义Cray指针的值之前,Cray指针对象没有地址.
如果将数组命名为指针对象,则该数组称为指针对象数组.
其数组声明符可以出现在:单独的类型语句单独的DIMENSION语句指针语句本身POINTER(ix,x(n,0:m))4-10《Fortran用户指南》2004年4月如果数组声明符出现在子程序中,则维数的大小可以引用:COMMON块中的变量,或作为伪参数的变量每个维数的大小是在子程序的入口处计算的,而不是在引用指针对象时计算的.

4.
3.
5Cray指针的限制pointee_name不能是类型为CHARACTER*(*)的变量.
如果pointee_name是数组声明符,则它必须是显式状态(常量或非常量边界)或假定大小.
不允许使用Cray指针数组.
Cray指针不能:是另一个Cray指针或Fortran指针指向的指针.
是结构的组件.
声明为任何其它数据类型.
Cray指针不能出现在:PARAMETER语句或包含PARAMETER属性的类型声明语句中.
DATA语句.
4.
3.
6Cray指针对象的限制Cray指针对象不能出现在SAVE、DATA、EQUIVALENCE、COMMON或PARAMETER语句中.
Cray指针对象不能是伪参数.
Cray指针对象不能是函数值.
Cray指针对象不能是结构或结构组件.
Cray指针对象不能是派生类型.
4.
3.
7Cray指针的用法可以将Cray指针赋值如下:设置为绝对地址示例:q=0赋值给整数变量、加或减表达式或从整数变量、加或减表达式中赋值示例:p=q+100第4章Fortran95功能和差异4-11Cray指针不是整数.
不能将它们赋值给实数变量.
LOC函数(非标准)可用于定义Cray指针.
示例:p=LOC(x)示例:按上述方式使用Cray指针.
有关以上示例的说明:word64引用绝对地址64的内容blk是占用内存前128个字的数组a是空白公共区中长度为1000的数组b在a的后面,其长度为nc在b的后面a、b和c与pool相关联word64与blk(17)相同,因为Cray指针是字节地址,并且blk的每个整数元素为4字节长4.
4STRUCTURE和UNION(VAXFortran)为了有助于从f77迁移程序,f95接受VAXFortranSTRUCTURE和UNION语句,它们是Fortran95中"派生类型"的前身.
有关语法的详细信息,请参见FORTRAN77LanguageReference手册.
STRUCTURE中的字段声明可以是以下内容之一:子结构-另一个STRUCTURE声明或一个先前定义的记录.
UNION声明.
TYPE声明,它可以包含初始值.
SUBROUTINEsub(n)COMMONpool(100000)INTEGERblk(128),word64REALa(1000),b(n),c(100000-n-1000)POINTER(pblk,blk),(ia,a),(ib,b),&(ic,c),(address,word64)DATAaddress/64/pblk=0ia=LOC(pool)ib=ia+4000ic=ib+n.
.
.
4-12《Fortran用户指南》2004年4月具有SEQUENCE属性的派生类型.
(这是f95所特有的.
)与f77相同,不能将POINTER语句用作字段声明.
f95还允许:'.
'或'%'可用作结构字段非关联化符号:struct.
field或struct%field.
结构可以出现在格式化I/O语句中.
可以在PARAMETER语句中初始化结构;格式与派生类型初始化相同.
结构可以作为组件出现在派生类型中,但必须使用SEQUENCE属性声明派生类型.
4.
5无符号整数Fortran95编译器接受新的数据类型UNSIGNED作为该语言的扩展.
UNSIGNED接受4个KIND参数值:1、2、4和8,分别对应于1、2、4和8字节无符号整数.
无符号整数常量的形式是以大写或小写字母U结尾的数字串,后面可以跟一个下划线和种类参数.
下面的例子显示无符号整数常量的最大值:如果没有使用种类参数表达(12345U),则缺省值与缺省整数相同.
缺省值为U_4,但可以使用-xtypemap选项更改它,这将更改缺省无符号整数的种类类型.
可使用UNSIGNED类型说明符声明无符号整数变量或数组:4.
5.
1算术表达式二进制运算(如+-*/)不能混合使用有符号操作数和无符号操作数.
即,如果将U声明为UNSIGNED并且N是有符号的INTEGER,则U*N是非法的.
可使用UNSIGNED内部函数将二进制运算中的混合操作数组合起来,例如U*UNSIGNED(N).
255u_165535u_24294967295U_418446744073709551615U_8UNSIGNEDUUNSIGNED(KIND=2)::AUNSIGNED*8::B第4章Fortran95功能和差异4-13例外情况是:一个操作数是无符号整数,而另一个操作数是具有正数或零值的有符号整数常量表达式,则该结果是无符号整数.
此类混合表达式的结果种类是操作数的最大种类.
有符号值的幂指数是有符号的值;而无符号值的幂指数是无符号的值.
无符号值的一元减法是无符号的值.
无符号操作数可以与实数、复数操作数任意混合使用.
(无符号操作数不能与区间操作数混合使用.
)4.
5.
2关系表达式可以使用内在关系运算来比较有符号和无符号整数操作数.
结果取决于未修改的操作数值.
4.
5.
3控制构造CASE构造接受无符号整数作为条件表达式.
不允许将无符号整数作为DO循环控制变量,也不允许在算术IF控制表达式中使用它.
4.
5.
4输入/输出构造可以使用I、B、O和Z编辑描述符来读取和写入无符号整数.
还可以使用列表控制和名称列表I/O读取和写入它们.
使用列表控制或名称列表I/O的无符号整数的写入格式与用于有符号正整数的格式相同.
还可以使用未格式化I/O读取或写入无符号整数.
4.
5.
5内部函数允许在内部函数中使用无符号整数,但SIGN和ABS除外.
新的内部函数UNSIGNED与INT类似,但生成无符号类型的结果.
格式为UNSIGNED(v[,kind])另一个新的内部函数SELECTED_UNSIGNED_KIND(var)返回var的种类参数.
MIN和MAX函数不允许同时使用有符号整数和无符号整数操作数,除非至少有一个REAL类型的操作数.
无符号数组不能作为数组内部函数的参数出现.
4-14《Fortran用户指南》2004年4月4.
6Fortran2000功能在本版本的f95编译器中,引入了Fortran2000草案标准中提出的一些功能.
4.
6.
1与C函数之间的互操作性新的Fortran草案标准提供:一种引用C语言过程的方法(反过来说,一种指定可从C函数中引用Fortran子程序的方法),以及一种声明与外部C变量相链接的全局变量的方法ISO_C_BINDING模块提供了对命名常量的访问,这些命名常量是种类类型参数,它们代表了与C类型兼容的数据.
草案标准还引入了BIND(C)属性.
如果Fortran派生类型具有BIND属性,则它可以与C之间进行互操作.
此Fortran95编译器版本实现了草案标准第15章中描述的那些功能.
正如草案标准第4章中所述,Fortran还提供了用于定义与C类型对应的派生类型、枚举和类型别名的工具.
4.
6.
2IEEE浮点异常处理在Fortran语言中,新的内部模块IEEE_ARITHMETIC和IEEE_FEATURES提供了对异常和IEEE算法的支持.
对这些功能提供完整支持的是:USE,INTRINSIC::IEEE_ARITHMETICUSE,INTRINSIC::IEEE_FEATURES这些模块定义了一组派生类型、常量、舍入模式、查询函数、基本函数、种类函数、基本和非基本子例程.
有关详细信息,请参见Fortran2000草案标准的第14章.
4.
6.
3PROTECTED属性现在,Fortran95编译器接受Fortran2000的PROTECTED属性.
PROTECTED对模块实体的使用进行了限制.
具有PROTECTED属性的对象只能在声明这些对象的模块中定义.
第4章Fortran95功能和差异4-154.
6.
4Fortran2000异步I/O编译器可识别I/O语句中的ASYNCHRONOUS说明符:ASYNCHRONOUS=['YES'|'NO']此语法是在Fortran2000草案标准第9章中提出的.
在与WAIT语句结合使用时,它允许程序员指定可能与计算重叠的I/O进程.
虽然编译器可以识别ASYNCHRONOUS='YES',但草案标准并不要求实际使用异步I/O.
在此版本的编译器中,I/O总是同步的.
4.
6.
5扩展的ALLOCATABLE属性Fortran95标准组织最近做出的决定扩展了允许使用ALLOCATABLE属性的数据实体.
以前,仅限本地存储的数组变量使用该属性.
现在,允许将它用于:结构的数组组件伪数组数组函数结果在可分配实体可能与存储关联的所有地方,仍然禁止使用可分配实体:COMMON块和EQUIVALENCE语句.
可分配数组组件可以出现在SEQUENCE类型中,但随后在COMMON和EQUIVALENCE中禁止此类型的对象.
4.
6.
6VALUE属性f95编译器可识别VALUE类型声明属性.
已提议将该属性写入Fortran2000标准.
如果使用此属性指定子程序伪输入参数,则表明"按值"传递实际参数.
以下示例说明将VALUE属性用于一个C主程序,该主程序将文字值作为参数来调用Fortran95子程序:C代码:#includeintmain(intac,char*av[]){to_fortran(2);}Fortran代码:subroutineto_fortran(i)integer,value::iprint*,iend4-16《Fortran用户指南》2004年4月4.
6.
7Fortran2000流I/O已提议将新的"流"I/O方案写入到Fortran2000草案标准中.
流I/O访问将数据文件作为连续的字节序列来处理,可由从1开始的正整数进行寻址.
可使用OPEN语句中的ACCESS='STREAM'说明符来声明流I/O文件.
要将文件定位在字节地址中,需要在READ或WRITE语句中使用POS=scalar_integer_expression说明符.
INQUIRE语句接受ACCESS='STREAM'、说明符STREAM=scalar_character_variable和POS=scalar_integer_variable.
4.
6.
8Fortran2000格式化I/O功能在f95中,已实现了3个新的Fortran2000格式化I/O说明符.
它们可能出现在OPEN、READ、WRITE、PRINT和INQUIRE语句中:DECIMAL=['POINT'|'COMMA']更改缺省的十进制编辑模式.
对于使用D、E、EN、ES、F和G编辑格式的浮点数,缺省使用句点来分隔整数和小数部分.
'COMMA'更改缺省设置以使用逗号而不是句点来打印,例如,123,456.
缺省设置为'POINT',它使用句点来打印,例如,123.
456.
ROUND=['PROCESSOR_DEFINED'|'COMPATIBLE']为格式化的I/OD、E、EN、ES、F和G编辑设置缺省舍入模式.
在使用'COMPATIBLE'时,数据转换后的数值结果是两个最相近的表示中更接近的一个,如果值正好在两者中间,则选择离0远的值.
在使用'PROCESSOR_DEFINED'时,舍入模式取决于处理器的缺省模式,如果未指定ROUND,则为编译器缺省设置.
例如,WRITE(*,'(f11.
4)')0.
11115在缺省模式下打印0.
1111,而在'COMPATIBLE'模式下打印0.
1112.
IOMSG=character-variable将错误消息作为字符串在指定字符变量中返回.
这与标准输出中显示的错误消息相同.
用户应该分配足够大的字符缓冲区以保存最长的消息.
(CHARACTER*256应该足够了.
)在INQUIRE语句中使用时,这些说明符声明一个字符变量以返回当前值.
新的编辑描述符DP、DC、RP和RC将单个FORMAT语句中的缺省设置分别更改为小数点、小数逗号、处理器定义的舍入以及兼容的舍入.
例如:WRITE(*,'(I5,DC,F10.
3)')N,W在F10.
3输出项目中打印逗号而不是句点.
要了解如何在格式化I/O中更改浮点舍入模式,另请参见-iorounding编译器命令行选项.
(第3-28页上的"-iorounding=mode".
)第4章Fortran95功能和差异4-174.
7其它的I/O扩展本节介绍一些Fortran95输入/输出处理扩展,f95编译器接受这些扩展,但它们不是Fortran2000草案标准的一部分.
某些扩展是在Fortran77编译器f77中出现的I/O扩展,现在这些扩展已成为Fortran95编译器的一部分.
4.
7.
1I/O错误处理例程两个新函数允许用户为逻辑单元上的格式化输入指定其自己的错误处理例程.
当检测到格式错误时,运行时I/O库调用指定用户提供的处理例程,并将数据指向输入行中导致该错误的字符.
处理例程可以提供一个新字符,并允许在检测到错误的位置使用新字符继续执行I/O操作;或者执行缺省的Fortran错误处理操作.
新例程SET_IO_ERR_HANDLER(3f)和GET_IO_ERR_HANDLER(3f)是模块子例程,并要求在调用它们的例程中使用USESUN_IO_HANDLERS.
有关详细信息,请参见这些例程的手册页.
4.
7.
2变量格式表达式Fortran77允许使用尖括号包含的任意表达式来代替具有某种格式的任何整数常量:1FORMAT(.
.
.
.
.
.
)变量格式表达式不能作为nH.
.
.
编辑描述符中的n出现在ASSIGN语句引用的FORMAT语句中,或者出现在并行区域内的FORMAT语句中.
这种功能是在f95中自动启用的,并且不要求使用-f77兼容性选项标记.
4.
7.
3NAMELIST输入格式输入中的组名称前面可以是$或&.
&是Fortran95标准接受的唯一格式,并且是NAMELIST输出所写入的内容.
接受$作为终止输入的符号,但以下情况除外:组中最后一个数据项是CHARACTER数据,此时将$作为输入数据处理.
允许NAMELIST输入从记录的第一列开始.
4-18《Fortran用户指南》2004年4月4.
7.
4二进制未格式化I/O使用FORM='BINARY'打开文件与使用FORM='UNFORMATTED'具有大致相同的效果,所不同的是文件中没有嵌入记录长度.
如果没有此数据,则无法知道一条记录的开始或结束位置.
因此,无法BACKSPACEFORM='BINARY'文件,这是因为不知道要退格到什么位置.
在对'BINARY'文件执行READ操作时,将根据需要读取数据来填充输入列表中的变量.
WRITE语句:以二进制的形式将数据写入到文件中,并按照输出列表中指定的数量传输字节.
READ语句:将数据读取到输入列表中的变量,并传输该列表所要求数量的字节.
因为文件中没有记录标记,所以不进行"记录结束"错误检测.
检测到的错误只能是"文件结束"或异常系统错误.
INQUIRE语句:在使用FORM="BINARY"打开的文件中,INQUIRE返回:FORM="BINARY"ACCESS="SEQUENTIAL"DIRECT="NO"FORMATTED="NO"UNFORMATTED="YES"RECL=ANDNEXTREC=未定义BACKSPACE语句:不允许使用-返回一个错误.
ENDFILE语句:在当前位置照常截断文件.
REWIND语句:将文件照常重新定位到数据的开头.
4.
7.
5各种I/O扩展在不同单元上可能出现递归的I/O(这是因为f95I/O库为"MT-Warm").
RECL=2147483646(231-2)是顺序格式化、列表控制和名称列表输出中的缺省记录长度.
可以识别和实现ENCODE和DECODE,有关详细信息,请参见FORTRAN77LanguageReferenceManual.
非前进式I/O是使用ADVANCE='NO'启用的(如下所示):write(*,'(a)',ADVANCE='NO')'n='read(*,*)n第4章Fortran95功能和差异4-194.
8指令编译器指令指示编译器执行某些特殊的操作.
指令也称为pragma.
可以将编译器指令作为一个或多个文本行插入到源程序中.
每一行看起来就像注释一样,但有一些其它字符,可将指令识别为不仅仅是此编译器的注释.
对于大多数其它编译器,会将该指令处理为注释,因此具有一定的代码移植性.
Sun风格的并行化指令是f95-explicitpar的缺省设置.
要切换到Cray风格的指令,请使用-mp=cray编译器命令行标记.
OpenMP指令的显式并行化要求使用-openmp进行编译.
附录9提供了Fortran指令的完整摘要.
4.
8.
1特殊f95指令行的格式除了第2章中介绍的指令外,f95还可识别其自己的特殊指令.
这些指令使用以下语法:4.
8.
1.
1固定格式源代码将CDIR$或!
DIR$放在第1至第5列中.
指令在第7列及后面的列中列出.
忽略第72列后面的列.
初始指令行的第6列为空.
连续指令行的第6列非空.
4.
8.
1.
2自由格式源代码将后跟空格的!
DIR$放在行中的任意位置.
!
DIR$字符是行中的第一个非空字符(实际上是非-空白).
指令在空格后面列出.
在初始指令行中,紧靠!
DIR$后面的位置中为空格、制表符或换行符.
在连续指令行中,紧靠!
DIR$后面的位置中为空格、制表符或换行符以外的字符.
因此,第1至第5列中的!
DIR$既用于自由格式源代码又用于固定格式源代码.
!
DIR$d1,d2,…4-20《Fortran用户指南》2004年4月4.
8.
2FIXED和FREE指令这些指令指定指令行后面行的源代码格式.
4.
8.
2.
1范围它们适用于所在文件的其余部分,或者在遇到下一个FREE或FIXED指令之前的部分.
4.
8.
2.
2用法它们用于切换源文件中的源代码格式.
它们用于切换INCLUDE文件的源代码格式.
可将指令插入在INCLUDE文件的开头.
在处理INCLUDE文件后,源代码格式恢复为处理INCLUDE文件之前使用的格式.
4.
8.
2.
3限制FREE/FIXED指令:每个指令必须单独出现在编译器指令行中(没有续行).
每个指令可以出现在源代码中的任意位置.
其它指令必须出现在它们所影响的程序单元中.
示例:FREE指令.
4.
8.
3并行化指令并行化指令是一种特殊的注释,它指示编译器尝试并行处理下一个DO循环.
附录D和《Fortran编程指南》中有关并行化的章节中介绍了这些指令.
f95可识别Sun和Cray风格的并行化指令以及OpenMPFortranAPI指令.
《OpenMPAPI用户指南》中介绍了OpenMP并行化.
!
DIR$FREEDOi=1,na(i)=b(i)*c(i)ENDDO第4章Fortran95功能和差异4-214.
9模块文件在编译包含Fortran95MODULE的文件时,就会为在源代码中遇到的每个MODULE生成模块接口文件(.
mod文件).
文件名是从MODULE的名称中派生的;将为MODULExyz创建文件xyz.
mod(全部小写).
编译还会为包含MODULE语句的源文件生成.
o模块实现目标文件.
可与模块实现目标文件以及所有其它目标文件链接在一起以创建可执行文件.
编译器在-moddir=dir标记或MODDIR环境变量指定的目录中创建模块接口文件和实现目标文件.
如果没有指定,则编译器在当前的工作目录中写入.
mod文件.
在编译USEmodulename语句时,编译器在当前工作目录中查找接口文件.
-Mpath选项用于为编译器指定其它的搜索路径.
必须在链接步骤的命令行中显式地列出模块实现目标文件.
通常,程序员为每个文件定义一个MODULE,并给MODULE和包含它的源文件指定相同的名称.
但是,这并不是必需的.
在本示例中,同时编译所有的文件.
模块源文件在主程序中使用它们之前就已出现.

编译创建以下文件:mainmain.
oone.
modmod_one.
otwo.
modmod_two.
odemo%catmod_one.
f90MODULEone.
.
.
ENDMODULEdemo%catmod_two.
f90MODULEtwo.
.
.
ENDMODULEdemo%catmain.
f90USEoneUSEtwo.
.
.
ENDdemo%f95-omainmod_one.
f90mod_two.
f90main.
f904-22《Fortran用户指南》2004年4月下一个示例单独编译每个单元,并将它们链接在一起.
在编译main.
f90时,编译器在当前的目录中搜索one.
mod和two.
mod.
编译在USE语句中引用这些模块的任何文件之前,必须先编译这些模块.
链接步骤要求模块实现目标文件mod_one.
o和mod_two.
o与所有其它目标文件一起出现以创建可执行文件.
4.
9.
1搜索模块使用本版本的SunONEStudio7Fortran95编译器时,可以将.
mod文件存储在归档(.
a)文件中.
要在归档中搜索模块,必须在命令行的-Mpath标记中显式地指定它.
在缺省情况下,编译器并不搜索归档文件.
而只有与USE语句中出现的名称相同的.
mod文件才被搜索.
例如,Fortran95语句USEmymod导致编译器缺省搜索模块文件mymod.
mod.
在搜索过程中,编译器为在其中写入模块文件的目录指定更高的优先级.
可以使用-moddir=dir选项标记和MODDIR环境变量对它进行控制.
这意味着,如果仅指定了-Mpath选项,则先搜索当前目录,然后再搜索-M标记上列出的目录和文件.
4.
9.
2-use=list选项标记-use=list标记强制将一个或多个隐式的USE语句加入到每个使用该标记编译的子程序或模块子程序中.
通过使用该标记,在库或应用程序的某个功能要求使用某个模块或模块文件时,不必修改源程序.
使用-use=module_name进行编译与将USEmodule_name增加到编译的每个子程序或模块中具有相同的效果.
使用-use=module_file_name进行编译与为module_file_name文件中包含的每个模块增加USEmodule_name具有相同的效果.
demo%f95-cmod_one.
f90mod_two.
f90demo%f95-cmain.
f90demo%f95-omainmain.
omod_one.
omod_two.
o第4章Fortran95功能和差异4-234.
9.
3fdumpmod命令可使用fdumpmod(1)命令显示有关已编译模块信息文件的内容的信息.
fdumpmod命令将显示有关单个.
mod文件、拼接.
mod文件形成的文件以及.
mod文件的.
a归档中的模块信息.
显示包含模块名称、版本号、目标体系结构以及指示模块兼容的编译选项的标记.
有关详细信息,请参见fdumpmod(1)手册页.
4.
10内部函数f95支持某些特定的内在过程,它们是超出标准的扩展.
有关内部函数(包括Fortran95编译器可识别的Fortran77内部函数)更完整的讨论,请参见《Fortran库参考》.
demo%fdumpmodmods.
modGROUP1.
0v8,i4,r4,d8,n16,a4mods.
modX1.
0v8,i4,r4,d8,n16,a4mods.
mod表4-4非标准的内部函数名称定义函数类型参数类型参数说明COT余切实型实型([X=]x)P,EDDIM正偏差双精度双精度([X=]x,[Y=]y)P,ELEADZ获取前导0的位数整型布尔、整型、实型或指针([I=]i)NP,IPOPCNT获取设置位的数量整型布尔、整型、实型或指针([I=]i)NP,IPOPPAR计算位总体奇偶性整型布尔、整型、实型或指针([X=]x)NP,I有关上表的说明:P名称可以作为参数传递.
NP名称不能作为参数传递.
E在运行时调用内部函数的外部代码.
If95为内在过程生成内联代码.
4-24《Fortran用户指南》2004年4月4.
11向前兼容性将来的f95版本在源代码上将与该版本兼容.
不能保证此f95版本生成的模块信息文件与未来的版本兼容.
4.
12混合语言在Solaris系统上,可以将使用C编写的例程与Fortran程序结合起来,因为这些语言具有相同的调用惯例.
有关C和Fortran例程如何进行交互操作的详细信息,请参见《Fortran编程指南》中的"C-Fortran接口"一章.
5-1第章5FORTRAN77兼容性:迁移到Fortran95Fortran95编译器f95可编译大多数传统的FORTRAN77程序,其中包括利用f77编译器以前编译的非标准扩展的程序.
f95可直接接受很多的FORTRAN77功能.
其它功能要求在FORTRAN77兼容性模式(f95-f77)下进行编译.
本章介绍f95接受的FORTRAN77功能,并列出与f95不兼容的那些f77功能.
有关f77编译器接受的任何非标准FORTRAN77扩展的详细信息,请参见位于以下网址的FORTRAN77LanguageReference手册:http://docs.
sun.
com/source/806-3594/index.
html.
有关f95编译器接受的其它Fortran95语言扩展的信息,请参见第4章.
f95可编译符合标准的FORTRAN77程序.
为确保连续可移植性,利用非标准FORTRAN77功能的程序应该迁移到符合标准的Fortran95中.
在使用-ansi选项进行编译时,程序中所有非标准的用法都将被标记出来.
5.
1兼容的f77功能f95直接接受或在-f77兼容性模式下编译时接受FORTRAN77编译器f77的以下非标准功能:源代码格式续行可以在第一列中以'&'开头.
[-f77=misc]INCLUDE文件中的第一行可以是续行.
[-f77=misc]请使用f77制表符格式.
[-f77=tab]制表符格式可以将源代码行扩展到第72列以后.
[-f77=tab]如果字符串扩展到续行上,则f95制表符格式不会对这些字符串进行填充直至第72列.
[-f77]5-2《Fortran用户指南》2004年4月I/O:在Fortran95中,可以使用ACCESS='APPEND'打开文件.
列表控制的输出使用与f77编译器类似的格式.
[-f77=output]f95允许在直接存取文件中使用BACKSPACE,但不允许使用ENDFILE.
f95允许在格式编辑描述符中隐式地指定字段宽度.
例如,允许使用FORMAT(I).
f95可识别输出格式中的f77换码序列(例如,\n\t\').
[-f77=backslash]f95可识别OPEN语句中的FILEOPT=.
f95允许使用STATUS='KEEP'来关闭SCRATCH(临时)文件[-f77].
在程序退出时,不会删除临时文件.
在使用-f77进行编译时,也可以使用FILE=name来打开SCRATCH(临时)文件.
允许对内部文件使用直接I/O.
[-f77]f95可识别FORTRAN77格式编辑描述符A、$和SU.
[-f77]FORM='PRINT'可以出现在OPEN语句中.
[-f77]f95可识别传统的FORTRAN输入/输出语句ACCEPT和TYPE.
可使用-f77=output进行编译以写出FORTRAN77风格的NAMELIST输出.
在仅指定ERR=(没有IOSTAT=或END=分支)的情况下,当检测到EOF时,READ将ERR=分支作为END=处理.
[-f77]在OPEN语句中,接受VMSFortranNAME='filename'.
[-f77]f95接受READ()或WRITE()后面的一个额外逗号.
[-f77]END=分支可以出现在具有REC=的直接存取READ中.
[-f77=input]允许使用格式编辑描述符Ew.
d.
e,并将其作为Ew.
d.
Ee处理.
[-f77]可以在输入语句的FORMAT中使用字符串.
[-f77=input]IOSTAT=说明符可以出现在ENCODE/DECODE语句中.
在ENCODE/DECODE语句中允许使用列表控制的I/O.
在I/O语句中用作逻辑单元时,星号(*)可用于表示STDIN和STDOUT.
数组可以出现在FMT=说明符中.
[-f77=misc]PRINT语句接受名称列表组名称.
[-f77=output]编译器接受FORMAT语句中多余的逗号.
在执行NAMELIST输入时,如果输入问号(),就会响应正在读取的名称列表组的名称.
[-f77=input]数据类型、声明和用法:在程序单元中,IMPLICIT语句可以放在单元中任何其它声明语句的后面.
f95接受IMPLICITUNDEFINED语句.
f95接受AUTOMATIC语句(FORTRAN77扩展).
第5章FORTRAN77兼容性:迁移到Fortran955-3f95接受STATIC语句,并且对其做与SAVE语句类似的处理.
f95接受VAXSTRUCTURE、UNION和MAP语句.
(请参见第4-11页上的"STRUCTURE和UNION(VAXFortran)")LOGICAL和INTEGER变量可以互换使用.
[-f77=logical]INTEGER变量可以出现在条件表达式中,如DOWHILE.
[-f77=logical]Cray指针可以出现在内部函数内部函数调用中.
f95可接受类型声明中使用斜杠的数据初始化.
例如:REALMHW/100.
101/,ICOMX/32.
223/f95允许将Cray字符指针赋值给非指针变量以及其它非字符的Cray指针.
f95允许相同的Cray指针指向不同类型大小的项目(例如,REAL*8和INTEGER*4).
在将Cray指针声明为POINTER的程序单元中,可以将其声明为INTEGER.
INTEGER声明将被忽略.
[-f77=misc]Cray指针可以用于除法和乘法运算.
[-f77=misc]ASSIGN语句中的变量可以是INTEGER*2类型.
[-f77=misc]交替RETURN语句中的表达式可以是非整数类型.
[-f77=misc]具有SAVE属性的变量可以等效于COMMON块的元素.
相同数组的初始化函数可以是不同的类型.
示例:REAL*8ARR(5)/12.
31,3,5.
D0,9/名称列表项目的类型声明可以放在NAMELIST语句后面.
f95接受BYTE数据类型.
f95允许将非整数用作数组下标.
[-f77=subscript]f95允许将关系运算符.
EQ.
和.
NE.
用于逻辑操作数.
[-f77=logical]f95可接受传统的f77VIRTUAL语句,并将它作为DIMENSION语句处理.
可以使用与f77编译器兼容的方式等价处理不同的数据结构.
[-f77=misc]与f77编译器类似,f95允许很多内部函数出现在PARAMETER语句的初始化表达式中.
f95允许将整数值赋值给CHARACTER*1变量.
[-f77=misc]BOZ常量可用作指数.
[-f77=misc]可以将BOZ常量赋值给字符变量.
例如:character*8chch="12345678"XBOZ常量可以用作内部函数调用的参数.
[-f77=misc]可以使用DATA语句中的整数值来初始化字符变量.
变量中的第一个字符将被设置为该整数值,而字符串的其余部分将填充空白(如果字符串多于一个字符的话).
可以将一个霍尔瑞斯字符的整数数组用作格式描述符.
[-f77]5-4《Fortran用户指南》2004年4月如果常量折叠产生浮点异常,则在编译时不进行常量折叠.
[-f77=misc]在使用-f77=misc进行编译时,f95自动以f77编译器的方式,将赋值、数据和参数语句中的REAL常量提升为适当的种类(REAL*8或REAL*16).
[-f77=misc]在赋值GOTO中允许使用等价变量.
[-f77]可以将非常量字符表达式赋值给数值变量.
在使用-f77=misc进行编译时,允许在类型声明中将*kind放在变量名称后面.
[-f77=misc].
例如:REALY*4,X*8(21))INTEGERFUNCTIONFOO*8(J)字符子串可以作为隐含DO目标出现在DATA语句中.
[-f77=misc}例如:DATA(a(i:i),i=1,n)/n*'+'/括号内的整数表达式可以作为类型大小出现.
例如:PARAMETER(N=2)INTEGER*(N+2)K程序、子例程、函数和可执行语句:f95不要求PROGRAM语句具备name.
CALL语句可以将函数当作子例程进行调用.
[-f77]对函数不一定要定义其返回值.
[-f77]交替返回说明符(*label或&label)可以出现在实际参数列表中,也可以出现在不同位置上.
[-f77=misc]%VAL可以用于类型为COMPLEX的参数.
[-f77=misc]可以使用%REF和%LOC.
[-f77=misc]子例程可以递归调用其自身,而无需使用RECURSIVE关键字对自身进行声明.
[-f77=misc]但是,还应该使用-xrecursive标记对执行间接递归(例程A调用例程B,而例程B又调用例程A)的程序进行编译以使其正确工作.
即使当伪参数列表中没有交替返回列表时,也可以调用具有交替返回的子例程.

在使用-f77=misc进行编译时,可以使用类型不是INTEGER或REAL的参数来定义statement函数;实际参数将被转换为statement函数所定义的类型.
[-f77=misc]允许使用空实际参数.
例如:CALLFOO(I,,,J)在第一个I和最后一个J参数之间使用了两个空的参数.
f95将函数%LOC()调用作为LOC()调用处理.
[-f77=misc]允许在另一个运算符(如**或*)后面使用一元加法和一元减法.
即使当第一个参数为COMPLEX类型时,也允许CMPLX()内部函数使用第二个参数.
在这种情况下,使用第一个参数的实部.
[-f77=misc]允许CHAR()内部函数的参数超过255,并且只生成警告而不生成错误.
[-f77=misc]允许移位计数为负,并且只生成警告而不生成错误.
第5章FORTRAN77兼容性:迁移到Fortran955-5在当前目录以及-I选项中指定的目录中搜索INCLUDE文件.
[-f77=misc]允许进行连续的.
NOT.
运算,如.
NOT.
.
NOT.
.
NOT.
(I.
EQ.
J).
[-f77=misc]杂项f95通常不会将进度消息发送到标准输出.
而f77编译器则发送进度消息,并显示它所编译的例程的名称.
在使用-f77兼容性标记进行编译时,保留了这一惯例.
f77编译器编译的程序并不捕获算术异常,而是在退出时自动调用ieee_retrospective来报告在执行过程中可能发生的任何异常.
使用-f77标记进行的编译将模拟f77编译器的这种行为.
在缺省情况下,f95编译器捕获遇到的第一个算术异常,并且不调用ieee_retrospective.
在需要更高精度的上下文中,f77编译器处理REAL*4常量的方式就好像它具有更高的精度一样.
在使用-f77标记进行编译时,如果将REAL*4常量与双精度或四倍精度操作数一起使用,则f95编译器允许该常量分别具有双精度或四倍精度.
允许在循环中重新定义DO循环变量.
[-f77=misc]显示所编译的程序单元的名称.
[-f77=misc}允许在DIMENSION语句之后声明DIMENSION语句中使用的变量类型.
示例:SUBROUTINEFOO(ARR,G)DIMENSIONARR(G)INTEGERGRETURNEND有关非标准语言扩展的语法和语义的详细信息,请参见位于以下网址的FORTRAN77LanguageReference:http://docs.
sun.
com/source/806-3594/index.
html.
5.
2不兼容问题下面列出了在使用此版本的f95编译和测试传统f77程序时出现的已知不兼容问题.
这些问题是由于f95中缺少相当的功能或者行为方式不同造成的.
这些项目是f77中支持的Fortran77非标准扩展,但在f95中不支持这些项目.
源代码格式在指定-f77选项时,如果名称长度超过6个字符,则会发出ANSI警告.
I/O:f95不允许对直接存取文件使用ENDFILE.
f95无法识别在直接存取I/O中指定记录编号时使用的'n格式:READ(2'13)X,Y,Zf95无法识别传统f77"R"格式编辑描述符.
5-6《Fortran用户指南》2004年4月f95不允许在CLOSE语句中使用DISP=说明符.
不允许在WRITE语句中使用位常量.
Fortran95NAMELIST不允许使用长度可变的数组和字符串.
使用RECL=1打开的直接存取文件不能用作"流"文件.
应使用FORMAT='STREAM'.
Fortran95将非法I/O说明符报告为错误.
而f77只发出警告.
数据类型、声明和用法:f95只允许7个数组下标;而f77允许20个.
f95不允许在PARAMETER语句中使用非常量.
不能在CHARACTER类型声明的初始化函数中使用整数值.
REAL()内部函数返回复数参数的实部,而不是将参数转换为REAL*4.
当参数为DOUBLECOMPLEX或COMPLEX*32时,这将导致不同的结果.
Fortran95不允许在数组声明之前在边界表达式中使用数组元素.
例如:程序、子例程、函数和语句:名称的最大长度为127个字符.
命令行选项:f95无法识别f77编译器选项-dbl-oldstruct-i2-i4,以及-vax的一些子选项.
f95不支持的f77库例程:POSIX库.
IOINIT()库例程.
磁带I/O例程topen、tclose、twrite、tread、trewin、tskipf、tstate.
start_iostats和end_iostats库例程.
f77_init()函数.
f95不允许通过使用相同名称定义用户自己的例程来绕过IEEE_RETROSPECTIVE子例程.
subroutines(i1,i2)integeri1(i2(1):10)dimensioni2(10).
.
.
错误:"I2"已经被用作函数,因此不得为其声明显式形状DIMENSION属性.
end第5章FORTRAN77兼容性:迁移到Fortran955-75.
3与f77编译的例程链接要混合使用f77和f95目标二进制文件,请使用带有-xlang=f77选项的f95编译进行链接.
即使主程序是f77程序,也使用f95执行链接步骤.
示例:编译使用f77目标文件的f95主程序.
f95程序中可以使用FORTRAN77库和内部函数,《Fortran库参考手册》中列出了这些库和内部函数.
示例:f95主程序调用FORTRAN77库中的例程.
请参见dtime(3F).
5.
3.
1Fortran95内部函数Fortran95标准支持FORTRAN77中没有的内部函数.
《Fortran库参考》手册中介绍了完整的Fortran95内部函数集,其中包括非标准的内部函数.
如果在程序中将《Fortran库参考》中列出的任何内部函数名称用作函数名称,则必须增加EXTERNAL语句才能使f95使用您的例程而不是内在例程.
demo%catm.
f95CHARACTER*74::c='Thisisatest.
'CALLecho1(c)ENDdemo%f95-xlang=f77m.
f95sub77.
odemo%a.
outThisisatest.
demo%demo%cattdtime.
f95REALe,dtime,t(2)e=dtime(t)DOi=1,100000as=as+cos(sqrt(float(i)))ENDDOe=dtime(t)PRINT*,'elapsed:',e,',user:',t(1),',sys:',t(2)ENDdemo%f95tdtime.
f95demo%a.
outelapsed:0.
14,user:0.
14,sys:0.
0E+0demo%5-8《Fortran用户指南》2004年4月《Fortran库参考》还列出了以前版本的f77编译器能够识别的所有内部函数.
f95编译器也将这些名称识别为内部函数.
如果使用-f77=intrinsics进行编译,则会将编译器识别的内部函数限定在f77编译器已知的函数范围内,而忽略Fortran95内部函数.
5.
4有关迁移到f95编译器的附加说明floatingpoint.
h头文件替代f77_floatingpoint.
h,在源程序中应按如下方式使用它:#include"floatingpoint.
h"格式为"f77/文件名"头文件引用应改为删除f77/目录路径.
某些利用了非标准别名设置技术(通过对数组进行重复索引或重叠Cray或Fortran指针)的程序可使用相应的-xalias标记进行编译.
请参见第3-46页上的"-xalias[=keywords]".
《Fortran编程指南》中有关移植"过时软件"程序的章节用示例讨论了这一问题.
6-1附录6运行时错误消息本附录介绍Fortran95运行时I/O库和操作系统生成的错误消息.
F.
1操作系统错误消息操作系统错误消息包括系统调用失败、C库错误和shell诊断.
可在intro(2)中找到系统调用错误消息.
通过Fortran库进行的系统调用并不直接生成错误消息.
Fortran库中的以下系统例程将调用C库例程,而这些库例程生成错误消息:显示以下消息:integersystem,statusstatus=system("cpafilebfile")print*,"status=",statusendcp:cannotaccessafilestatus=5126-2《Fortran用户指南》2004年4月F.
2f95运行时I/O错误消息f95I/O库在运行时检测到错误的时候发出诊断信息.
以下是一个使用Fortran95编译和运行的示例:因为f95消息包含对原始源代码文件名和行号的引用,所以应用程序开发人员应该考虑在I/O语句中使用ERR=子句以软件方式捕获运行时I/O错误.
表F-1列出了f95发出的运行时I/O消息.
demo%catwf.
fWRITE(6)1ENDdemo%f95-owfwf.
fdemo%wf******FORTRAN运行时系统******错误1003:格式化单元上的未格式化I/O位置:在"wf.
f"的第一行中的WRITE语句单元:6文件:标准输出终止表F-1f95运行时I/O消息错误消息1000格式错误1001非法单元编号1002未格式化单元上的格式化I/O1003格式化单元上的未格式化I/O1004顺序存取单元上的直接存取I/O1005直接存取单元上的顺序存取I/O1006设备不支持BACKSPACE1007偏离记录开始1008无法stat文件1009重复计数后没有*1010记录过长1011截断失败附录6运行时错误消息6-31012无法理解的列表输入1013可用空间不足1014单元未连接1015读取意外的字符1016非法逻辑输入字段1017"新"文件存在1018无法找到"旧"文件1019未知系统错误1020需要寻找能力1021非法参数1022负重复计数1023通道或设备非法操作1024可重入I/O1025不兼容的说明符处于打开状态1026名称列表非法输入1027FILEOPT参数中有错误1028不允许写入1029不允许读取1030输入时整数溢出1031输入时浮点溢出1032输入时浮点下溢1051缺省的输入单元已关闭1052缺省的输出单元已关闭1053来自未连接单元的直接存取READ1054来自未连接单元的直接存取WRITE1055无联系的内部单元1056对内部单元的空引用1057空内部文件1058未格式化单元上的列表控制I/O1059未格式化单元上的名称列表I/O表F-1f95运行时I/O消息(续)错误消息6-4《Fortran用户指南》2004年4月1060试图在内部文件的结束之后写入1061无联系的ADVANCE说明符1062ADVANCE说明符不是'YES'或'NO'1063前进式输入中存在EOR说明符1064前进式输入中存在SIZE说明符1065记录编号为负数或零1066记录不在文件中1067被破坏的格式1068无联系的输入变量1069I/O列表项多于数据编辑描述符1070在下标三元组中有零跨距1071在隐含DO循环中有零步长1072负的字段宽度1073零宽度字段1074输入时遇到了字符串编辑描述符1075输入时遇到了霍尔瑞斯编辑描述符1076在数字串中未发现数字1077在指数中未发现数字1078比例因子超出范围1079数字等于或超出基数1080在整数字段中有意外的字符1081在实数字段中有意外的字符1082在逻辑字段中有意外的字符1083在整数值中有意外的字符1084在实数值中有意外的字符1085在复数值中有意外的字符1086在逻辑值中有意外的字符1087在字符值中有意外的字符1088在NAMELIST组名前有意外的字符1089NAMELIST组名不匹配程序中的名称表F-1f95运行时I/O消息(续)错误消息附录6运行时错误消息6-51090在NAMELIST项中有意外的字符1091在NAMELIST项名中有不配对的括号1092变量不在NAMELIST组中1093NAMELIST对象名中的下标过多1094NAMELIST对象名中的下标不够1095NAMELIST对象名中有零跨距1096NAMELIST对象名中有空段下标1097NAMELIST对象名中的下标超出界限1098NAMELIST对象名中有空子串1099NAMELIST对象名中的子串超出范围1100NAMELIST对象名中有意外的组件名1111无联系的ACCESS说明符1112无联系的ACTION说明符1113无联系的BINARY说明符1114无联系的BLANK说明符1115无联系的DELIM说明符1116无联系的DIRECT说明符1117无联系的FILE说明符1118无联系的FMT说明符1119无联系的FORM说明符1120无联系的FORMATTED说明符1121无联系的NAME说明符1122无联系的PAD说明符1123无联系的POSITION说明符1124无联系的READ说明符1125无联系的READWRITE说明符1126无联系的SEQUENTIAL说明符1127无联系的STATUS说明符1128无联系的UNFORMATTED说明符1129无联系的WRITE说明符表F-1f95运行时I/O消息(续)错误消息6-6《Fortran用户指南》2004年4月1130零长度的文件名1131ACCESS说明符不是'SEQUENTIAL'或'DIRECT'1132ACTION说明符不是'READ'、'WRITE'或'READWRITE'1133BLANK说明符不是'ZERO'或'NULL'1134DELIM说明符不是'APOSTROPHE'、'QUOTE'或'NONE'1135意外的FORM说明符1136PAD说明符不是'YES'或'NO'1137POSITION说明符不是'APPEND'、'ASIS'或'REWIND'1138RECL说明符为零或负数1139直接存取文件未指定记录长度1140意外的STATUS说明符1141连接的单元指定了状态且不是'OLD'1142STATUS说明符不是'KEEP'或'DELETE'1143为临时文件指定了状态'KEEP'1144状态值不可能1145为临时文件指定了文件名1146正在试图打开正被读取或写入的单元1147正在试图关闭正被读取或写入的单元1148正在试图打开目录1149状态为'OLD'且文件为不存在的符号连接1150状态为'NEW'且文件为符号连接1151没有可用的临时文件名1152缺省单元的说明符ACCESS='STREAM'1153对缺省单元的流存取1161设备不支持REWIND1162BACKSPACE需要读取许可1163直接存取单元上的BACKSPACE1164二进制单元上的BACKSPACE1165退格时遇到了文件结束1166ENDFILE需要写入许可表F-1f95运行时I/O消息(续)错误消息附录6运行时错误消息6-71167直接存取单元上的ENDFILE1168对顺序或直接存取单元的流存取1169对未连接单元的流存取1170对流存取单元的直接存取1171POS说明符的值不正确1172无联系的ASYNCHRONOUS说明符1173无联系的DECIMAL说明符1174无联系的IOMSG说明符1175无联系的ROUND说明符1176无联系的STREAM说明符1177ASYNCHRONOUS说明符不是'YES'或'NO'1178ROUND说明符不是'UP'、'DOWN'、'ZERO'、'NEAREST'、'COMPATIBLE'或'PROCESSOR-DEFINED'1179DECIMAL说明符不是'POINT'或'COMMA'1180流存取单元的OPEN语句中不允许RECL说明符1181正在试图分配一个已分配的数组1182正在释放一个无联系的指针1183正在释放一个未分配的可分配数组1184正在通过指针来释放一个可分配数组1185正在释放一个未由ALLOCATE语句分配的对象1186正在释放一个对象的一部分1187正在释放的对象比分配的大1191未分配的数组被传递给数组内函数1192非法等级1193源大小较小1194数组大小为零1195形状中有负元素1196非法种类1197非整合的数组1213未连接单元上的不同步I/O1214同步单元上的不同步I/O表F-1f95运行时I/O消息(续)错误消息6-8《Fortran用户指南》2004年4月1215数据编辑描述符与I/O列表项类型不兼容1216当前I/O列表项不匹配任何数据编辑描述符2001无效的常数、结构或组件名2002未创建句柄2003字符参数太短2004数组参数太长或太短2005文件、记录或目录流结束2021锁定未初始化(OpenMP)2122使用锁定变量时死锁(OpenMP)2123未设锁定(OpenMP)表F-1f95运行时I/O消息(续)错误消息7-1附录7功能版本历史本附录列出了此版本和以前版本的Fortran95编译器中的新增功能和经修改的功能.
Fortran95编译器版本7.
1是随SunStudio8发布的一个组件.
以前的编译器版本有7.
0版和6.
2版,其中,7.
0版是随SunONEStudio7编译器集合(以前称为ForteDeveloper7)一起发布的,而6.
2版则是随ForteDeveloper6,update2一起发布的.
G.
1SunStudio8Fortran发行版本:增强的-openmp选项:增强了-openmp选项标记以便于调试OpenMP程序.
要使用dbx调试OpenMP应用程序,请使用以下编译选项:-openmp=noopt-g然后,您可以使用dbx在并行区内设置断点,并显示变量的内容.
请参见第3-35页上的"-openmp[=keyword]".
多进程编译:指定-xjobs=n以及-xipo;过程间优化器最多可调用n个代码生成器实例来编译命令行中列出的文件.
该选项可大大缩短在多CPU机器上生成较大应用程序所需的时间.
请参见第3-63页上的"-xjobs=n".
使用PRAGMAASSUME作断言:ASSUMEpragma是此编译器版本的新增功能.
此pragma将程序员所知道的在过程中某点为真的条件提示给编译器.
这有助于编译器更好地优化代码.
程序员也可以在执行过程中使用这些断言检查程序的有效性.
请参见第2-12页上的"ASSUME指令"和第3-52页上的"-xassume_control[=keywords]".
更多Fortran2000功能:在此版本的Fortran95编译器中,已经实现了Fortran2000草案标准中的以下功能.
第4章中描述了这些功能.
7-2《Fortran用户指南》2004年4月异常和IEEE运算:新增的内部模块IEEE_ARITHMETIC和IEEE_FEATURES在Fortran语言中提供了对异常和IEEE运算的支持.
请参见第4-14页上的"IEEE浮点异常处理".
与C之间的互操作性:新的Fortran草案标准提供了一种引用C语言过程的方法,以及一种指定Fortran子程序可从C函数引用的方法.
它还提供了一种声明与外部C变量链接的全局变量的方法.
请参见第4-14页上的"与C函数之间的互操作性".
PROTECTED属性现在,Fortran95编译器接受Fortran2000的PROTECTED属性.
PROTECTED对模块实体的使用进行了限制.
具有PROTECTED属性的对象只能在声明这些对象的模块中定义.
请参见第4-14页上的"PROTECTED属性".
ASYNCHRONOUSI/O说明符编译器可识别I/O语句中的ASYNCHRONOUS说明符:ASYNCHRONOUS=['YES'|'NO']此语法是在草案标准中提出的.
请参见第4-15页上的"Fortran2000异步I/O".
与传统f77之间的兼容性更强:很多新增功能增强了Fortran95编译器与传统Fortran77编译器f77之间的兼容性.
其中包括变量格式表达式(VFE)、长标识符、-arg=local和-vax编译器选项.
请参见第3章和第4章.
I/O错误处理程序:两个新函数允许用户为逻辑单元的格式化输入指定他们自己的错误处理例程.

LOCVPS-2021年6月香港便宜vps宽带升级,充值就送代金券,其它八折优惠!

LOCVPS怎么样?LOCVPS是一家成立于2011年的稳定老牌国人商家,目前提供中国香港、韩国、美国、日本、新加坡、德国、荷兰等区域VPS服务器,所有机房Ping延迟低,国内速度优秀,非常适合建站和远程办公,所有机房Ping延迟低,国内速度优秀,非常适合做站。XEN架构产品的特点是小带宽无限流量、不超售!KVM架构是目前比较流行的虚拟化技术,大带宽,生态发展比较全面!所有大家可以根据自己业务需求...

HaloCloud:日本软银vps100M/200M/500M带宽,,¥45.00元/月

halocloud怎么样?halocloud是一个于2019下半年建立的商家,主要提供日本软银VPS,广州移动VDS,株洲联通VDS,广州移动独立服务器,Halo邮局服务,Azure香港1000M带宽月抛机器等。日本软银vps,100M/200M/500M带宽,可看奈飞,香港azure1000M带宽,可以解锁奈飞等流媒体,有需要看奈飞的朋友可以入手!点击进入:halocloud官方网站地址日本vp...

raksmart:年中大促,美国物理机$30/月甩卖;爆款VPS仅月付$1.99;洛杉矶/日本/中国香港多IP站群$177/月

RAKsmart怎么样?RAKsmart发布了2021年中促销,促销时间,7月1日~7月31日!,具体促销优惠整理如下:1)美国西海岸的圣何塞、洛杉矶独立物理服务器低至$30/月(续费不涨价)!2)中国香港大带宽物理机,新品热卖!!!,$269.23 美元/月,3)站群服务器、香港站群、日本站群、美国站群,低至177美元/月,4)美国圣何塞,洛杉矶10G口服务器,不限流量,惊爆价:$999.00,...

设置虚拟内存为你推荐
域名注册公司一般公司注册的都是什么域名?linux主机Linux中,用户名和主机名有什么区别?网络服务器租用服务器租用 使用方法中文域名注册查询中文.com域名是什么,怎么注册美国vps租用香港VPS:那里有租用香港VPS或者美国的VPS域名申请申请域名需要什么条件?具体点!急!急!!!网站空间免备案哪里能找到免费、免备案的空间?100m虚拟主机100M虚拟主机有多大,能放多少东西论坛虚拟主机论坛虚拟主机的IP地址在后台的那个地方呀淘宝虚拟主机淘宝买万网虚拟主机怎么变别真假
godaddy域名解析教程 cybermonday 美国php空间 申请空间 商家促销 大容量存储 40g硬盘 tna官网 服务器干什么用的 中国网通测速 东莞服务器 重庆电信服务器托管 免费ftp smtp服务器地址 贵阳电信测速 深圳域名 万网主机 西部数码主机 vim 域名商城 更多