编译器设置虚拟内存

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

OracleSolarisStudio12.
2:Fortran用户指南文件号码821–25082010年9月版权所有1991,2010,Oracle和/或其附属公司.
保留所有权利.
本软件和相关文档是根据许可证协议提供的,该许可证协议中规定了关于使用和公开本软件和相关文档的各种限制,并受知识产权法的保护.
除非在许可证协议中明确许可或适用法律明确授权,否则不得以任何形式、任何方式使用、拷贝、复制、翻译、广播、修改、授权、传播、分发、展示、执行、发布或显示本软件和相关文档的任何部分.
除非法律要求实现互操作,否则严禁对本软件进行逆向工程设计、反汇编或反编译.

此文档所含信息可能随时被修改,恕不另行通知,我们不保证该信息没有错误.
如果贵方发现任何问题,请书面通知我们.

如果将本软件或相关文档交付给美国政府,或者交付给以美国政府名义获得许可证的任何机构,必须符合以下规定:U.
S.
GOVERNMENTRIGHTSPrograms,software,databases,andrelateddocumentationandtechnicaldatadeliveredtoU.
S.
Governmentcustomersare"commercialcomputersoftware"or"commercialtechnicaldata"pursuanttotheapplicableFederalAcquisitionRegulationandagency-specificsupplementalregulations.
Assuch,theuse,duplication,disclosure,modification,andadaptationshallbesubjecttotherestrictionsandlicensetermssetforthintheapplicableGovernmentcontract,and,totheextentapplicablebythetermsoftheGovernmentcontract,theadditionalrightssetforthinFAR52.
227-19,CommercialComputerSoftwareLicense(December2007).
OracleAmerica,Inc.
,500OracleParkway,RedwoodCity,CA94065.
本软件或硬件是为了在各种信息管理应用领域内的一般使用而开发的.
它不应被应用于任何存在危险或潜在危险的应用领域,也不是为此而开发的,其中包括可能会产生人身伤害的应用领域.
如果在危险应用领域内使用本软件或硬件,贵方应负责采取所有适当的防范措施,包括备份、冗余和其它确保安全使用本软件或硬件的措施.
对于因在危险应用领域内使用本软件或硬件所造成的一切损失或损害,OracleCorporation及其附属公司概不负责.
Oracle和Java是Oracle和/或其附属公司的注册商标.
其他名称可能是各自所有者的商标.
AMD、Opteron、AMD徽标以及AMDOpteron徽标是AdvancedMicroDevices的商标或注册商标.
Intel和IntelXeon是IntelCorporation的商标或注册商标.
所有SPARC商标均是SPARCInternational,Inc的商标或注册商标,并应按照许可证的规定使用.
UNIX是通过X/OpenCompany,Ltd授权的注册商标.
本软件或硬件以及文档可能提供了访问第三方内容、产品和服务的方式或有关这些内容、产品和服务的信息.
对于第三方内容、产品和服务,OracleCorporation及其附属公司明确表示不承担任何种类的担保,亦不对其承担任何责任.
对于因访问或使用第三方内容、产品或服务所造成的任何损失、成本或损害,OracleCorporation及其附属公司概不负责.
110414@25097目录前言131简介171.
1标准一致性171.
2Fortran编译器的功能181.
3其他Fortran实用程序181.
4调试实用程序191.
5Sun性能库191.
6区间运算191.
7手册页191.
8命令行帮助202使用SolarisStudioFortran212.
1快速入门212.
2调用编译器222.
2.
1编译和链接序列232.
2.
2命令行文件命名约定232.
2.
3源文件242.
2.
4源文件预处理程序242.
2.
5分别编译和链接252.
2.
6一致编译和链接252.
2.
7无法识别的命令行参数252.
2.
8模块262.
3指令262.
3.
1通用指令272.
3.
2并行化指令322.
3.
3IVDEP指令3332.
4库接口和system.
inc342.
5编译器用法提示352.
5.
1确定硬件平台352.
5.
2使用环境变量352.
5.
3内存大小363Fortran编译器选项393.
1命令语法393.
2选项语法393.
3选项摘要403.
3.
1常用选项453.
3.
2宏标志463.
3.
3向后兼容性和传统选项463.
3.
4已过时的选项标志473.
4选项参考473.
4.
1–aligncommon[={1|2|4|8|16}473.
4.
2–ansi483.
4.
3–arg=local483.
4.
4–autopar483.
4.
5–B{static|dynamic}493.
4.
6–C503.
4.
7–c503.
4.
8–copyargs503.
4.
9–Dname[=def]513.
4.
10–dalign523.
4.
11–dbl_align_all[={yes|no}523.
4.
12–depend[={yes|no}533.
4.
13–dn533.
4.
14–dryrun533.
4.
15–d{y|n}533.
4.
16–e543.
4.
17–erroff[={%all|%none|taglist}543.
4.
18–errtags[={yes|no}543.
4.
19–errwarn[={%all|%none|taglist}543.
4.
20–ext_names=e55目录OracleSolarisStudio12.
2:Fortran用户指南2010年9月43.
4.
21–F553.
4.
22–f553.
4.
23–f77[=list]563.
4.
24–fast573.
4.
25–fixed593.
4.
26–flags593.
4.
27–fma={none|fused}593.
4.
28–fnonstd593.
4.
29–fns[={yes|no}603.
4.
30–fpover[={yes|no}613.
4.
31–fpp613.
4.
32–fprecision={single|double|extended}613.
4.
33–free623.
4.
34–fround={nearest|tozero|negative|positive}623.
4.
35–fsimple[={1|2|0}623.
4.
36–fstore633.
4.
37–ftrap=t633.
4.
38–G643.
4.
39–g643.
4.
40–hname653.
4.
41–help653.
4.
42–Ipath653.
4.
43-i8663.
4.
44–inline=[%auto][[,][no%]f1,…[no%]fn]663.
4.
45–iorounding[={compatible|processor-defined}673.
4.
46–keeptmp673.
4.
47–Kpic673.
4.
48–KPIC673.
4.
49–Lpath683.
4.
50–lx683.
4.
51–libmil693.
4.
52–loopinfo693.
4.
53–Mpath693.
4.
54–m32|–m64703.
4.
55–moddir=path703.
4.
56-mt[={yes|no}71目录53.
4.
57–native713.
4.
58–noautopar713.
4.
59–nodepend723.
4.
60-nofstore723.
4.
61–nolib723.
4.
62–nolibmil723.
4.
63–noreduction723.
4.
64–norunpath733.
4.
65–O[n]733.
4.
66–O733.
4.
67–O1743.
4.
68–O2743.
4.
69–O3743.
4.
70–O4743.
4.
71–O5743.
4.
72–oname753.
4.
73–onetrip753.
4.
74–openmp753.
4.
75–p753.
4.
76–pad[=p]753.
4.
77–pg763.
4.
78–pic773.
4.
79–PIC773.
4.
80–Qoptionprls783.
4.
81–qp783.
4.
82–Rls783.
4.
83–r8const783.
4.
84–recl=a[,b]793.
4.
85–reduction793.
4.
86–S793.
4.
87–s793.
4.
88–sb803.
4.
89–sbfast803.
4.
90–silent803.
4.
91–stackvar803.
4.
92–stop_status[={yes|no}81目录OracleSolarisStudio12.
2:Fortran用户指南2010年9月63.
4.
93–temp=dir823.
4.
94–time823.
4.
95–traceback[={%none|common|signals_list}823.
4.
96–U833.
4.
97–Uname833.
4.
98–u843.
4.
99–unroll=n843.
4.
100–use=list843.
4.
101–V843.
4.
102–v843.
4.
103–vax=keywords853.
4.
104–vpara853.
4.
105–w[n]863.
4.
106–Xlist[x]863.
4.
107–xaddr32[={yes|no}873.
4.
108–xalias[=keywords]883.
4.
109–xannotate[={yes|no}893.
4.
110–xarch=isa903.
4.
111–xassume_control[=keywords]933.
4.
112–xautopar943.
4.
113–xbinopt={prepare|off}943.
4.
114–xcache=c953.
4.
115–xcheck=keyword963.
4.
116–xchip=c973.
4.
117–xcode=keyword983.
4.
118–xcommonchk[={yes|no}1003.
4.
119–xcrossfile[={1|0}1003.
4.
120–xdebugformat={dwarf|stabs}1003.
4.
121–xdepend1013.
4.
122–xF1013.
4.
123–xfilebyteorder=options1013.
4.
124–xhasc[={yes|no}1033.
4.
125–xhelp={readme|flags}1043.
4.
126–xhwcprof[={enable|disable}1043.
4.
127–xia[={widestneed|strict}1053.
4.
128–xinline=list105目录73.
4.
129–xinstrument=[%no]datarace1053.
4.
130–xinterval[={widestneed|strict|no}1063.
4.
131–xipo[={0|1|2}1063.
4.
132–xipo_archive[={none|readonly|writeback}1083.
4.
133–xivdep[=p]1093.
4.
134–xjobs=n1093.
4.
135–xkeepframe[=[%all,%none,name,no%name]1103.
4.
136–xknown_lib=library_list1103.
4.
137–xl1113.
4.
138–xlang=f771113.
4.
139–xld1113.
4.
140–xlibmil1113.
4.
141–xlibmopt1113.
4.
142–xlic_lib=sunperf1123.
4.
143–xlicinfo1123.
4.
144–xlinkopt[={1|2|0}1123.
4.
145–xloopinfo1133.
4.
146–xmaxopt[=n]1133.
4.
147–xmemalign[=1133.
4.
148–xmodel=[small|kernel|medium]1153.
4.
149–xnolib1153.
4.
150–xnolibmil1153.
4.
151–xnolibmopt1153.
4.
152–xOn1163.
4.
153–xopenmp[={parallel|noopt|none}1163.
4.
154–xpad1173.
4.
155–xpagesize=size1173.
4.
156–xpagesize_heap=size1183.
4.
157–xpagesize_stack=size1183.
4.
158–xpec[={yes|no}1183.
4.
159–xpg1183.
4.
160–xpp={fpp|cpp}1193.
4.
161–xprefetch[=a[,a]1193.
4.
162–xprefetch_auto_type=indirect_array_access1213.
4.
163–xprefetch_level={1|2|3}1213.
4.
164–xprofile=p121目录OracleSolarisStudio12.
2:Fortran用户指南2010年9月83.
4.
165–xprofile_ircache[=path]1243.
4.
166–xprofile_pathmap=collect_prefix:use_prefix1243.
4.
167–xrecursive1253.
4.
168–xreduction1253.
4.
169–xregs=r1253.
4.
170–xs1273.
4.
171–xsafe=mem1273.
4.
172–xsb1273.
4.
173–xsbfast1273.
4.
174–xspace1273.
4.
175–xtarget=t1283.
4.
176–xtime1303.
4.
177–xtypemap=spec1303.
4.
178–xunroll=n1313.
4.
179–xvector[=[[no%]lib,[no%]simd,%none]1313.
4.
180–ztext1324SolarisStudioFortran的功能与差异1354.
1源语言功能1354.
1.
1续行限制1354.
1.
2固定格式源代码行1354.
1.
3制表符格式1354.
1.
4采用的源代码格式1364.
1.
5限制和缺省值1374.
2数据类型1374.
2.
1布尔类型1374.
2.
2数值数据类型的缩写大小表示法1404.
2.
3数据类型的大小和对齐1414.
3Cray指针1424.
3.
1语法1424.
3.
2Cray指针的用途1434.
3.
3声明Cray指针和Fortran95指针1434.
3.
4Cray指针的功能1434.
3.
5Cray指针的限制1444.
3.
6Cray指针对象的限制144目录94.
3.
7Cray指针的用法1454.
4STRUCTURE和UNION(VAXFortran)1464.
5无符号整数1464.
5.
1算术表达式1474.
5.
2关系表达式1474.
5.
3控制构造1474.
5.
4输入/输出构造1474.
5.
5内部函数1474.
6Fortran200x的功能1484.
6.
1与C函数之间的互操作性1484.
6.
2IEEE浮点异常处理1484.
6.
3命令行参数内部函数1494.
6.
4PROTECTED属性1494.
6.
5Fortran2003异步I/O1494.
6.
6扩展的ALLOCATABLE属性1494.
6.
7VALUE属性1504.
6.
8Fortran2003流I/O1504.
6.
9Fortran2003格式化I/O功能1504.
6.
10Fortran2003IMPORT语句1514.
6.
11Fortran2003FLUSHI/O语句1514.
6.
12Fortran2003POINTERINTENT功能1524.
6.
13Fortran2003中增强的数组构造函数1524.
6.
14Fortran2003和Fortran2008的其他功能1524.
7其他的I/O扩展1534.
7.
1I/O错误处理例程1534.
7.
2变量格式表达式1534.
7.
3NAMELIST输入格式1544.
7.
4二进制未格式化I/O1544.
7.
5各种I/O扩展1544.
8指令1554.
8.
1特殊f95指令行的格式1554.
8.
2FIXED和FREE指令1554.
8.
3并行化指令1564.
9模块文件1564.
9.
1搜索模块1574.
9.
2-use=list选项标志158目录OracleSolarisStudio12.
2:Fortran用户指南2010年9月104.
9.
3fdumpmod命令1584.
10内部函数1584.
11向前兼容性1594.
12混合语言1595FORTRAN77兼容性:迁移到SolarisStudioFortran1615.
1兼容的f77功能1615.
2不兼容问题1655.
3与旧版FORTRAN77编译的例程链接1665.
3.
1Fortran内部函数1675.
4有关迁移到f95编译器的附加说明1675.
5f77命令168A运行时错误消息169A.
1操作系统错误消息169A.
2f95运行时I/O错误消息169B功能发行版历史记录177B.
1OracleSolarisStudio12.
2Fortran发行版177B.
2SunStudio12Update1Fortran发行版178B.
3SunStudio12Fortran发行版179B.
4SunStudio11Fortran发行版179B.
5SunStudio10Fortran发行版:180B.
6SunStudio9Fortran发行版:180B.
7SunStudio8Fortran发行版:182B.
8SunONEStudio7编译器集合(ForteDeveloper7)版本:184CFortran指令摘要187C.
1通用Fortran指令187C.
2特殊的Fortran指令188C.
3FortranOpenMP指令189索引191目录1112前言OracleSolarisFortran用户指南介绍了OracleSolarisStudioFortran编译器f95的环境及命令行选项.
本指南的目标读者是精通Fortran语言并希望了解如何有效使用OracleSolarisStudioFortran编译器的科学工作者、工程师和程序员.
通常,还假定这些人员熟悉Solaris操作环境或UNIX.
有关OracleSolaris操作环境中各种Fortran编程问题的讨论可在随附的Fortran编程指南中找到,讨论的问题包括输入/输出、应用程序开发、库的创建和使用、程序分析、移植、优化和并行处理.

受支持的平台此OracleSolarisStudio发行版支持使用以下SPARC和x86系列处理器体系结构的系统:UltraSPARC、SPARC64、AMD64、Pentium和XeonEM64T.
所运行的OracleSolaris操作系统版本支持的系统可在http://www.
sun.
com/bigadmin/hcl上的硬件兼容性列表中找到.
这些文档中给出了平台类型间所有实现的区别.
在本文档中,与x86相关的术语的含义如下:"x86"泛指64位和32位的x86兼容产品系列.
''x64"指出了有关AMD64或EM64T系统的特定64位信息.
"32位x86"指出了有关基于x86的系统的特定32位信息.
有关受支持的系统,请参阅硬件兼容性列表.
访问SolarisStudio文档可以访问以下位置的文档:可从以下位置的文档索引页面中获取文档:http://www.
oracle.
com/technetwork/server-storage/solarisstudio/documentation.
IDE、性能分析器、dbxtool和DLight的所有组件的联机帮助可以在这些工具中通过"帮助"菜单、F1键以及许多窗口和对话框上的"帮助"按钮获取.
13采用易读格式的文档该文档以易读格式提供,以方便残障用户使用辅助技术进行阅读.
可以按照下表所述找到文档的易读版本.
文档类型易读版本的格式和位置手册HTML,docs.
sun.
com上的OracleSolarisStudio12.
2Collection-SimplifiedChinese中《OracleSolarisStudio12.
2发行版的新增功能》(以前的组件自述文件)HTML,docs.
sun.
com上的OracleSolarisStudio12.
2Collection-SimplifiedChinese中手册页使用man命令在OracleSolaris终端中显示联机帮助HTML,可在IDE、dbxtool、dbxtool、DLight和性能分析器中通过"帮助"菜单、"帮助"按钮和F1键获取.
发行说明HTML,docs.
sun.
com上的OracleSolarisStudio12.
2Collection-SimplifiedChinese中相关的第三方Web站点引用本文档引用了第三方URL,以用于提供其他相关信息.
注–Oracle对本文档中提到的第三方Web站点的可用性不承担任何责任.
对于此类站点或资源中的(或通过它们获得的)任何内容、广告、产品或其他资料,Oracle并不表示认可,也不承担任何责任.
对于因使用或依靠此类站点或资源中的(或通过它们获得的)任何内容、产品或服务而造成的或连带产生的实际或名义损坏或损失,Oracle概不负责,也不承担任何责任.
开发者资源要找到以下经常更新的资源,请访问http://www.
oracle.
com/technetwork/server-storage/solarisstudio:有关编程技术和最佳做法的文章软件文档以及随软件一起安装的文档的更正信息指导您使用OracleSolarisStudio工具逐步完成开发任务的教程有关支持级别的信息http://forums.
sun.
com/category.
jspacategoryID=113上的用户论坛前言OracleSolarisStudio12.
2:Fortran用户指南2010年9月14印刷约定下表介绍了本书中的印刷约定.
表P–1印刷约定字体含义示例AaBbCc123命令、文件和目录的名称;计算机屏幕输出编辑.
login文件.
使用ls-a列出所有文件.
machine_name%youhavemail.
AaBbCc123用户键入的内容,与计算机屏幕输出的显示不同machine_name%suPassword:aabbcc123要使用实名或值替换的命令行占位符删除文件的命令为rmfilename.
AaBbCc123《书名》新词或术语以及要强调的词阅读《用户指南》的第6章.
高速缓存是存储在本地的副本.
请勿保存文件.
注意:有些强调的项目在联机时以粗体显示.
命令中的shell提示符示例下表显示了OracleSolarisOS中包含的shell的缺省UNIX系统提示符和超级用户提示符.
请注意,显示在命令示例中的缺省系统提示符会根据OracleSolaris发行版的不同而有所不同.
表P–2Shell提示符Shell提示符Bashshell、Kornshell和Bourneshell$Bashshell、Kornshell和Bourneshell超级用户#Cshellmachine_name%Cshell超级用户machine_name#前言15文档、支持和培训有关其他资源,请参见以下Web站点:文档(http://docs.
sun.
com)支持(http://www.
oracle.
com/us/support/systems/index.
html)培训(http://education.
oracle.
com)-单击左侧导航栏中的Sun链接.
Oracle欢迎您提出意见Oracle欢迎您针对其文档质量和实用性提出意见和建议.
如果您发现任何错误,或有其他任何改进建议,请转至http://docs.
sun.
com,然后单击Feedback(反馈).
请提供文档的标题和文件号码,以及章节和页码(如果有).
如果您需要回复,请告知.

Oracle技术网络(http://www.
oracle.
com/technology/global/cn/index.
html)提供了一系列与Oracle软件相关的资源:在讨论论坛(http://forums.
oracle.
com)上讨论技术问题和解决方案.
通过OracleByExample(http://www.
oracle.
com/technology/obe/start/index.
html)获得逐步骤实用教程.
下载样例代码(http://www.
oracle.
com/technology/sample_code/index.
html).
前言OracleSolarisStudio12.
2:Fortran用户指南2010年9月16简介本书以及配套的Fortran编程指南中介绍的SolarisStudioFortran编译器f95可在SPARC、UltraSPARC和x64/x86平台上的Solaris操作环境下以及x86/x64平台上的Linux环境下使用.
此编译器符合发布的Fortran语言标准,并提供很多扩展的功能,其中包括多处理器并行化、高级的优化代码编译以及混合的C/Fortran语言支持.
f95编译器还提供接受大多数传统Fortran77源代码的Fortran77兼容性模式.
不再包含单独的Fortran77编译器.
有关FORTRAN77兼容性和迁移问题的信息,请参见第5章.
1.
1标准一致性f95符合ISO/IEC1539-1:1997Fortran标准文档的第一部分.
浮点运算基于IEEE标准754-1985和国际标准IEC60559:1989.
f95提供了对SPARC和x86系列处理器体系结构(Solaris和Linux(x86)平台上的UltraSPARC、SPARC64、AMD64、PentiumPro和XeonIntel64)优化开发功能的支持.
SolarisStudio编译器符合OpenMP3.
0共享内存并行化API规范.
有关详细信息,请参见《OpenMPAPI用户指南》.
在本文档中,"标准"是指与上面列出的标准版本相一致.
"非标准"或"扩展"是指超出这些标准版本的功能.
负责标准的一方可能会不时地修订这些标准.
可能会修订或替换这些编译器所遵循的适用标准的版本,从而导致SolarisStudioFortran编译器未来发行版中的功能与先前发行版不兼容.
1第1章171.
2Fortran编译器的功能SolarisStudioFortran编译器f95提供以下功能和扩展:在例程中对参数、公共区等进行全局程序一致性检查.
(仅适用于Solaris平台).
优化多处理器系统的自动和显式循环并行化.
VAX/VMSFortran扩展,其中包括:结构、记录、联合和映射递归OpenMP3.
0并行化指令.
全局、窥孔和潜在的并行化优化可产生高性能的应用程序.
基准测试表明优化的应用程序的运行速度比未优化的代码快得多.
通用调用惯例允许将使用C或C++编写的例程与Fortran程序结合使用.
支持启用的64位Solaris和Linux环境.
使用%VAL按值进行调用.
Fortran77和Fortran95/Fortran2003程序与目标二进制文件之间的兼容性.
区间运算编程.
某些Fortran2003功能,其中包括流I/O.
有关每个软件发行版的编译器中添加的新功能和扩展功能的详细信息,请参见附录B.
另请参见《OracleSolarisStudio12.
2发行版的新增功能》,以了解有关本编译器和工具发行版中新增和更改的功能、已知问题、解决方法和限制的最新信息.
可以通过http://www.
oracle.
com/technetwork/server-storage/solarisstudio/documentation上的本发行版文档索引页访问该"新增功能"指南.
1.
3其他Fortran实用程序以下实用程序可为使用Fortran进行软件程序开发提供帮助:SolarisStudio性能分析器-单线程和多线程应用程序的性能深入分析工具.
请参见analyzer(1).
asa-此Solaris实用程序是一个Fortran输出过滤器,用于打印第一列中包含Fortran回车控制符的文件.
可使用asa将按照Fortran回车控制惯例设置格式的文件转换为按照UNIX行打印机惯例设置格式的文件.
请参见asa(1).
fdumpmod-显示包含在文件或归档文件中的模块名称的实用程序.
请参见fdumpmod(1).
fpp-Fortran源代码预处理程序.
请参见fpp(1).
fsplit-此实用程序将一个包含几个例程的Fortran文件拆分成几个文件,每个文件包含一个例程.
请参见fsplit(1).
1.
2Fortran编译器的功能OracleSolarisStudio12.
2:Fortran用户指南2010年9月181.
4调试实用程序可以使用以下调试实用程序:-Xlist-一个用于检查例程中参数、COMMON块等一致性的编译器选项.
(仅限Solaris平台)SolarisStudiodbx-提供强大、功能丰富的运行时和静态调试器,包含一个性能数据收集器.
1.
5Sun性能库Sun性能库是一个用于计算线性代数和傅立叶变换的优化子例程及函数的库.
它基于一般通过Netlib(www.
netlib.
org)提供的标准库LAPACK、BLAS1、BLAS2、BLAS3、FFTPACK、VFFTPACK和LINPACK.
与标准库版本相比,Sun性能库中的每个子程序执行相同的操作并且具有相同的接口,但通常这些子程序的速度要快得多且准确得多,这些子程序可以用于多处理环境中.
有关详细信息,请参见performance_library自述文件和《Sun性能库用户指南》.
(性能库例程的手册页位于第3P节.
)1.
6区间运算f95编译器提供编译器标志-xia和-xinterval以启用新的语言扩展,并生成相应的代码以执行区间运算.
有关详细信息,请参见《Fortran95区间运算编程指南》.
1.
7手册页联机手册(man)页提供了关于命令、函数、子例程或这些项的集合的当前文档.
要访问SolarisStudio的手册页,应将用户的MANPATH环境变量设置为SolarisStudio安装目录man.
可以通过运行以下命令来显示手册页:demo%mantopic在整个Fortran文档中,出现的手册页参考带有主题名称和手册章节号:可使用manf95访问f95(1).
例如,可在man命令中使用-s选项来访问ieee_flags(3M)指示的其他部分:demo%man-s3Mieee_flags1.
7手册页第1章简介19Fortran库例程是在手册页第3F节中介绍的.
下面列出了对于Fortran用户非常重要的man页:f95(1)Fortran95命令行选项analyzer(1)SolarisStudio性能分析器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)数学库错误处理例程ld(1)目标文件的链接编辑器1.
8命令行帮助可通过调用编译器的-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.
1.
8命令行帮助OracleSolarisStudio12.
2:Fortran用户指南2010年9月20使用SolarisStudioFortran本章介绍如何使用Fortran编译器.
所有编译器的主要用途都是将使用过程语言(如Fortran)编写的程序转换为可由目标计算机硬件执行的数据文件.
在此过程中,编译器也可以自动调用系统链接程序来生成可执行文件.
编译器还可以用于:生成并行的可执行文件以用于多处理器(-openmp).
跨源文件和子例程分析程序的一致性并生成报告(-Xlist).
将源文件转换为:可重定位的二进制(.
o)文件,可随后将其链接到可执行文件或静态库(.
a)文件.
动态共享库(.
so)文件(-G).
将文件链接到可执行文件.
在运行时调试处于启用状态的情况下编译可执行文件(-g).
使用运行时语句或过程级分析进行编译(-pg).
检查源代码是否符合ANSI标准(-ansi).
2.
1快速入门本节简要介绍如何使用Fortran编译器来编译和运行Fortran程序.
下一章将详细介绍命令行选项.
运行Fortran应用程序的基本步骤包括:使用编辑器创建带有文件名后缀.
f、.
for、.
f90、.
f95、.
F、.
F90、.
F95、.
f03或.
F03的Fortran源文件(请参见表表2–1),调用编译器生成可执行文件;最后通过键入文件名来启动该程序的执行:示例:此程序在屏幕上显示一条消息:2第2章21demo%catgreetings.
fPROGRAMGREETINGSPRINT*,'RealprogrammerswriteFortran!
'ENDdemo%f95greetings.
fdemo%a.
outRealprogrammerswriteFortran!
demo%在此示例中,f95编译源文件greetings.
f,并在缺省情况下将可执行程序链接到文件a.
out.
要启动该程序,请在命令提示符下键入可执行文件的名称a.
out.
传统上,UNIX编译器将可执行输出写入到名为a.
out的缺省文件中.
每次编译都写入到同一个文件是比较笨拙的方法.
再者,如果该文件已存在,则在下次运行编译器时它将被覆盖.
因此,请使用-o编译器选项来显式指定可执行输出文件的名称:demo%f95-ogreetingsgreetings.
fdemo%greetingsRealprogrammerswriteFortran!
demo%在上面的示例中,-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源文件.
)在下面的示例中,我们在启用运行时调试的情况下,使用f95来编译两个源文件以生成名为growth的可执行文件:demo%f95-g-ogrowthgrowth.
ffft.
f952.
2调用编译器OracleSolarisStudio12.
2:Fortran用户指南2010年9月22注–可以使用f95或f90命令来调用Fortran编译器.
新增功能:该编译器还接受扩展名为.
f03或.
F03的源文件.
这些文件将被视为与.
f95和.
F95等效,并且可以作为一种方式来表示源文件包含Fortran2003扩展名.
第23页中的"2.
2.
2命令行文件命名约定"说明了编译器可以识别的各种源文件扩展名.
2.
2.
1编译和链接序列在上一示例中,编译器自动生成加载器目标文件growth.
o和fft.
o,然后调用系统链接程序以创建可执行程序文件growth.
在编译后,目标文件growth.
o和fft.
o将保留.
此约定使您可以方便地重新链接和重新编译文件.
如果编译失败,您将收到每个错误的对应消息.
对于出现错误的源文件,不会生成任何.
o文件,也不会写入任何可执行程序文件.
2.
2.
2命令行文件命名约定在命令行上出现的文件名后附加的后缀扩展名决定了编译器处理文件的方式.
如果文件名的后缀扩展名不是下面列出的任意一个扩展名,或者没有扩展名,则这些文件名将传递给链接程序.
表2–1由Fortran编译器识别的文件名后缀后缀语言操作.
fFortran77或Fortran95固定格式编译Fortran源文件,将目标文件放在当前目录中;目标文件的缺省名称是源文件的名称,但具有.
o后缀.
.
f95.
f90Fortran95自由格式执行与.
f相同的操作.
f03Fortran2003自由格式执行与.
f相同的操作.
forFortran77或Fortran95固定格式执行与.
f相同的操作.
.
FFortran77或Fortran95固定格式在编译前,将Fortran(或C)预处理程序应用于Fortran77源文件.
2.
2调用编译器第2章使用SolarisStudioFortran23表2–1由Fortran编译器识别的文件名后缀(续)后缀语言操作.
F95.
F90Fortran95自由格式在Fortran编译Fortran95自由格式源文件前,将Fortran(或C)预处理程序应用于该文件.
.
F03Fortran2003自由格式与.
F95相同.
s汇编程序使用汇编程序汇编源文件.
.
S汇编程序在对汇编程序源文件进行汇编之前,将C预处理程序应用于该文件.
.
il内联扩展处理内联扩展的模板文件.
编译器将使用模板来扩展选定例程的内联调用.
(模板文件是特殊的汇编程序文件;请参见inline(1)手册页.
).
o目标文件将目标文件传递到链接程序.
.
a、.
so、.
so.
n库将库名称传递给链接程序.
.
a文件是静态库,.
so和.
so.
n文件是动态库.
Fortran95自由格式在第135页中的"4.
1源语言功能"中进行说明.
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或.
F03扩展名的文件调用该预处理程序.
fpp的源代码可从NetlibWeb站点获得:http://www.
netlib.
org/fortran/有关标准UnixC语言预处理程序的信息,请参见cpp(1).
对于Fortran源文件,建议使用fpp而不是cpp.
2.
2调用编译器OracleSolarisStudio12.
2:Fortran用户指南2010年9月242.
2.
5分别编译和链接您可以在不同的步骤中编译和链接.
-c选项编译源文件并生成.
o目标文件,但不会创建可执行文件.
如果不使用-c选项,则编译器将调用链接程序.
如果通过这种方式将编译和链接步骤分开,那么就不必只为了修复一个文件而重新执行完整的编译,如以下示例所示:使用单独的步骤来编译一个文件,并将其与其他文件链接在一起:demo%f95-cfile1.
f(Makenewobjectfile)demo%f95-oprgrmfile1.
ofile2.
ofile3.
o(Makeexecutablefile)请确保链接步骤列出了生成完整程序所需的全部目标文件.
如果在此步骤中缺少任何目标文件,则链接将失败,并显示未定义的外部引用错误(缺少例程).
2.
2.
6一致编译和链接每当分步完成编译和链接时,确保编译和链接选项的一致选择至关重要.
在使用选项编译程序的任何部分时,必须使用相同的选项进行链接.
另外,许多选项要求使用该选项编译所有源文件,包括链接步骤.
第3章中的选项描述指明了此类选项.
示例:用-fast编译sbr.
f,编译C例程,然后分步进行链接:demo%f95-c-fastsbr.
fdemo%cc-c-fastsimm.
cdemo%f95-fastsbr.
osimm.
olinkstep;passes-fasttothelinker2.
2.
7无法识别的命令行参数编译器无法识别的任何命令行参数都将解释为可能是链接程序选项、目标程序文件名或库名称.
基本区别是:无法识别的选项(带有-)会生成警告.
无法识别的非选项(不带-)不生成警告.
但是,这些非选项将被传递给链接程序,如果链接程序无法识别它们,它们将生成链接程序错误消息.
例如:demo%f95-bitmove.
f1,则优化器可以解开循环n次.
如果实际解开了任何循环,那么可执行文件会变大.
有关详细信息,请参见《Fortran编程指南》中有关性能与优化的章节.
示例—解开循环两次:!
$PRAGMASUNUNROLL=22.
3指令第2章使用SolarisStudioFortran292.
3.
1.
4WEAK指令WEAK指令定义一个符号,其优先级比以前定义的相同符号要低.
此pragma主要用于源文件中以创建库.
如果链接程序无法解析弱符号,它并不生成错误消息.
!
$PRAGMAWEAK(name1[=name2])WEAK(name1)将name1定义为弱符号.
如果链接程序没有找到name1的定义,它不会生成错误消息.
WEAK(name1=name2)将name1定义为弱符号以及name2的别名.
如果程序调用name1,但没有对其进行定义,那么链接程序将使用库中的定义.
但是,如果程序定义了自己的name1版本,那么将采用程序的定义,而不是使用库中name1的弱全局定义.
如果程序直接调用name2,则将使用库中的定义;重复的name2定义将导致错误.
有关更多信息,请参见Solaris《链接程序和库指南》.
2.
3.
1.
5OPT指令OPT指令要求您在!
$PRAGMA后面指定SUN.
OPT指令设置子程序的优化级别,这将覆盖编译命令行中指定的级别.
该指令必须紧挨在目标子程序前面出现,并且仅应用于该子程序.
例如:!
$PRAGMASUNOPT=2SUBROUTINEsmart(a,b,c,d,e).
.
.
etc在使用指定-O4的f95命令编译以上内容时,该指令将覆盖此级别,并以-O2级别编译子例程.
除非该例程后面另有一个指令,否则下一个子程序将以-O4级别编译.
还必须使用-xmaxopt[=n]选项编译例程以便识别该指令.
此编译器选项为PRAGMAOPT指令指定最大的优化值:如果PRAGMAOPT指定的优化级别大于-xmaxopt级别,则使用-xmaxopt级别.
2.
3.
1.
6PIPELOOP[=n]指令PIPELOOP=n指令要求您在!
$PRAGMA后面指定SUN.
此指令必须紧挨在DO循环前面出现.
n是正整数常量或零,它向优化器断言循环迭代之间是否存在依赖性.
值零表示循环中没有迭代间的(即循环带有的)依赖性,优化器可以对循环执行任意管道处理.
正值n表示,循环的第I次迭代与第(I-n)次迭代之间存在依赖性,每次最多只能对n个迭代进行管道处理.
(如果未指定n,则缺省为0)CWeknowthatthevalueofKissuchthattherecanbenoCcross-iterationdependencies(E.
g.
K>N)!
$PRAGMASUNPIPELOOP=02.
3指令OracleSolarisStudio12.
2:Fortran用户指南2010年9月30DOI=1,NA(I)=A(I+K)+D(I)B(I)=B(I)+A(I)ENDDO有关优化的更多信息,请参见《Fortran编程指南》.
2.
3.
1.
7PREFETCH指令-xprefetch选项标志(第119页中的"3.
4.
161–xprefetch[=a[,a]]")可启用一组PREFETCH指令,这些指令指示编译器在支持预取的处理器上为指定的数据元素生成预取指令.

!
$PRAGMASUN_PREFETCH_READ_ONCE(name)!
$PRAGMASUN_PREFETCH_READ_MANY(name)!
$PRAGMASUN_PREFETCH_WRITE_ONCE(name)!
$PRAGMASUN_PREFETCH_WRITE_MANY(name)有关预取指令的详细信息,另请参见《C用户指南》或《SPARCArchitectureManual,Version9》.
2.
3.
1.
8ASSUME指令ASSUME指令向编译器提供有关程序中某些点的条件的提示.
这些断言可以帮助编译器设定其优化策略.
程序员也可以在执行过程中使用这些指令检查程序的有效性.
ASSUME有两种格式.
"点断言"ASSUME的语法是:!
$PRAGMAASSUME(expression[,probability])另外,"范围断言"ASSUME的语法是:!
$PRAGMABEGINASSUME[expression[,probability)blockofstatements!
$PRAGMAENDASSUME请使用点断言格式来声明编译器可在程序中的该点采用的条件.
而使用范围断言格式来声明在语句封闭范围内有效的条件.
范围断言中的BEGIN和END对必须正确嵌套.
必需的expression是一个布尔表达式,该表达式可在程序中的该点求值,并且其中不包含用户定义的运算符或函数调用(下面列出的除外).
可选的probability值是一个介于0.
0和1.
0之间的实数或者是整数0或1,它给出表达式为真的可能性.
probability的值为0.
0(或0)意味着永远不会为真;值为1.
0(或1)则意味着始终为真.
如果没有指定,则认为表达式很有可能为真,但并不一定为真.
probability为0或1以外其他值的断言是非必然断言.
类似地,probability正好为0或1的断言是必然断言.
例如,如果程序员知道DO循环的长度始终大于10,000,则为编译器提供该提示可使之生成更好的代码.
通常,以下循环在使用ASSUMEpragma时比不使用时运行得要快.
2.
3指令第2章使用SolarisStudioFortran31!
$PRAGMABEGINASSUME(__tripcount().
GE.
10000,1)!
!
abigloopdoi=j,na(i)=a(j)+1enddo!
$PRAGMAENDASSUME有两个内部函数专用于ASSUME指令的表达式子句.
(请注意,它们的名称前面有两个下划线.
)__branchexp()用于紧挨在分支转移语句(带有布尔控制表达式)前面的点断言.
它与控制分支转移语句的布尔表达式生成相同的结果.
__tripcount()生成紧跟在指令后面的或指令所包含的循环的行程计数.
在用于点断言时,指令后面的语句必须位于DO的第一行.
在用于范围断言时,它应用于最外层的封闭循环.
在将来的版本中,特殊内部函数的列表可能会扩展.
可与-xassume_control编译器选项结合使用.
(请参见第93页中的"3.
4.
111–xassume_control[=keywords]")例如,在使用-xassume_control=check进行编译时,如果行程计数变为小于10,000,则上述示例将生成一条警告.
如果使用-xassume_control=retrospective进行编译,则在程序终止时会生成一个摘要报告,指出所有断言是真还是假.
有关-xassume_control的详细信息,请参见f95手册页.
另一个示例:!
$PRAGMAASSUME(__tripcount.
GT.
0,1)doi=n0,nx如果使用-xassume_control=check编译上述示例,则在由于行程计数为零或负数而没有执行循环时,将会发出一条运行时警告.
2.
3.
2并行化指令并行化指令显式地请求编译器尝试并行处理该指令后面的DO循环或代码区域.
其语法与一般指令不同.
只有在使用-openmp选项进行编译时才能识别并行化指令.
有关Fortran并行化的详细信息,请参见《OpenMPAPI用户指南》和《Fortran编程指南》.
Fortran编译器支持OpenMP3.
0共享内存并行化模型.
传统的Sun和Cray并行化指令现已过时,不应再使用它们.
2.
3.
2.
1OpenMP并行化指令Fortran编译器将OpenMPFortran共享内存多处理API识别为首选的并行编程模型.
该API是由OpenMP体系结构审查委员会(http://www.
openmp.
org)指定的.
2.
3指令OracleSolarisStudio12.
2:Fortran用户指南2010年9月32要启用OpenMP指令,您必须使用命令行选项-xopenmp进行编译.
(请参见第116页中的"3.
4.
153–xopenmp[={parallel|noopt|none}]".
)有关f95接受的OpenMP指令的更多信息,请参见《OpenMPAPI用户指南》.
2.
3.
2.
2传统的Sun/Cray并行化指令注–传统的Sun和Cray风格的并行化指令现已过时.
首选使用OpenMP并行化API.
有关如何从传统的Sun/Cray指令迁移到OpenMP模型的信息,请参见《OpenMPAPI用户指南》.
2.
3.
3IVDEP指令!
DIR$IVDEP指令指示编译器忽略其在循环中找到的部分或全部对数组引用的循环附带依赖性,使编译器能够在其他循环之间执行各种循环优化,例如微向量化、分布、软件流水化,否则这些优化将无法实现.
当用户知道这些依赖性无关紧要或者实际上永远不会发生时,可以使用该指令.
例如:DOI=1,NA(V(I))=A(V(I))+C(I)ENDDO在此循环中,存在几处对A(V(I))的循环附带依赖性,因为V(I)可能会将重复值传递给索引A,对循环重新排序可能会产生不同的结果.
但如果已知V仅包含不同的值,则可以安全地对循环进行重新排序,并且可以使用IVDEP指令来实现优化.
可以使用—xivdep编译器选项(请参见第109页中的"3.
4.
133–xivdep[=p]")来禁用或确定IVDEP指令的解释.
IVDEP指令的某些传统解释仅能断言不存在向后循环附带依赖性.
Fortran编译器的缺省值是—xivdep=loop,表示IVDEP指令断言不存在假定的循环依赖性.
下面的示例解释向后依赖性与向前依赖性.
doi=1,n!
BACKWARDLOOP-CARRIEDDEPENDENCE.
.
.
=a(i-1)!
S1a(i)S2enddodoi=1,n!
FORWARDLOOP-CARRIEDDEPENDENCEa(i)S3.
.
.
=a(i-1)!
S4enddo2.
3指令第2章使用SolarisStudioFortran33第一个循环有一个从S2到S1的向后循环附带依赖性,第二个循环中有一个从S3到S4的向前循环附带依赖性.
由于第二个循环只有一个向前依赖性,因此可以安全地进行分布和/或微向量化,而第一个循环则不能.
下面是使用缺省值-xivdep=loop的情况下使用IVDEP的示例:integertargeta(n)integer,pointer::p(:),q(:)!
DIR$IVDEPdoi=1,np(i)=q(i)a(i)=a(i-1)enddop(i)与q(i)之间以及p(i)与a(*)之间的假定依赖性将被忽略,而a(i)与a(i-1)之间的显式依赖性则不被忽略.
该循环可分割为两个循环,所生成的p(i)=q(i)循环可以实现微向量化.
IVDEP指令应用于紧随其后的DO循环.
在指令与循环之间不允许有其他代码.
!
DIR$IVDEP也可以应用于数组赋值语句FORALL或WHERE结构.
如果特定的循环存在多个指令(例如IVDEP和UNROLL),编译器会尽可能服从所有指令.
2.
4库接口和system.
incFortran编译器提供一个include文件system.
inc,它为大多数非内在库例程定义了接口.
请声明此include文件以确保所调用函数及其参数的类型得到正确的设置,尤其是在使用-xtypemap更改了缺省数据类型时.
例如,以下命令可能会生成一个运算异常,原因是没有显式地设置函数getpid()的类型:integer(4)mypidmypid=getpid()print*,mypidgetpid()例程返回一个整数值,但如果没有为该函数声明显式类型,则编译器认为它返回一个实数值.
此值将进一步转换为整数,这很有可能会导致浮点错误.

要纠正这种错误,您应该显式地设置所调用的getuid()及类似函数的类型:integer(4)mypid,getpidmypid=getpid()print*,mypid您可以使用-Xlist(全局程序检查)选项诊断此类问题.
Fortraninclude文件'system.
inc'为这些例程提供了显式接口定义.
include'system.
inc'integer(4)mypid2.
4库接口和system.
incOracleSolarisStudio12.
2:Fortran用户指南2010年9月34mypid=getpid()print*,mypid通过在调用Fortran库中例程的程序单元中包含system.
inc,可以自动定义接口,并帮助编译器诊断类型不匹配的问题.
(有关更多信息,请参见《Fortran库参考》.
)2.
5编译器用法提示下面几节提供了一些高效使用Fortran编译器的建议方法.
下一章中给出了完整的编译器选项参考.
2.
5.
1确定硬件平台某些编译器标志允许用户使用一组特定的硬件平台选项来调节代码的生成.
编译器的-dryrun选项可用来确定本机处理程序:%f95-dryrun-xtarget=native###commandlinefilesandoptions(expanded):###-dryrun-xarch=sparcvis2-xcache=64/32/4:1024/64/4-xchip=ultra3i%f95-dryrun-xtarget=native###commandlinefilesandoptions(expanded):###-dryrun-xarch=sse2a-xcache=64/64/2:1024/64/16-xchip=opteron2.
5.
2使用环境变量可通过设置FFLAGS或OPTIONS变量来指定选项.
可以在命令行中显式地使用FFLAGS或OPTIONS.
在使用make的隐式编译规则时,make程序会自动使用FFLAGS.
示例:设置FFLAGS:(CShell)demo%setenvFFLAGS'-fast-Xlist'示例:显式地使用FFLAGS:demo%f95$FFLAGSany.
f在使用make时,如果按上述方式设置了FFLAGS变量,而且makefile的编译规则是隐式的(即没有显式的编译器命令行),则调用make的编译效果与以下命令相当:f95-fast-Xlistfiles…make是一个功能非常强大的程序开发工具,可以方便地将其用于所有的Sun编译器.
请参见make(1)手册页以及《Fortran编程指南》中的"程序开发"一章.
2.
5编译器用法提示第2章使用SolarisStudioFortran35注–make使用的缺省隐式规则可能无法识别具有.
f95和.
mod(模块文件)扩展名的文件.
有关详细信息,请参见《Fortran编程指南》和Fortran自述文件.
2.
5.
3内存大小编译可能需要使用大量内存.
这取决于选定的优化级别以及所编译文件的大小和复杂性.
如果优化器内存不足,它将尝试通过在较低的优化级别上重试当前过程来进行恢复,并以命令行上-On选项指定的原始级别继续执行后续例程.
运行编译器的处理器应该至少具有64兆字节内存;建议使用256兆字节内存.
此外还应该分配足够的交换空间.
最低为200MB;建议为300MB.
内存使用情况取决于每个过程的大小、优化级别、为虚拟内存设置的限制、磁盘交换文件的大小以及各种其他参数.
在编译包含多个例程的单个源文件时,可能会出现编译器内存或交换空间不足的情况.
如果编译器内存不足,请尝试降低优化级别,或者使用fsplit(1)将多例程的源文件分成多个文件,使每个文件包含一个例程.
2.
5.
3.
1交换空间限制Solaris操作系统命令swap-s显示可用的交换空间.
请参见swap(1M).
示例:使用swap命令:demo%swap-stotal:40236kbytesallocated+7280kreserved=47516kused,1058708kavailableTodeterminetheactualrealmemory:demo%/usr/sbin/dmesg|grepmemmem=655360K(0x28000000)availmem=6024765442.
5.
3.
2增加交换空间使用mkfile(1M)和swap(1M)可增加工作站上交换空间的大小.
您必须成为超级用户才能执行此操作.
mkfile创建一个特定大小的文件,而swap-a将该文件添加到系统交换空间中:demo#mkfile-v90m/home/swapfile/home/swapfile94317840bytesdemo#/usr/sbin/swap-a/home/swapfile2.
5编译器用法提示OracleSolarisStudio12.
2:Fortran用户指南2010年9月362.
5.
3.
3虚拟内存的控制以-O3或更高的优化级别编译非常大的例程时,可能需要额外的内存,这可能会降低编译时性能.
您可以通过限制单个进程的可用虚拟内存量来控制这种情况.

在shshell中,请使用ulimit命令.
请参见sh(1).
示例:将虚拟内存限定为16MB:demo$ulimit-d16000在cshshell中,请使用limit命令.
请参见csh(1).
示例:将虚拟内存限定在16MB以内:demo%limitdatasize16M这些命令行的每一个命令行都会使优化器在数据空间达到16MB时尝试恢复.
此限制值不能大于系统的总可用交换空间,实际上,在进行较大的编译时,此限制值必须足够小才能保证正常地使用系统.
请确保没有任何编译占用一半以上的空间.

示例:对于32M的交换空间,请使用以下命令:在shshell中:demo$ulimit-d1600在cshshell中:demo%limitdatasize16M最佳设置取决于所请求的优化等级以及可用的实际内存量和虚拟内存量.

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

3.
2选项语法典型的编译器选项格式为:表3–1选项语法语法格式示例–flag–g–flagvalue–Dnostep–flag=value–xunroll=4–flagvalue–ooutfile3第3章39在说明各个选项时使用以下印刷约定:表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括号、管道符和省略号是在选项描述中使用的元字符,它们不是选项本身的一部分.

选项的一些常规准则如下:–lx是用于与库libx.
a链接的选项.
将-lx放在文件名列表之后以确保搜索顺序库,始终是较为安全之举.
通常,按从左向右的顺序处理编译器选项,允许选择性地覆盖宏选项(包括其他选项的选项).
此规则不适用于链接程序选项.
但是,当某些选项(例如-I、-L和-R)在同一命令行上重复出现时,这些选项将累加值,而不是覆盖前面的值.

在可选选项列表(例如-xhasc[={yes|no}])中,所列的第一个选项是出现在命令行上的选项标志不带值时所假定的值.
例如,-xhasc与-xhasc=yes等效.
源文件、目标文件和库按它们在命令行上出现的顺序编译并链接.
3.
3选项摘要在本节中,为了便于参考,将按功能对编译器选项进行分组.
有关详细信息,请参见以下几节中相应页面上的内容.
请注意,并非所有选项在SPARC和x64/x86平台上都可用.
有关可用性的说明,请查看详细的参考部分.
下表按功能汇总f95编译器选项.
该表不包括已过时的和传统的选项标志.
某些标志用于多个目的,因此出现多次.
3.
3选项摘要OracleSolarisStudio12.
2:Fortran用户指南2010年9月40表3–3按功能分组的编译器选项功能选项标志编译模式:仅编译;不生成可执行文件-c显示由驱动程序生成的命令,但不进行编译-dryrun支持Fortran77扩展和兼容性-f77保留在编译期间所创建的临时文件.
-keeptmp指定要将已编译的.
mod模块文件写入的路径-moddir=path指定要编写的目标文件、库文件或可执行文件的名称-ofilename进行编译并只生成汇编代码-S将符号表与可执行文件分离-s禁止编译器消息(错误消息除外)-silent定义临时文件所在目录的路径-temp=path显示每个编译阶段占用的时间-time显示编译器的版本号及其阶段-V冗余消息-v指定非标准别名情况-xalias=list使用多个处理器进行编译-xjobs=n已编译的代码:对于外部名称,增加/删除尾随下划线-ext_names=x内联指定的用户函数-inline=list与编译位置无关的代码-KPIC/-kpic内联某些数学库例程-libmilSTOP将整数状态值返回给shell-stop_status[=yn]指定代码地址空间-xcode=x启用预取指令.
-xprefetch[=x]指定可选寄存器的使用-xregs=x指定缺省数据映射-xtypemap=x数据对齐:3.
3选项摘要第3章Fortran编译器选项41表3–3按功能分组的编译器选项(续)功能选项标志指定对齐COMMON块中的数据-aligncommon[=n]强制对齐COMMON块数据以允许双字获取/存储-dalign强制所有数据按8字节边界对齐-dbl_align_all按8字节边界对齐COMMON块数据-f指定内存对齐和行为-xmemalign[=ab]调试:启用运行时下标范围检查-C为使用dbx调试而进行编译-g标志未声明变量的使用-u检查!
$PRAGMAASSUME断言-xassume_control=check检查在运行时栈是否溢出-xcheck=stkovf启用运行时任务普通检查-xcommonchk为性能分析器进行编译-xF生成交叉引用列表-Xlistx在没有目标文件的情况下启用调试-xs诊断:标志非标准扩展名的使用-ansi禁止显示指定的警告消息-erroff=与错误消息一起显示错误标记名称-errtags显示编译器选项的摘要-flags、-help显示编译器的版本号及其阶段-V冗余消息-v冗余的并行化消息-vpara显示/禁止警告消息-wn显示编译器自述文件-xhelp=readme许可:显示许可证服务器信息-xlicinfo链接和库:3.
3选项摘要OracleSolarisStudio12.
2:Fortran用户指南2010年9月42表3–3按功能分组的编译器选项(续)功能选项标志允许/要求动态/静态库-Bx只允许动态/静态库链接-dy、-dn生成动态(共享对象)库-G为动态库指定名称-hname将目录增加到库搜索路径-Lpath与库libname.
a或libname.
so链接-lname不将库搜索路径生成到可执行文件中.
-norunpath将运行时库搜索路径生成到可执行文件中-Rpath禁用递增链接程序ild-xildoff与优化的数学库链接-xlibmopt与Sun性能库链接-xlic_lib=sunperf链接编辑器选项-zx在不重定位的情况下生成纯库-ztext数字和浮点:使用非标准浮点首选项-fnonstd选择非标准浮点-fns启用输入过程中的运行时浮点溢出-fpover选择IEEE浮点舍入模式-fpround=r选择浮点优化级别-fsimple=n选择浮点捕获模式-ftrap=t指定用于格式化输入/输出的舍入方法-iorounding=mode将单精度常数提升为双精度常量-r8const启用区间运算并设置相应的浮点环境(包括-xinterval)-xia[=e]启用区间运算扩展-xinterval[=e]优化与性能:分析循环以了解数据依赖性-depend使用所选的选项进行优化-fast指定优化级别-On3.
3选项摘要第3章Fortran编译器选项43表3–3按功能分组的编译器选项(续)功能选项标志填充数据布局以便高效使用高速缓存-pad[=p]在内存栈上分配局部变量-stackvar启用循环解开-unroll[=m]启用跨源文件的优化-xcrossfile[=n]调用过程间优化传递-xipo[=n]为#pragmaOPT设置最高优化级别-xmaxopt[=n]针对编译后优化进行编译-xbinopt=prepare启用/调整编译器生成的预取指令-xprefetch=list控制预取指令的自动生成-xprefetch_level=n启用性能分析数据的生成或使用-xprofile=p断言不会出现基于内存的陷阱-xsafe=mem不执行增加代码大小的优化-xspace自动生成对向量库函数的调用-xvector[=yn]并行化:启用DO循环的自动并行化-autopar显示循环的并行化信息-loopinfo为手动编码的多线程编程进行编译-mt接受OpenMPAPI指令并设置相应的环境-xopenmp[=keyword]识别具有自动并行化的循环中的约简操作-reduction冗余的并行化消息-vpara源代码:定义预处理程序符号-Dname[=val]未定义预处理程序符号-Uname接受扩展(132个字符)源行-e将预处理程序应用于.
F和/或.
F90及.
F95文件,但不进行编译-F接受Fortran95固定格式输入-fixed使用fpp预处理程序对所有源文件进行预处理-fpp3.
3选项摘要OracleSolarisStudio12.
2:Fortran用户指南2010年9月44表3–3按功能分组的编译器选项(续)功能选项标志接受Fortran95自由格式输入-free将目录添加到include文件搜索路径-Ipath将目录添加到模块搜索路径-Mpath区分大小写-U在实际参数中将霍尔瑞斯常数视为字符-xhasc={yes|no}选择要使用的预处理程序(cpp或fpp)-xpp[={fpp|cpp}]允许递归子程序调用-xrecursive目标平台:指定内存模型(32位或64位).
-m32|—m64为优化器指定目标平台指令集-xarch=a为优化器指定目标高速缓存属性-xcache=a为优化器指定目标处理器-xchip=a为优化器指定目标平台-xtarget=a3.
3.
1常用选项编译器有许多可通过可选命令行参数选择的功能.
下面的简要列表列出了一些常用选项,让您一睹为快.
表3–4常用选项操作选项调试-在例程之间进行全局程序检查以确保参数、通用块等的一致性.
–Xlist调试-生成其他用于启用dbx和调试的符号表信息.
–g性能-调用优化器以生成运行速度更快的程序.
–O[n]性能-使用一组预先确定的选项,为本机平台生成高效的编译时和运行时.
–fast动态(–Bdynamic)或静态(–Bstatic)库绑定.
–Bx仅编译-禁止链接;为每个源文件生成一个.
o文件.
–c输出文件-将可执行输出文件命名为nm而不是a.
out.
–onm源代码-编译固定格式的Fortran源代码.
-fixed3.
3选项摘要第3章Fortran编译器选项453.
3.
2宏标志某些选项标志是可扩展为由其他标志组成的特定集合的宏.
之所以提供这些选项标志,是为了便于指定通常一起用来选择某项功能的多个选项.
表3–5宏选项标志选项标志扩展-dalign-xmemalign=8s-aligncommon=16-f-aligncommon=16-fast有关完整的当前扩展,请参见—fast说明.
-fnonstd-fns-ftrap=common-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.
3.
3向后兼容性和传统选项提供以下选项的目的是为了与早期发行版的编译器和某些Fortran传统功能实现向后兼容.
表3–6向后兼容性选项操作选项通过ENTRY语句保留实际参数.
-arg=local允许为常量参数赋值.
–copyargs在调用参数列表中将霍尔瑞斯常数视为字符或无类型.
-xhasc[={yes|no}]支持Fortran77扩展和约定-f77非标准运算—允许非标准运算.
–fnonstd为主机系统优化性能.
–nativeDO循环—使用单程DO循环.
–onetrip允许存在传统的别名情况-xalias=keywords建议在生成可移植的Fortran程序时不要使用这些选项标志.
3.
3选项摘要OracleSolarisStudio12.
2:Fortran用户指南2010年9月463.
3.
4已过时的选项标志下面的选项被认为是已过时的,不应使用它们.
在编译器的以后发行版本中可能会删除这些选项.
表3–7过时的f95选项选项标志等效于-a-xprofile=tcov-cg89-xtarget=ss2-cg92-xtarget=ss1000-native-xtarget=native-noqueue许可证排队.
不再需要.
-p分析.
使用-pg或性能分析器-pic-xcode=pic13-PIC-xcode=pic32-sb忽略.
-sbfast忽略.
-silent忽略.
-xarch={v7,v8,v8a}使用—m323.
4选项参考本节介绍所有f95编译器命令行选项标志,包括各种风险、限制、警告、交互、示例和其他详细信息.
除非另行指明,否则每个选项在SPARC和x64/x86平台上都有效.
仅在SPARC平台上有效的选项标志标有(SPARC).
仅在x64/x86平台上有效的选项标志标有(x86).
标有(已过时)的选项标志已过时,不应使用.
在许多情况下,它们已经被其他应该使用的选项或标志取代.
3.
4.
1–aligncommon[={1|2|4|8|16}]指定通用块和标准数字序列类型中数据的对齐.
此值表示通用块和标准数值序列类型中数据元素的最大对齐(以字节为单位).

3.
4选项参考第3章Fortran编译器选项47注–标准数值序列类型是包含SEQUENCE语句以及唯一的缺省组件数据类型(INTEGER、REAL、DOUBLEPRECISION和COMPLEX,不带KIND=或*size)的派生类型.
任何其他类型(如REAL*8)将使类型成为非标准类型.
例如,-aligncommon=4会将自然对齐方式为4字节或大于4字节的数据元素与4字节边界对齐.
该选项不影响自然对齐方式小于指定大小的数据.
如果不使用-aligncommon,则编译器会将通用块和数值序列类型中的元素与(最多)4字节边界对齐.
如果指定不带值的-aligncommon,则缺省值为1-所有的通用块和数值序列类型元素都与字节边界对齐(元素之间无填充).
在未启用64位的平台上,-aligncommon=16恢复为-aligncommon=8.
不要将-aligncommon=1与-xmemalign一起使用,因为这些声明会发生冲突,在某些平台和配置上可能会引发段故障.
如果在SPARC平台上使用-aligncommon=1,可能会因未对齐而导致总线错误,需要使用适当的-xmemalign选项值.
根据具体的应用程序,-xmemalign=1s、-xmemalign=4i或-xmemalign=8i会在避免段故障的同时提供最佳性能.
另请参见-xmemalign3.
4.
2–ansi标识许多非标准扩展.
如果在源代码中使用非标准Fortran扩展,则会发出警告消息.
3.
4.
3–arg=local通过ENTRY语句保留实际参数.
在使用此选项编译具有替换入口点的子程序时,f95将使用复制/恢复功能保留哑元参数和实际参数之间的关联.
提供此选项的目的是与传统的Fortran77程序兼容.
依赖此选项的代码是非标准的.
3.
4.
4–autopar启用自动循环并行化.
3.
4选项参考OracleSolarisStudio12.
2:Fortran用户指南2010年9月48查找相应的循环并使之并行化,以便在多个处理器上并行运行.
分析循环以了解迭代间的数据依赖性并重构循环.
如果未将优化级别指定为-O3或更高,则会将其自动提升到-O3.
在使用任何并行化选项(包括-autopar)时,也要指定-stackvar选项.
当使用-autopar时,-stackvar选项可提供更好的性能,因为它可允许优化器为并行检测其他机会.
有关如何为主线程栈和从线程栈设置大小的信息,请参见-stackvar选项描述.
如果程序已经包含对libthread线程库的显式调用,请避免使用-autopar.
请参见第71页中的"3.
4.
56-mt[={yes|no}]"中的注释.
-autopar选项不适用于单处理器系统,而且已编译代码的运行速度通常会更慢.
要在多线程环境中运行已并行化的程序,必须在执行之前设置PARALLEL(或OMP_NUM_THREADS)环境变量.
这会将程序可以创建的最大线程数通知给运行时系统.
缺省值为1.
通常会将PARALLEL或OMP_NUM_THREADS变量设置为目标平台上可用的虚拟处理器数,该值可使用Solarispsrinfo(1)命令确定.
如果使用-autopar并在同一步骤中进行编译和链接,则会自动链接多线程库和线程安全的Fortran运行时库.
如果使用-autopar并在不同的步骤中进行编译和链接,则还必须使用-autopar进行链接以确保链接相应的库.
—reduction选项与—autopar一起使用也可能会很有用.
有关并行化的更多信息,请参阅《Fortran编程指南》.
有关用户控制的显式并行化,则使用OpenMP指令和—xopenmp选项.
3.
4.
5–B{static|dynamic}首选动态库链接或要求静态库链接.
在-B与dynamic或static之间不允许有空格.
如果未指定-B,则缺省值为-Bdynamic.
–Bdynamic:首选动态链接(尝试找到共享库).
–Bstatic:需要静态链接(无共享库).
另请注意:如果指定static,但是链接程序仅找到动态库,则不链接该库,同时发出警告"未找到库".
如果指定dynamic,但链接程序仅找到静态版本的库,则链接该库,并且不发出警告.
您可以在命令行上切换-Bstatic和-Bdynamic.
也就是说,通过在命令行上指定-Bstatic和-Bdynamic任意多次,可以静态链接一些库并动态链接一些库,如下所示:f95prog.
f-Bdynamic-lwells-Bstatic-lsurface3.
4选项参考第3章Fortran编译器选项49这些是加载器和链接程序选项.
在不同的步骤中使用编译命令的-Bx选项进行编译和链接时,将要求在链接步骤中也使用该选项.
不能在命令行上同时指定-Bdynamic和-dn,因为-dn禁用动态库的链接.
在64位Solaris环境中,许多系统库仅作为共享动态库提供,其中包括libm.
so和libc.
so(不提供libm.
a和libc.
a).
这意味着,在64位Solaris环境中,-Bstatic和-dn可能会导致链接错误.
这些情况下应用程序必须与动态库链接.
不推荐同时使用静态Fortran运行时系统库和动态Fortran运行时系统库,因为这会导致链接程序错误或无提示的数据损坏.
始终保持同最新的共享动态Fortran运行时系统库的链接.
有关静态库和动态库的更多信息,请参见《Fortran编程指南》.
3.
4.
6–C检查数组引用以查找超出范围的下标并在运行时检查一致性.
如果数组下标超过所声明的大小,可能会导致意外结果(包括段故障).
-C选项检查源代码中和执行过程中可能的数组下标违规.
-C还添加了对数组语法表达式中数组一致性的运行时检查.
指定-C可能会使可执行文件更大.
如果使用-C选项,则会将数组下标违规视为错误.
如果在编译过程中检测到源代码中存在数组下标范围违规,则会将它视为编译错误.
如果只能在运行时确定数组下标违规,则编译器会将范围检查代码生成到可执行程序中.
这可能导致执行时间增加.
因此,应该在开发和调试程序时启用完全数组下标检查,然后重新编译最后产生的可执行程序,而不必进行下标检查.
3.
4.
7–c仅编译;生成目标.
o文件,但禁止链接.
针对每个源文件编译.
o文件.
如果仅编译一个源文件,则可以使用-o选项来指定所写入的.
o文件的名称.
3.
4.
8–copyargs允许为常量参数赋值.
允许子程序更改其为常量的哑元参数.
提供此选项只是为了允许编译和执行传统代码而不出现运行时错误.
3.
4选项参考OracleSolarisStudio12.
2:Fortran用户指南2010年9月50在不使用-copyargs的情况下,如果将常量参数传递给子例程,然后在子例程内尝试更改该常量,则运行将终止.
在使用-copyargs的情况下,如果将常量参数传递给子例程,然后在子例程内更改该常量,则运行不一定终止.
当然,除非使用-copyargs进行编译,否则终止的代码是不符合Fortran标准的.
此外,这样的代码通常是不可预知的.
3.
4.
9–Dname[=def]为预处理程序定义符号name.
此选项仅适用于.
F、.
F90、.
F95和.
F03源文件.
–Dname=def将name定义为具有值def–Dname将name定义为1在命令行上,此选项将定义name,就如同#definename[=def]已经出现在源文件中.
如果未指定=def,则名称name的值定义为1.
宏符号name会传递到预处理程序fpp(或cpp-请参见-xpp选项)进行扩展.
预定义的宏符号具有两个前导下划线.
Fortran语法可能不支持这些宏的实际值-它们只应出现在fpp或cpp预处理程序指令中.
(请注意两个前导下划线.
)产品版本是在__SUNPRO_F90和__SUNPRO_F95中预定义的(用十六进制表示).
例如,对于SolarisStudio12发行版,__SUNPRO_F95为0x850.
以下宏是在相应系统上预定义的:__sparc、__unix、__sun、__SVR4、__i386、__SunOS_5_6、__SunOS_5_7、__SunOS_5_8、__SunOS_5_9和__SunOS_5_10例如,值__sparc是在SPARC系统上定义的.
以下预定义值不带下划线,但是在以后的发行版中可能会删除这些值:sparc、unix和sun.
在SPARCV9系统上,还定义了__sparcv9宏.
在64位x86系统上,定义了宏__amd64和__x86_64.
使用详细选项(-v)进行编译可查看由编译器创建的定义.
您可以在类似如下的预处理程序条件中使用这些值:#ifdef__sparc3.
4选项参考第3章Fortran编译器选项51缺省情况下,f95使用fpp(1)预处理程序.
与C预处理程序cpp(1)一样,fpp会扩展源代码宏并允许对代码进行条件编译.
与cpp不同的是,fpp能够识别Fortran语法,并作为首选的Fortran预处理程序.
使用-xpp=cpp标志可以强制编译器明确使用cpp而非fpp.
3.
4.
10–dalign对齐COMMON块和标准数值序列类型,并生成速度更快的多字装入/存储.
此标志可更改COMMON块、数值序列类型和EQUIVALENCE类中的数据布局,并使编译器能够为该数据生成速度更快的多字装入/存储.
数据布局效果与-f标志的效果相同:COMMON块和EQUIVALENCE类中的双精度和四精度数据在内存中根据其"自然"对齐方式(即,与8字节边界对齐)进行布局;如果在64位环境中使用-m64进行编译,则四精度数据与16字节边界对齐.
缺省情况下,按4字节边界对齐COMMON块中的数据.
还允许编译器采用自然对齐方式并生成速度更快的多字装入/存储以引用数据.
在SPARC处理器上,如果结合使用-dalign和-xtypemap=real:64,double:64,integer:64,还会导致64位整数变量进行双字对齐.
注–-dalign可能导致数据以非标准方式对齐,从而使EQUIVALENCE或COMMON中的变量出现问题,并可能在需要-dalign的情况下使程序变为不可移植.
-dalign是一个宏,它等效于:-xmemalign=8s-aligncommon=16(在SPARC平台上)-aligncommon=8(在32位x86平台上)-aligncommon=16(在64位x86平台上).
如果使用-dalign编译某个子程序,请使用-dalign编译该程序的所有子程序.
此选项包含在-fast选项中.
请注意,因为-dalign调用-aligncommon,所以此选项还影响标准数值序列类型.
请参见第47页中的"3.
4.
1–aligncommon[={1|2|4|8|16}]"3.
4.
11–dbl_align_all[={yes|no}]强制与8字节边界对齐数据.
值为yes或no.
如果是yes,所有变量将与8字节边界对齐.
缺省值为-dbl_align_all=no.
3.
4选项参考OracleSolarisStudio12.
2:Fortran用户指南2010年9月52在64位环境中使用-m64进行编译时,此标志会使四精度数据与16字节边界对齐.
此标志不改变COMMON块或用户定义结构中的数据的布局.
与-dalign一起使用可以提高多字装入/存储的效率.
如果使用了此标志,则所有例程都必须使用此标志进行编译.
3.
4.
12–depend[={yes|no}]分析循环以了解迭代间数据的依赖性并重构循环.
循环重构包括循环互换、循环熔合和标量替换.
如果不指定-depend,则缺省值为-depend=es.
如果指定-depend但不指定参数,则编译器采用-depend=es.
要关闭依赖性分析,应使用-depend=no进行编译.
-xdepend与-depend等效.
3.
4.
13–dn禁止动态库.
请参见第53页中的"3.
4.
15–d{y|n}".
3.
4.
14–dryrun显示由f95命令行驱动程序生成的命令,但不进行编译.
此选项在调试时非常有用,它显示编译器为执行编译将调用的命令和子选项.

3.
4.
15–d{y|n}允许或禁止对整个可执行文件使用动态库.
–dy:值为Yes,允许使用动态/共享库.
–dn:值为No,不允许使用动态/共享库.
如果未指定,则缺省值为-dy.
与-Bx不同,此选项适用于整个可执行文件,并且只需在命令行上出现一次.
–dy|–dn是加载器和链接程序选项.
如果使用这些选项在不同的步骤中编译和链接,则在链接步骤中需要相同选项.
3.
4选项参考第3章Fortran编译器选项53在64位Solaris环境中,许多系统库不只是作为共享动态库提供,其中包括libm.
so和libc.
so(不提供libm.
a和libc.
a).
这意味着,-dn和-Bstatic可能会导致在64位Solaris环境、32位x86Solaris平台以及所有32位Solaris平台(从Solaris10发行版开始)中出现链接错误.
这些情况下应用程序必须与动态库链接.
3.
4.
16–e接受扩展长度的输入源代码行.
扩展的源代码行中最多可以包含132个字符.
编译器会在右侧用结尾空白一直填充到第132列.
如果在使用-e进行编译时使用续行,则不跨行拆分字符常量;否则,可能会在常量中插入不必要的空白.
3.
4.
17–erroff[={%all|%none|taglist}]禁止由标记名称列出的警告消息.
禁止显示在标记名称的逗号分隔列表taglist中指定的警告消息.
如果选项值为%all,则禁止显示所有警告,这在效果上等同于-w选项.
如果选项值为%none,则不禁止显示任何警告.
不带参数的—erroff与—erroff=%all等效.
示例:f95-erroff=WDECL_LOCAL_NOTUSEDink.
f使用-errtags选项可查看与警告消息关联的标记名称.
3.
4.
18–errtags[={yes|no}]与每个警告消息一起显示消息标记.
如果使用-errtags=yes,编译器的内部错误标记名称将与警告消息一起显示.
-errtags本身与-errtags=yes等效.
缺省情况下不显示标记(-errtags=no).
demo%f95-errtagsink.
fink.
f:MAIN:"ink.
f",line11:Warning:localvariable"i"neverused(WDECL_LOCAL_NOTUSED)3.
4.
19–errwarn[={%all|%none|taglist}]将警告消息视为错误.
3.
4选项参考OracleSolarisStudio12.
2:Fortran用户指南2010年9月54taglist指定应视为错误的警告消息对应的标记名称的逗号分隔列表.
如果使用%all,则将所有警告视为错误.
如果使用%none,则不将任何警告视为错误.
另请参见-errtags.
3.
4.
20–ext_names=e创建带有或不带尾随下划线的外部名称.
e必须是plain、underscores或fsecond-underscore.
缺省为underscores.
–ext_names=plain:不增加结尾下划线.
–ext_names=underscores:增加结尾下划线.
–ext_names=fsecond-underscore:在包含一个下划线的外部名称上附加两个下划线,在不包含下划线的外部名称上附加一个下划线.
外部名称是子例程、函数、块数据子程序或标记通用块的名称.
此选项既影响例程入口点的名称,又影响调用例程时使用的名称.
使用此标志可允许Fortran例程调用其他编程语言例程(以及被后者调用).
提供fsecond-underscore是为了与gfortran兼容.
3.
4.
21–F调用源文件预处理程序,但不进行编译.
将fpp预处理程序应用于命令行上列出的.
F、.
F90、.
F95和.
F03源文件,并将处理结果写入同名文件,但将该文件的扩展名更改为.
f(或者是.
f95或.
f03),不进行编译.
示例:f95-Fsource.
F将已处理的源文件写入source.
ffpp是Fortran的缺省预处理程序.
通过指定-xpp=cpp,可以改为选择C预处理程序cpp.
3.
4.
22–f对齐COMMON块中的双精度和四精度数据.
-f是一个传统的选项标志,它与-aligncommon=16等效.
首选使用-aligncommon.
3.
4选项参考第3章Fortran编译器选项55缺省情况下,按4字节边界对齐COMMON块中的数据.
-f将COMMON块和EQUIVALENCE类中双精度和四精度数据的数据布局更改为在内存中根据"自然"对齐方式(即,与8字节边界对齐)放置;如果在64位环境中使用-m64进行编译,则四精度数据与16字节边界对齐.
注–-f可能导致数据以非标准方式对齐,从而使EQUIVALENCE或COMMON中的变量出现问题,并可能在需要-f的情况下使程序变为不可移植.
如果使用-f编译程序的任何部分,则要求使用-f编译该程序的所有子程序.
此选项本身并不允许编译器针对双精度和四精度数据生成速度更快的多字获取/存储指令.
-dalign选项执行此操作并调用-f.
相对于以前的-f,请优先使用-dalign.
请参见第52页中的"3.
4.
10–dalign".
由于-dalign是-fast选项的一部分,因此-f也是它的一部分.
3.
4.
23–f77[=list]选择FORTRAN77兼容性模式.
此选项标志用于将传统的FORTRAN77源程序(包括包含SunWorkShopf77编译器所接受的语言扩展的源程序)移植到f95Fortran编译器.
(不再存在单独的FORTRAN77编译器.
)list是从下面可能的关键字中选择的逗号分隔列表:关键字含义%all启用所有Fortran77兼容性功能.
%none禁用所有Fortran77兼容性功能.
backslash在字符串中,将反斜线作为转义序列接受.
input允许f77接受的输入格式.
intrinsics将内部函数的识别限制为仅识别Fortran77内部函数.
logical接受Fortran77的逻辑变量使用,如:-将整数值赋予逻辑变量;-允许在逻辑条件语句中使用算术表达式,用.
NE.
0表示.
TRUE.
;-允许关系运算符.
EQ.
和.
NE.
与逻辑操作数一起使用misc允许多种f77Fortran77扩展.
output生成f77样式的格式化输出,包括列表式输出和NAMELIST输出.
subscript允许将非整数表达式作为数组下标.
3.
4选项参考OracleSolarisStudio12.
2:Fortran用户指南2010年9月56关键字含义tab启用f77样式的制表符格式,包括无限制的源代码行长度.
对于长度小于72个字符的源代码行,将不增加空白填充.
对于所有关键字,通过在前面加上no%可禁用相应功能,如下所示:-f77=%all,no%backslash如果未指定-f77,则缺省为-f77=%none.
使用不带列表的-f77与指定-f77=%all是等效的.
异常捕获与-f77:指定-f77并不会更改Fortran捕获模式(即-ftrap=common).
在运算异常捕获方面,f95与Fortran77编译器的行为不同.
Fortran77编译器允许在出现运算异常之后继续执行.
使用-f77进行编译还会使程序在退出时调用ieee_retrospective,以报告可能出现的任何运算异常.
在命令行上,在-f77选项标志之后指定-ftrap=%none可以模拟原来的Fortran77行为.
有关f77兼容性以及从Fortran77迁移到Fortran95的完整信息,请参见第159页中的"4.
12混合语言".
有关如何处理可能导致错误结果的非标准编程症状,另请参见-xalias标志.
3.
4.
24–fast选择优化执行性能的选项.
注–该选项定义为其他选项的特殊选择集,它会随版本和编译器的不同而变化.
另外,-fast选择的某些选项并非在所有平台上都可用.
使用-dryrun标志进行编译可查看-fast的扩展.
-fast可为某些基准测试应用程序提供高性能.
但是,对于您的应用程序,选项的特定选择可能是合适的,也可能是不合适的.
使用-fast是编译应用程序以获得最佳性能的良好起点.
但是,仍然可能需要进行其他调整.
如果用-fast编译时程序不能正常运行,请仔细查看组成-fast的各个选项,只调用那些适用于您程序的选项,使程序正常运行.
另请注意,用-fast编译的程序对于一些数据集可能会表现出良好的性能和精确的结果,而对于另一些数据集则不然.
对于那些依赖浮点运算的特殊属性的程序,请避免用-fast进行编译.
由于-fast选择的某些选项具有链接含义,因此,如果在不同的步骤中进行编译和链接,还请务必用-fast进行链接.
3.
4选项参考第3章Fortran编译器选项57–fast会选用以下选项:-xtarget=native硬件目标.
如果打算在编译计算机之外的其他目标计算机上运行程序,请在-fast之后加上代码生成器选项.
例如:f95-fast-xtarget=ultraT2.
.
.
-O5优化级别选项.
-depend选项分析循环的数据依赖性和可能的重构.
-libmil选项,用于系统提供的内联扩展模板.
对于依赖异常处理的C函数,请在-fast之后加上-nolibmil(如-fast-nolibmil).
如果使用了-libmil,则使用errno或matherr(3m)无法检测到异常.
-fsimple=2选项,用于主动浮点优化.
如果要求严格遵循IEEE754标准,则–fsimple=2是不合适的.
请参见第62页中的"3.
4.
35–fsimple[={1|2|0}]".
-dalign选项可为通用块中的双精度和四精度数据生成双字装入和存储.
使用此选项可以在通用块中生成非标准的Fortran数据对齐.
-xlibmopt选项选择优化的数学库例程.
-pad=local在局部变量之间插入填充(如果适用),以提高高速缓存利用率.
(SPARC)-xvector=lib使用向量参数将DO循环内的某些数学库调用变换为对向量化库等效例程的单个调用.
(SPARC)–fns选择非标准浮点运算异常处理和渐进下溢.
请参见第60页中的"3.
4.
29–fns[={yes|no}]".
选择-fround=nearest,因为—xvector和—xlibmopt要求使用该选项.
(Solaris)-ftrap=common用于捕获常见的浮点异常,在f95中处于启用状态.
-nofstore对强制表达式具有结果精度这一行为加以取消.
(x86)在x86平台上,-xregs=frameptr允许编译器将帧指针寄存器用作通用寄存器.
有关详细信息,尤其是在编译混合C、C++和Fortran源代码情况下的详细信息,请参见-xregs=frameptr的描述.
在-fast之后指定-xregs=no%frameptr,帧指针寄存器将不会作为通用寄存器使用.
(x86)可以对此列表进行增减,方法是在-fast选项之后加上其他选项,如下所示:f95-fast-fsimple=1-xnolibmopt.
.
.
它会覆盖-fsimple=2选项,并禁用由-fast选择的-xlibmopt.
由于-fast会调用-dalign、-fns和-fsimple=2,因此用-fast编译的程序会导致非标准浮点运算、非标准数据对齐以及非标准表达式求值顺序.
对于大多数程序来说,这些选择可能是不合适的.
请注意,由-fast标志选择的一组选项会随各个编译器发行版而发生变化.
使用-dryrun调用编译器可显示-fast扩展:3.
4选项参考OracleSolarisStudio12.
2:Fortran用户指南2010年9月58%f95-dryrun-fast|&grep######commandlinefilesandoptions(expanded):###-dryrun-xO5-xarch=sparcvis2-xcache=64/32/4:1024/64/4-xchip=ultra3i-xdepend=yes-xpad=local-xvector=lib-dalign-fsimple=2-fns=yes-ftrap=common-xlibmil-xlibmopt-fround=nearest3.
4.
25–fixed指定固定格式的Fortran95源输入文件.
无论采用哪个文件扩展名,命令行上的所有源文件都将被解释为固定格式文件.
通常,f95仅将.
f文件解释为固定格式文件,而将.
f95解释为自由格式文件.
3.
4.
26–flags与-help等效.
3.
4.
27–fma={none|fused}(SPARC)启用自动生成浮点乘加指令.
-fma=none禁用生成这些指令.
-fma=fused允许编译器通过使用浮点乘加指令尝试查找机会来提高代码性能.
缺省值为-fma=none.
编译器生成乘加指令的最低要求为-xarch=sparcfmaf,优化级别至少为-xO2.
如果已生成乘加指令来避免在不支持它们的平台上执行程序,编译器将标记二进制程序.

乘加指令可以免除乘法和加法之间的中间舍入步骤.
因此,如果使用-fma=fused编译,程序可能会生成不同的结果,但精度通常会增加而不是降低.
3.
4.
28–fnonstd按非标准首选项初始化浮点硬件.
此选项是以下选项标志组合的宏:–fns-ftrap=common指定-fnonstd大致等效于Fortran主程序开始处的以下两个调用.
i=ieee_handler("set","common",SIGFPE_ABORT)callnonstandard_arithmetic()nonstandard_arithmetic()例程替代了早期发行版中已过时的abrupt_underflow()例程.
3.
4选项参考第3章Fortran编译器选项59主程序必须使用此选项进行编译才能有效.
使用此选项初始化浮点硬件,以达到下列目的:在出现浮点异常时终止(捕获)该异常.
如果下溢结果将提高速度,而不是生成IEEE标准所要求的次正规数,则将该结果刷新为零.
有关渐进下溢和次正规数的更多信息,请参见-fns.
通过-fnonstd选项,可以针对浮点溢出、被零除和无效运算异常启用硬件陷阱.
这些情况将转换为SIGFPE信号,而且如果程序没有SIGFPE处理程序,它将以转储内存而终止.
有关更多信息,请参见ieee_handler(3m)和ieee_functions(3m)手册页,以及《数值计算指南》和《Fortran编程指南》.
3.
4.
29–fns[={yes|no}]选择非标准浮点模式.
缺省值为标准浮点模式(–fns=no).
(请参见《Fortran编程指南》的"浮点运算"一章.
)可以选择使用=yes或=no,提供了一种在包括-fns的其他宏标志(如-fast)之后切换该标志的方式.
-fns不带值等同于-fns=yes.
此选项标志在程序开始执行时启用非标准浮点模式.
在SPARC平台上,指定非标准浮点模式会禁用"渐进下溢",从而导致将微小的结果刷新为零,而不是生成次正规数.
此外,还会导致次正规操作数在无提示的情况下替换为零.
在那些不支持硬件中的渐进下溢和次正规数的SPARC系统上,使用此选项将显著提高某些程序的性能.
下表中的x不会导致总下溢,当且仅当|x|处于所示范围之一时,x才是一个次正规数:表3–8低于正常的REAL和DOUBLE数据类型范围REAL0.
01建议优化器尝试解开循环n次.
通常,解开循环可提高性能,但会增加可执行文件的大小.
有关此编译器及其他编译器优化的更多信息,请参见《Fortran编程指南》的"性能与优化"一章.
另请参见第29页中的"2.
3.
1.
3UNROLL指令".
3.
4.
100–use=list指定隐式USE模块.
list是模块名称或模块文件名称的逗号分隔列表.
使用-use=module_name进行编译,可将USEmodule_name语句添加到正在编译的每个子程序或模块中.
使用-use=module_file_name进行编译,可为包含在指定文件中的每个模块添加USEmodule_name.
有关Fortran中模块的更多信息,请参见第156页中的"4.
9模块文件".
3.
4.
101–V显示每次编译过程的名称和版本.
此选项在编译器执行时打印每个工作循环的名称和版本.
在与Sun服务工程师讨论问题时,此信息可能非常有用.
3.
4.
102–v详细模式-显示每次编译过程的详细信息.
3.
4选项参考OracleSolarisStudio12.
2:Fortran用户指南2010年9月84与-V一样,此选项在编译器执行时显示每个工作循环的名称,以及驱动程序使用的选项、宏标志扩展和环境变量的详细信息.
3.
4.
103–vax=keywords指定所启用的传统VAXVMSFortran扩展选项.
keywords说明符必须是以下子选项之一或从中选择的子选项的逗号分隔列表.
blank_zero在内部文件上将格式化输入中的空格解释为零.
debug将以字符'D'开头的行解释为正规Fortran语句,而不是像VMSFortran中那样解释为注释.
rsize将无格式的记录大小解释为以字为单位,而不是解释为以字节为单位.
struct_align内存中VAX结构的布局组件,与VMSFortran中一样,没有填充.
注意:这会导致数据无法对齐,为避免此类错误,应与—xmemalign一同使用.
%all启用所有这些VAXVMS功能.
%none禁用所有这些VAXVMS功能.
通过在子选项前面加上no%,可以单独选择或关闭该子选项.
示例:-vax=debug,rsize,no%blank_zero缺省值为-vax=%none.
指定不带任何子选项的-vax等效于-vax=%all.
3.
4.
104–vpara显示详细的并行化消息.
在编译器对那些用指令显式标记为并行化的循环进行分析时,它发出有关所检测到的某些数据依赖性的警告消息;但是仍将对循环进行并行化.
与-xopenmp和OpenMPAPI指令结合使用.
由编译器发出的警告检测到下列情形:OpenMP数据共享属性子句使用不当.
例如,将变量声明为共享,而在OpenMP并行区域中访问该变量会导致数据争用;或者将变量声明为私有,但在并行区域后面使用其在并行区域中的值.
3.
4选项参考第3章Fortran编译器选项85如果在处理所有并行化指令时没有出现任何问题,则不显示警告.
注–SolarisStudio编译器支持OpenMPAPI并行化模型.
因此,传统的C$MIC并行化指令已过时,将被忽略.
有关迁移到OpenMPAPI的信息,请参见《OpenMPAPI用户指南》.
3.
4.
105–w[n]显示或禁止警告消息.
此选项显示或禁止大多数警告消息.
但是,如果一个选项覆盖命令行上先前选项的全部或部分,您确实会收到一条警告消息.
n可以是0、1、2、3或4.
-w0仅显示错误消息.
它等效于-w.
-w1显示错误和警告.
这是不带-w情况下的缺省设置.
-w2显示错误、警告和注意.
-w3显示错误、警告、注意和说明.
-w4显示错误、警告、注意、说明和注释.
3.
4.
106–Xlist[x](仅限Solaris)生成列表并进行全局程序检查(globalprogramchecking,GPC).
使用此选项可查找潜在的编程错误.
它调用额外的编译过程,以便在全局程序中检查子程序调用参数、通用块和参数的一致性.
此选项还生成带行号的源代码列表,包括交叉引用表.
由-Xlist选项发出的错误消息是建议性警告,不会阻止程序的编译和链接.
注–请确保在使用-Xlist进行编译之前,更正源代码中的所有语法错误.
如果运行有语法错误的源代码,可能会产生不可预知的报告.
示例:检查例程之间的一致性:demo%f95-Xlistfil.
f上述示例将以下内容写入输出文件fil.
lst:带行号的源代码列表(缺省)有关例程间不一致性的错误消息(嵌入在列表中)标识符的交叉引用表(缺省)缺省情况下,将列表写入文件name.
lst,其中name采用命令行上列出的第一个源文件.
3.
4选项参考OracleSolarisStudio12.
2:Fortran用户指南2010年9月86许多子选项为操作选择提供了更多灵活性.
它们是由-Xlist主选项的后缀指定的,如下表所示:表3–10–Xlist子选项选项特性–Xlist显示错误、列表和交叉引用表–Xlistc显示调用图和错误–XlistE显示错误–Xlisterr[nnn]禁止错误nnn消息–Xlistf显示错误、列表和交叉引用,但不显示目标文件–Xlisth如果检测到错误,则终止编译–XlistI分析#include和INCLUDE文件以及源文件–XlistL仅显示列表和错误–Xlistln将页面长度设置为n行-XlistMP检查OpenMP指令(SPARC)–Xlistoname将报告文件输出到name,而不是file.
lst–Xlists禁止来自交叉引用表的未引用名称–Xlistvn将检查级别设置为n(1、2、3或4)-缺省值为2–Xlistw[nnn]将输出行的宽度设置为nnn列-缺省值为79–Xlistwar[nnn]禁止警告nnn消息–XlistX显示交叉引用表和错误有关详细信息,请参见《Fortran编程指南》的"程序分析和调试"一章.
此选项在Linux系统上不可用.
3.
4.
107–xaddr32[={yes|no}](仅限x86/x64)-xaddr32=yes编译标志将生成的可执行文件或共享对象限制在32位地址空间.
按此方式编译的可执行文件会导致创建一个限制在32位地址空间的进程.
如果指定了-xaddr32=no,则会生成通常的64位二进制文件.
如果未指定-xaddr32选项,则使用-xaddr32=no.
如果仅指定了-xaddr32,则使用-xaddr32=yes.
3.
4选项参考第3章Fortran编译器选项87此选项仅适用于支持SF1_SUNW_ADDR32软件功能的Solaris平台的-m64编译.
由于Linux内核不支持地址空间限制,此选项在Linux上不可用.
在Linux上将忽略-xaddr32选项.
在链接时,如果有一个目标文件是使用-xaddr32=yes编译的,则整个输出文件均缺省使用-xaddr32=yes进行编译.
限制到32位地址空间的共享对象必须由在受限的32位模式地址空间内执行的进程来加载.
有关详细信息,请参阅《链接程序和库指南》中的SF1_SUNW_ADDR32软件功能定义.
3.
4.
108–xalias[=keywords]指定要由编译器假定的别名程度.
一些非标准编程方法会产生干扰编译器优化策略的情况.
使用过度索引、指针以及将全局或非唯一变量作为子程序参数进行传递,会产生歧义别名情况,从而使代码无法按预期方式运行.
使用-xalias标志可将程序偏离Fortran标准的别名要求的程度通知给编译器.
此标志可能带有关键字列表,也可能不带关键字列表.
keywords列表由逗号分隔,各个关键字指示程序中存在的别名情况.
可以在每个关键字前面加上no%,以指示不存在的别名类型.
别名关键字如下:表3–11-xalias选项关键字关键字含义dummy子程序的哑元参数(形式参数)可以互为别名,也可以作为全局变量的别名.
no%dummy(缺省值).
哑元参数的使用遵循Fortran标准,它们不能互为别名,也不能作为全局变量的别名.
craypointer(缺省值).
Cray指针可以指向任何全局变量或LOC()函数采用其地址的局部变量.
此外,两个Cray指针可能指向同一数据.
这是可以禁止某些优化的安全假定.
no%craypointerCray指针仅指向唯一内存地址,如从malloc()获得的地址.
此外,没有两个Cray指针是指向同一数据的.
此假定允许编译器优化Cray指针引用.
actual编译器将子程序的实际参数视为全局变量.
将参数传递给子程序可能会导致通过Cray指针命名别名.
no%actual(缺省值)传递参数不会导致进一步命名别名.
3.
4选项参考OracleSolarisStudio12.
2:Fortran用户指南2010年9月88表3–11-xalias选项关键字(续)关键字含义overindex对COMMON块中元素的引用可能引用COMMON块或等效组中的任何元素.
如果将COMMON块或等效组中的任何元素作为实际参数传递给子程序,被调用的子程序就可以访问该COMMON块或等效组中的任何元素.
将序列派生类型的变量视为COMMON块,此类变量的元素可以作为该变量其他元素的别名.
可能违反了各数组边界,但除上文所述外,假定引用的数组元素仍然在数组内.
过度索引并未考虑数组语法、WHERE和FORALL语句等因素.
如果在这些构造中出现过度索引,应将它们重写为DO循环.
no%overindex(缺省值)没有违反数组边界.
数组引用没有引用其他变量.
ftnpointer对外部函数的调用可能使Fortran指针指向任何类型、种类或等级的目标变量.
no%ftnpointer(缺省值)Fortran指针遵循标准中的规则.
指定不带列表的-xalias将为不违反Fortran别名规则的大多数程序提供最佳性能,不带列表的-xalias等效于:no%dummy,no%craypointer,no%actual,no%overindex,no%ftnpointer为了提高效率,在使用优化级别-xO3及更高级别进行编译时,应该使用-xalias.
如果未指定-xalias标志,则编译器在缺省情况下假定程序符合Fortran标准(Cray指针除外):no%dummy,craypointer,no%actual,no%overindex,no%ftnpointer有关各种别名情况的示例以及如何使用-xalias指定它们,请参见《Fortran编程指南》的"移植"一章.
3.
4.
109–xannotate[={yes|no}](仅限Solaris)指示编译器创建稍后可用binopt(1)等二进制修改工具进行转换的二进制文件.
深入二进制分析、代码覆盖和内存错误检测工具也可以处理使用此选项生成的二进制文件.
3.
4选项参考第3章Fortran编译器选项89使用-xannotate=no选项可以防止这些工具修改二进制文件.
-xannotate=yes选项必须与-xO1或更高优化级别结合使用才能有效,而且它只在包含新链接程序支持库接口-ld_open()的系统上有效.
如果在不包含此链接程序接口的系统(如Solaris9和Solaris10的早期版本)上使用编译器,则该选项会转换为-xannotate=no而不发出任何提示.
缺省值为-xannotate=yes,但如果不满足上述两种情况,则缺省转换为-xannotate=no.
此选项在Linux系统上不可用.
3.
4.
110–xarch=isa指定指令集体系结构(instructionsetarchitecture,ISA).
-xarch关键字isa接受的体系结构如表3–12所示:表3–12–xarchISA关键字平台有效的-xarch关键字SPARCgeneric,generic64,native,native64,sparc,sparcvis,sparcvis2,sparcvis3,sparcfmaf,v9,v9a,v9bx86generic,native,386,pentium_pro,sse,sse2,amd64,pentium_proa,ssea,sse2a,amd64a,sse3,sse3a,ssse3,sse4_1,sse4_2,amdsse4a请注意,尽管-xarch可以单独使用,但它是–xtarget选项扩展的一部分,并且可用于覆盖由特定-xtarget选项设置的-xarch值.
例如:%f95-xtarget=ultra2-xarch=sparcfmaf.
.
.
会覆盖由-xtarget=ultra2设置的-xarch.
通过只允许指定的指令集,此选项可将编译器生成的代码限定于指定指令集体系结构的指令.
此选项不保证使用任何特定于目标的指令.
如果此选项与优化一起使用,则在指定的体系结构上,适当的选择可以为可执行文件提供良好性能.
如果选择不当,则会导致二进制程序在预定的目标平台上无法执行.

请注意以下事项:使用generic、sparc、sparcvis2、sparcvis3、sparcfmaf、sparcima编译的目标二进制文件(.
o)可以链接,可以在一起执行,但只能在支持所链接的所有指令集的处理器上运行.
使用任何特殊选择时,所生成的可执行文件可能无法在传统体系结构上运行或者运行速度大大降低.
此外,由于在任何这些指令集体系结构中都不会实现四精度(REAL*16和longdouble)浮点指令,因此编译器不会在其生成的代码中使用这些指令.
3.
4选项参考OracleSolarisStudio12.
2:Fortran用户指南2010年9月90未指定-xarch选项时的缺省值为generic.
表3–13提供了有关SPARC平台上每个-xarch关键字的详细信息.
表3–13SPARC平台的-xarch值-xarch=含义(SPARC)generic使用大多数处理器通用的指令集进行编译.
generic64针对大多数的64位平台进行编译.
(仅限Solaris)此选项与-m64-xarch=generic等效,并与早期的发行版兼容.
使用-m64(而非-xarch=generic64)指定64位编译native为了在此系统上获得良好性能而进行编译.
编译器为运行它的当前系统处理器选择适当的设置.
这是-fast选项的缺省值.
native64为了在此系统上获得64位模式下的良好性能而进行编译.
(仅适用于Solaris)此选项与-m64-xarch=native等效,并与早先的发行版兼容.
sparc针对SPARC–V9ISA进行编译.
针对V9ISA进行编译,但不具备可视指令集(VisualInstructionSet,VIS),也不具备特定于其他实现的ISA扩展.
该选项在V9ISA上使编译器生成高性能代码.
sparcvis针对具有UltraSPARC扩展的SPARC–V9ISA进行编译.
针对SPARC-V9加可视指令集(VisualInstructionSet,VIS)版本1.
0进行编译,并具有UltraSPARC扩展.
该选项在UltraSPARC体系结构上使编译器生成高性能代码.
sparcvis2针对具有UltraSPARC-III扩展的SPARC-V9ISA进行编译.
此选项允许编译器在具有UltraSPARCIII扩展的UltraSPARC体系结构以及可视化指令集(VIS)2.
0版上生成目标代码.
sparcvis3针对SPARC-V9ISA的SPARCVIS版本3进行编译.
允许编译器使用SPARC-V9指令集、UltraSPARC扩展(包括可视指令集(VisualInstructionSet,VIS)版本1.
0、UltraSPARC-III扩展(包括可视指令集版本2.
0以及混合乘加指令和可视指令集版本3.
0中的指令.
sparcfmaf针对SPARC-V9ISA的sparcfmaf版本进行编译.
允许编译器使用SPARC-V9指令集,加UltraSPARC扩展(包括可视指令集(VisualInstructionSet,VIS)版本1.
0)、UltraSPARC-III扩展(包括可视指令集(VisualInstructionSet,VIS)版本2.
0)以及面向浮点乘加的SPARC64VI扩展中的指令.
请注意,必须将-xarch=sparcfmaf与-fma=fused以及某些优化级别结合使用,来使编译器尝试寻找机会自动使用乘加指令.
3.
4选项参考第3章Fortran编译器选项91表3–13SPARC平台的-xarch值(续)-xarch=含义(SPARC)sparcima针对SPARC-V9ISA的sparcima版本进行编译.
使编译器可以使用如下指令集内的指令:SPARC-V9指令集、UltraSPARC扩展(包括可视化指令集(VisualInstructionSet,VIS)版本1.
0)、UltraSPARC-III扩展(包括可视化指令集(VisualInstructionSet,VIS)版本2.
0)、SPARC64VI扩展(用于浮点乘加)和SPARC64VII扩展(用于整数乘加).
v9与-m64-xarch=sparc等效使用xarch=v9来获取64位内存模型的传统makefile和脚本仅需使用-m64.
v9a与-m64-xarch=sparcvis等效,并与早前的发行版兼容.
v9b与-m64-xarch=sparcvis2等效,并与早期的发行版兼容.
表3–14详细介绍了x86平台上的每个-xarch关键字.
如果未指定-xarch,x86上的缺省值为generic(或者如果指定了—m64则为generic64).
表3–14x86平台的-xarch值-xarch=含义(x86)generic为了在大多数32位x86平台上获得良好性能而进行编译.
这是缺省值,与-xarch=pentium_pro等效.
generic64为了在大多数64位x86平台上获得良好性能而进行编译.
它与sse2等效.
native为了在此x86体系结构上获得良好性能而进行编译.
使用最佳指令集以便在大多数x86处理器上获得良好性能.
对于每个新发行版,"最佳"指令集的定义可能会有所调整(如果适用).
native64为了在此64位x86体系结构上获得良好性能而进行编译.
386将指令集限制于Intel386/486体系结构.
pentium_pro将指令集限制于PentiumPro体系结构.
pentium_proa将AMD扩展(3DNow!
、3DNow!
扩展和MMX扩展)添加到32位PentiumPro体系结构中.
sse将SSE指令集添加到pentium_pro中.
(参见下面的注释.
)ssea将AMD扩展(3DNow!
、3DNow!
扩展和MMX扩展)添加到32位SSE体系结构中.
sse2将SSE2指令集添加到pentium_pro中.
(参见下面的注释.
)sse2a将AMD扩展(3DNow!
、3DNow!
扩展和MMX扩展)添加到32位SSE2体系结构中.
sse3向SSE2指令集中添加SSE3指令集.
3.
4选项参考OracleSolarisStudio12.
2:Fortran用户指南2010年9月92表3–14x86平台的-xarch值(续)-xarch=含义(x86)amd64在Solaris平台上,这与-m64-xarch=sse2等效使用-xarch=amd64来获取64位内存模型的传统makefile和脚本应使用-m64.
amd64a在Solaris平台上,这与—m64—xarch=sse2a等效.
sse3a将AMD扩展指令(包括3DNow!
)添加到SSE3指令集.
ssse3将SSSE3指令添加到SSE3指令集.
sse4_1将SSE4.
1指令添加到SSSE3指令集.
sse4_2将SSE4.
2指令添加到SSE4.
1指令集.
amdsse4a将SSE4a指令添加到AMD指令集.
3.
4.
110.
1x86/x64平台的特别注意事项:当针对x86Solaris平台进行编译时,有几项重要的注意事项.
使用设置为sse、sse2、sse2a或sse3等的-xarch编译的程序必须在支持这些功能和扩展的平台上运行.
从Solaris94/04开始的操作系统发行版在Pentium4兼容的平台上支持SSE/SSE2.
早期版本的SolarisOS不支持SSE/SSE2.
如果在不同的步骤中进行编译和链接,请始终使用编译器和相同的-xarch设置进行链接,以确保链接正确的启动例程.
x86上的运算结果可能与SPARC上的结果不同,这是由x8680字节浮点寄存器造成的.
为了最大限度减少这些差异,请使用-fstore选项或使用-xarch=sse2进行编译(如果硬件支持SSE2).
从SolarisStudio11和Solaris10OS开始,会对使用这些专用的-xarch硬件标志编译和生成的程序二进制文件进行验证,看其是否在相应的平台上运行.
在Solaris10以前的系统上,不进行任何验证,而是由用户负责确保使用这些标志生成的对象已部署在适当的硬件上.
如果在没有相应功能或指令集扩展的平台上运行使用这些-xarch选项编译的程序,则可能会导致段故障或不正确的结果,并且不显示任何显式警告消息.

此警告还会扩展到采用.
il内联汇编语言函数或__asm()汇编程序代码(使用SSE、SSE2、SSE2a和SSE3指令和扩展)的程序.
3.
4.
111–xassume_control[=keywords]设置参数以控制ASSUMEpragma.
使用此标志可控制编译器对源代码中ASSUMEpragma的处理方式.
3.
4选项参考第3章Fortran编译器选项93ASSUMEpragma为程序员提供了一种断言特殊信息(编译器使用这些特殊信息实现较佳的优化)的方法.
可以使用可能值限定这些断言.
可能值为0或1的断言将被标记为"确定",否则视为不确定.
也可以使用可能性或确定性来断言将要执行的DO循环的行程计数,或断言将要采取的分支.
有关f95编译器可识别的ASSUMEpragma的说明,请参见第31页中的"2.
3.
1.
8ASSUME指令".
-xassume_control选项上的keywords可以是一个子选项关键字,也可以是关键字的逗号分隔列表.
可以识别的关键字子选项如下:optimize在ASSUMEpragma上作出的断言会影响程序的优化.
check编译器生成用于检查标记为"确定"的所有断言是否正确的代码,并在断言被违反时发出运行时消息;如果没有同时指定fatal,则程序继续运行.
fatal与check一起使用时,如果标记为"确定"的断言被违反,则程序将终止.
retrospective[:d]d参数是可选的容差值,它必须是小于1的正实数常量.
缺省值为".
1".
retrospective编译代码以确定所有断言的真假.
那些超出容差值d的值将在程序终止时的输出中列出.
%none忽略所有的ASSUMEpragma.
编译器的缺省值是-xassume_control=optimize这意味着,编译器可识别ASSUMEpragma,而且后者将影响优化,但不进行检查.
如果指定不带参数的-xassume_control,则隐含-xassume_control=check,fatal在这种情况下,编译器接受并检查所有确定的ASSUMEpragma,但是后者不影响优化.
无效的断言将导致程序终止.
3.
4.
112–xautopar与-autopar等效.
3.
4.
113–xbinopt={prepare|off}(SPARC)准备二进制文件以进行编译后优化.
3.
4选项参考OracleSolarisStudio12.
2:Fortran用户指南2010年9月94binopt(1)将启用已编译的二进制文件,供以后进行优化、变换和分析使用.
在生成可执行文件或共享对象时可以使用此选项,但是它必须与-O1或更高优化级别一起使用才有效.
在使用此选项生成时,二进制文件的大小会有所增加,大约增加5%.
如果在不同的步骤中进行编译和链接,则-xbinopt必须既出现在编译步骤中,也出现在链接步骤中.
如果应用程序的源代码并不都是使用-xbinopt编译的,则-xbinopt标志仍应当出现在用于生成程序二进制文件的最终链接步骤中,如下所示:example%f95-0program-xbinopt=preparea.
ob.
oc.
f95只有使用-xbinopt编译的代码才能用binopt(1)优化.
缺省值为-xbinopt=off.
3.
4.
114–xcache=c为优化器定义高速缓存属性.
c必须是以下值之一:genericnatives1/l1/a1[/t1]s1/l1/a1[/t1]:s2/l2/a2[/t2]s1/l1/a1[/t1]:s2/l2/a2[/t2]:s3/l3/a3[/t3]si/li/ai/ti的定义如下:si是i级数据高速缓存的大小(千字节);li是i级数据高速缓存的行大小(字节);ai是i级数据高速缓存的关联性;ti是共享i级高速缓存的硬件线程数(可选).
该选项指定了优化器可以使用的缓存属性,不保证使用每个特定的缓存属性.

尽管此选项可以单独使用,但它是–xtarget选项扩展的一部分;提供它是为了允许覆盖特定-xtarget选项所隐含的-xcache值.
表3–15–xcache值值含义generic定义高速缓存属性,以便在大多数处理器上获得良好性能,而不使性能有较大幅度的降低.
这是缺省值.
3.
4选项参考第3章Fortran编译器选项95表3–15–xcache值(续)值含义native定义高速缓存属性,以便在此主机平台上获得良好性能.
s1/l1/a1[/t1}定义1级高速缓存属性.
s1/l1/a1[/t1}:s2/l2/a2[/t2}定义1级和2级高速缓存属性.
s1/l1/a1[/t1}:s2/l2/a2[/t2}:s3/l3/a3[/t3}定义1级、2级和3级高速缓存属性示例:-xcache=16/32/4:1024/32/1指定以下内容:一个1级高速缓存具有以下属性:16K字节、32字节行大小、4路关联性.
一个2级高速缓存具有以下属性:1024K字节、32字节行大小、直接映射关联性.
3.
4.
115–xcheck=keyword生成特殊的运行时检查和初始化.
keyword必须是以下项之一:keyword(关键字)特性stkovf打开用于检测子程序入口上是否有栈溢出的运行时检查.
如果检测到栈溢出,则将引发SIGSEGV段故障.
no%stkovf禁用用于检测栈溢出的运行时检查.
init_local执行特殊的本地变量初始化.
编译器将局部变量初始化为这样一个值:如果在赋予该值之前程序使用了它,则可能会导致运算异常.
由ALLOCATE语句分配的内存也会以这种方式初始化.
不对模块变量、STATIC和SAVE本地变量及COMMON块中的变量进行初始化.
有关详细信息,请参见《C用户指南》.
no%init_local禁用局部变量初始化.
这是缺省值.
%all打开所有这些运行时检查功能.
%none禁用所有这些运行时检查功能.
3.
4选项参考OracleSolarisStudio12.
2:Fortran用户指南2010年9月96栈溢出(尤其是在栈上分配大数组的多线程应用程序中)可能会在邻近线程栈中导致无提示的数据损坏.
如果怀疑存在栈溢出,请使用-xcheck=stkovf编译所有例程.
但请注意,使用此标志进行编译不保证将检测到所有栈溢出情况,因为它们可能出现在不是使用此标志编译的例程中.
3.
4.
116–xchip=c为优化器指定目标处理器.
此选项通过指定目标处理器来指定计时属性.
尽管此选项可以单独使用,但它是–xtarget选项扩展的一部分;提供它是为了允许覆盖特定-xtarget选项所隐含的-xchip值.
下面是-xchip=c的一些作用:指令调度编译分支的方式在语义等效的两个选择项之间进行选择下面的两个表列出了有效的-xchip处理器名称值:表3–16常用的–xchipSPARC处理器的名称-xchip=为以下项目进行优化generic大多数SPARC处理器.
(这是缺省情况.
)native此主机平台.
sparc64viSPARC64VI处理器.
sparc64viiSPARC64VII处理器.
ultraUltraSPARC处理器.
ultra2UltraSPARCII处理器.
ultra2eUltraSPARCIIe处理器.
ultra2iUltraSPARCIIi处理器.
ultra3UltraSPARCIII处理器.
ultra3cuUltraSPARCIIIcu处理器.
ultra3iUltraSPARCIIIi处理器.
ultra4UltraSPARCIV处理器.
ultra4plusUltraSPARCIV+处理器.
3.
4选项参考第3章Fortran编译器选项97表3–16常用的–xchipSPARC处理器的名称(续)-xchip=为以下项目进行优化ultraT1UltraSPARCT1处理器.
ultraT2UltraSPARCT2处理器.
ultraT2plusUltraSPARCT2+处理器.
ultraT3UltraSPARCT3处理器.
在x86平台上:-xchip值为pentium、pentium_pro、pentium3、pentium4、generic、opteron、core2、penryn、nehalem、amdfam10和native.
3.
4.
117–xcode=keyword(SPARC)指定SPARC平台上的代码地址空间.
keyword的值包括:keyword(关键字)特性abs32生成32位绝对地址.
代码+数据+bss的大小不应超过2**32字节.
下面是32位平台上的缺省值.
abs44生成44位绝对地址.
代码+数据+bss的大小不应超过2**44字节.
仅在64位平台上可用.
abs64生成64位绝对地址.
仅在64位平台上可用.
pic13生成与位置无关的代码(小模型).
与-pic等效.
在32位平台上,最多允许引用2**11个唯一外部符号;在64位平台上,最多允许引用2**10个.
pic32生成与位置无关的代码(大模型).
与-PIC等效.
在32位平台上,最多允许引用2**30个唯一外部符号;在64位平台上,最多允许引用2**29个.
如果不显式指定-xcode=keyword,则缺省值是:–xcode=abs32(32位平台);–xcode=abs44(64位平台).
3.
4.
117.
1与位置无关的代码:在创建动态共享库以提高运行时性能时,可使用-xcode=pic13或-xcode=pic32.
3.
4选项参考OracleSolarisStudio12.
2:Fortran用户指南2010年9月98虽然动态可执行文件内的代码通常绑定到内存中的固定地址,但是可以将与位置无关的代码装入进程地址空间中的任意位置.
在使用与位置无关的代码时,将生成可重定位引用,作为通过全局偏移表的间接引用.
在使用-xcode=pic13或-xcode=pic32进行编译时,由于不要求大量的重定位(这些重定位是与位置有关的代码所强制的),因此会使共享对象中的频繁访问项获益.

全局偏移表的大小不应超过8Kb.
-xcode={pic13|pic32}有两个名义性能成本:使用-xcode=pic13或-xcode=pic32编译的例程在入口处执行几个额外的指令,以便将寄存器设置为指向用于访问共享库的全局变量或静态变量的全局偏移表.

每次访问全局变量或静态变量时,都会涉及到通过全局偏移表进行额外的间接内存引用.
如果编译是使用pic32进行的,则每个全局和静态内存引用都有两个额外指令.
在考虑上述成本时,请记住:由于受到库代码共享的影响,使用-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,请通过使用elfdump-c(有关更多信息,请参见elfdump(1)手册页)来查看全局偏移表(GlobalOffsetTable,GOT)的大小以及节标题sh_name:.
got.
sh_size值是GOT的大小.
如果GOT小于8,192字节,请指定-xcode=pic13,否则指定-xcode=pic32.
通常,应根据以下准则来确定如何使用-xcode:如果要生成可执行文件,则不应该使用-xcode=pic13或-xcode=pic32.
如果是生成仅用于链接到可执行文件的归档库,则不应该使用-xcode=pic13或-xcode=pic32.
如果要生成共享库,请先使用-xcode=pic13,一旦GOT大小超过8,192字节,则使用-xcode=pic32.
如果要生成用于链接到共享库的归档库,则应该使用-xcode=pic32.
在生成动态库时,建议使用-xcode=pic13或pic32(或者-pic或-PIC)选项进行编译.
请参见Solaris《链接程序和库指南》.
3.
4选项参考第3章Fortran编译器选项993.
4.
118–xcommonchk[={yes|no}]启用通用块不一致性的运行时检查.
此选项提供了检测使用TASKCOMMON及并行化的程序中的通用块不一致性的调试检查.
(请参见《Fortran编程指南》的"并行化"一章中有关TASKCOMMON指令的讨论.
)缺省值为-xcommonchk=no;即,用于检测通用块不一致性的运行时检查处于禁用状态,因为它会导致性能降低.
请仅在程序开发和调试过程中使用-xcommonchk=yes,而不应将其用于符合最终产品质量的程序.
使用-xcommonchk=yes进行编译会启用运行时检查.
如果在一个源程序单元中声明为正规通用块的通用块出现在TASKCOMMON指令上的某个其他位置,则程序将停止并显示一条错误消息,指出第一个此类不一致.
不带值的-xcommonchk与-xcommonchk=yes等效.
3.
4.
119–xcrossfile[={1|0}]启用跨源文件的优化和内联.
(已过时)此选项现在已过时,不应再使用.
它与-xipo的作用相同.
应改用xipo.
3.
4.
120–xdebugformat={dwarf|stabs}SolarisStudio编译器正在将调试器信息的格式从"stabs"格式迁移到"dwarf"格式.
此发行版的缺省设置为-xdebugformat=dwarf.
如果要维护读取调试信息的软件,您现在可以选择将工具从stabs格式转换为dwarf格式.
出于移植工具的目的,可以通过此选项来使用新的格式.
除非您要维护读取调试器信息的软件,或者特定工具要求使用这些格式之一的调试器信息,否则不需要使用此选项.
-xdebugformat=stabs生成使用stabs标准格式的调试信息.
-xdebugformat=dwarf生成的调试信息采用dwarf标准格式.
如果未指定-xdebugformat,编译器将假定-xdebugformat=dwarf.
指定此选项而不带参数是不正确的.
此选项影响使用-g选项记录的数据的格式.
该信息的某些格式也可以使用此选项进行控制.
因此,即使不使用-g,-xdebugformat仍会产生影响.
dbx和性能分析软件可识别stabs和dwarf格式,因此使用此选项对其中任一工具的功能并无影响.
3.
4选项参考OracleSolarisStudio12.
2:Fortran用户指南2010年9月100这是过渡性接口,因此会在发行版之间发生更改而不兼容,即使在发行版更新较少时也是如此.
stabs或dwarf格式的任何特定字段或值的详细资料也在不断改进.
使用dwarfdump(1)命令确定已编译目标文件或可执行文件中调试信息的格式.
3.
4.
121–xdepend与-depend等效.
3.
4.
122–xF允许性能分析器进行函数级重组.
允许使用编译器、性能分析器和链接程序重组核心映像中的函数(子程序).
如果使用-xF选项编译,然后运行分析器,则可以生成映射文件,该文件可用于优化函数在内存中的排序(具体取决于一起使用这些函数的方式).
可以通过使用链接程序的-Mmapfile选项,来指示此后用于生成可执行文件的链接使用该映射.
它将可执行文件中的每个函数都放置到单独的部分中.
(f95—Mpath选项还将正规文件传递给链接程序,请参见f95—Mpath选项的说明).
仅当应用程序文本缺页时间占用了应用程序的大部分时间时,对内存中的子程序进行重组才有用.
否则,重组不能提高应用程序的总体性能.
有关分析器的详细信息,请参见ProgramPerformanceAnalysisTools手册.
3.
4.
123–xfilebyteorder=options支持little-endian和big-endian平台之间的文件共享.
该标志标识无格式I/O文件数据的字节顺序和字节对齐.
options必须指定下面的任一组合,但必须至少有一个规范:littlemax_align:specbigmax_align:specnative:specmax_align为目标平台声明最大字节对齐.
允许的值为1、2、4、8和16.
对齐适用于FortranVAX结构和Fortran派生类型,它们使用依赖于平台的对齐来获得与C语言结构的兼容性.
little指定平台上的"little-endian"文件,其中最大字节对齐为max_align.
例如,little4指定32位x86文件;而little16描述64位x86文件.
3.
4选项参考第3章Fortran编译器选项101big指定最大对齐为max_align的"big-endian"文件.
例如,big8描述32位SPARC文件,而big16描述64位SPARC文件.
native指定字节顺序和对齐与编译处理器平台所用的字节顺序和对齐相同的"本机"文件.
假定以下内容为"本机":平台"本机"对应于:32位SPARCbig864位SPARCbig1632位x86little464位x86little16spec必须是包含以下内容的逗号分隔列表:%allunitfilename%all指所有文件和逻辑单元,但用"SCRATCH"打开的或在-xfilebyteorder标志中的其他位置显式命名的文件和逻辑单元除外.
%all只能出现一次.
unit指程序打开的特定Fortran单元号.
filename指程序打开的特定Fortran文件名.
3.
4.
123.
1示例:-xfilebyteorder=little4:1,2,afile.
in,big8:9,bfile.
out,12-xfilebyteorder=little8:%all,big16:203.
4.
123.
2注:此选项不适用于使用STATUS="SCRATCH"打开的文件.
对这些文件执行的I/O操作始终依照本机处理器的字节顺序和字节对齐.
如果命令行中没有出现-xfilebyteorder,则第一个缺省设置为-xfilebyteorder=native:%all.
在此选项中只能声明一次文件名或单元号.
如果在命令行中出现了-xfilebyteorder,则它必须至少带有little、big或native规范之一.
3.
4选项参考OracleSolarisStudio12.
2:Fortran用户指南2010年9月102将此标志没有显式声明的文件假定为本机文件.
例如,如果使用-xfilebyteorder=little4:zork.
out进行编译,就会将zork.
out声明为最大数据对齐为4字节的little-endian32位x86文件.
程序中的所有其他文件均是本机文件.
如果为文件指定的字节顺序与本机处理器相同,但指定了不同的对齐,即使没有进行字节交换,也会使用相应的填充.
例如,如果针对64位x86平台使用-m64进行编译,并指定了-xfilebyteorder=little4:filename,就会出现这种情况.
大端字节序和小端字节序平台之间共享的数据记录中的声明类型必须具有相同的大小.
例如,使用-xtypemap=integer:64,real:64,double:64编译的x86可执行文件不能读取使用-xtypemap=integer:64,real:64,double:128编译的SPARC可执行文件生成的文件,因为二者的缺省双精度数据类型具有不同的大小.
(但请注意,从SolarisStudio12Update1发行版开始,x64处理器上接受double::128.
)如果在一个平台上使用了更改VAX结构内的组件对齐方式的选项(如—vax=struct_align)或更改派生类型内的组件对齐方式的选项(如—aligncommon或—dalign),则在共享同一无格式数据文件(其内容受对齐选项影响)的其他平台上也要使用同一对齐选项.
如果使用整个UNION/MAP数据对象对指定为非本机的文件执行I/O操作,则会导致运行时I/O错误.
只能使用MAP的个别成员(而不能使用包含UNION/MAP的整个VAX记录)对非本机文件执行I/O操作.
3.
4.
124–xhasc[={yes|no}]将霍尔瑞斯常量视为实际参数列表中的字符串.
如果使用-xhasc=yes,则当霍尔瑞斯常量在子例程或函数调用中作为实际参数出现时,编译器将霍尔瑞斯常量视为字符串.
这是缺省值,并且符合Fortran标准.
(编译器生成的实际调用列表包含每个字符串的隐藏字符串长度.
)如果使用-xhasc=no,则霍尔瑞斯常量将被视为子程序调用中的无类型值,并且只将它们的地址放在实际参数列表中.
(传递到子程序的实际调用列表中不会生成字符串长度.
)如果例程调用带有霍尔瑞斯常量的子程序,并且调用的子程序要求参数为INTEGER(或除CHARACTER以外的任意类型),请使用-xhasc=no编译例程.
示例:demo%cathasc.
fcallz(4habcd,'abcdefg')endsubroutinez(i,s)integericharacter*(*)sprint*,"stringlength=",len(s)3.
4选项参考第3章Fortran编译器选项103returnenddemo%f95-ohas0hasc.
fdemo%has0stringlength=4](SPARC)指定未对齐数据访问的最大假定内存对齐和行为.
3.
4选项参考第3章Fortran编译器选项113对于可在编译时确定对齐的内存访问,编译器会为数据对齐生成相应的装入/存储指令序列.
对于不能在编译时确定对齐的内存访问,编译器必须假定一个对齐以生成所需的装入/存储序列.
使用-xmemalign标志,用户可以指定因上述未确定情况编译器要假定的数据最大内存对齐.
它还指定了在运行时发生未对齐内存访问时的错误行为.
指定的值包含两个部分:数值对齐值,以及字母行为标志.
对齐的允许值有:1假定最多1字节对齐.
2假定最多2字节对齐.
4假定最多4字节对齐.
8假定最多8字节对齐.
16假定最多16字节对齐.
访问未对齐数据时错误行为的允许值有:i解释访问并继续执行.
s产生信号SIGBUS.
f在64位平台上,产生信号SIGBUS仅对齐少于或等于4,否则将解释访问并继续执行.
在其他平台上,f与i等效.
如果在不指定-xmemalign的情况下进行编译,缺省值为:针对32位平台的8i针对采用C和C++的64位平台的8s针对采用Fortran的64位平台的8f对于所有平台,-xmemalign不带值显示时的缺省值为1i.
请注意,-xmemalign本身并不强制进行任何特殊的数据对齐.
使用-dalign或-aligncommon可强制进行数据对齐.
此外,只要链接到使用b值i或f编译的目标文件,就必须指定-xmemalign.
-dalign选项是一个宏:-dalign是-xmemalign=8s-aligncommon=16的宏不要将-aligncommon=1与-xmemalign一起使用,因为这些声明会发生冲突,在某些平台和配置上可能会引发段故障.
3.
4选项参考OracleSolarisStudio12.
2:Fortran用户指南2010年9月114有关详细信息,请参见第47页中的"3.
4.
1–aligncommon[={1|2|4|8|16}]".
3.
4.
148–xmodel=[small|kernel|medium](x86)在Solarisx64平台上为共享对象指定数据地址模型.
使用-xmodel选项,编译器可以为Solarisx64平台创建64位共享对象,并且只应为此类对象的编译而指定该选项.
仅当在启用了64位的x86平台("x64")上指定了-m64时,此选项才有效.
small此选项按小型模型生成代码,在该模型中,所执行代码的虚拟地址在链接时已知,且确定所有符号都位于0到231–224-1范围内的虚拟地址中.
kernel为内核模型生成代码,在该模型中,所有符号都定义在264-231到264-224范围内.
medium按中等模型生成代码,在该模型中,不对数据段的符号引用范围进行假定.
文本段的大小和地址的限制与小型代码模型的限制相同.
使用—m64编译含有大量静态数据的应用程序时,可能需要使用—xmodel=medium.
如果未指定-xmodel,编译器将假定-xmodel=small.
如果指定没有参数的-xmodel,将出现错误.
只要您确保所访问的对象位于相应的范围内,就没有必要使用该选项编译所有的例程.
3.
4.
149–xnolib与-nolib等效.
3.
4.
150–xnolibmil与-nolibmil等效.
3.
4.
151–xnolibmopt不使用快速数学库.
与-fast一起使用可以覆盖对优化数学库的链接:f95-fast-xnolibmopt…3.
4选项参考第3章Fortran编译器选项1153.
4.
152–xOn与-On等效.
3.
4.
153–xopenmp[={parallel|noopt|none}]启用通过FortranOpenMP版本3.
0指令进行的显式并行化.
此标志接受以下可选关键字子选项:parallel启用对OpenMPPragma的识别,并相应地并行化程序.
-xopenmp=parallel的最低优化级别是-xO3.
如有必要,编译器将优化级别从较低级别更改为-xO3,并发出警告.
定义预处理程序标记_OPENMP.
自动调用-stackvar.
noopt启用对OpenMPPragma的识别,并相应地并行化程序.
如果优化级别低于-xO3,则编译器不提升它.
如果将优化显式设置为低于-xO3的级别(如-xO2-xopenmp=noopt),则编译器将发出错误.
如果没有使用-xopenmp=noopt指定优化级别,则会识别OpenMPPragma,并相应地对程序进行并行处理,但不进行优化.
定义预处理程序标记_OPENMP.
自动调用-stackvar.
none禁用对OpenMPPragma的识别,并且不更改优化级别.
(这是编译器的缺省值.
)指定的无子选项关键字的-xopenmp与-xopenmp=parallel等效.
请注意,此缺省值在以后的发行版中可能会有所变化.
要使用dbx调试OpenMP程序,请使用-g-xopenmp=noopt进行编译,以便能够在并行区域内设置断点并显示变量的内容.
《OpenMPAPI用户指南》中对OpenMP指令进行了概述.
要在多线程环境中运行已并行化的程序,必须在执行之前设置PARALLEL(或OMP_NUM_THREADS)环境变量.
这会将程序可以创建的最大线程数通知给运行时系统.
缺省值为1.
通常会将PARALLEL或OMP_NUM_THREADS变量设置为目标平台上可用的虚拟处理器数.
3.
4选项参考OracleSolarisStudio12.
2:Fortran用户指南2010年9月116要启用嵌套并行操作,必须将OMP_NESTED环境变量设置为TRUE.
缺省情况下,禁用嵌套并行操作.
有关嵌套并行性的详细信息,请参见《SolarisStudioOpenMPAPI用户指南》.
OpenMP要求预处理程序符号_OPENMP的定义中包含十进制值YYYYMM,其中YYYY和MM是实现所支持的OpenMPFortranAPI版本的年份和月份名称.
对于当前SolarisStudio发行版,该值是200830(表示OpenMP3.
0版).
如果是在不同的步骤中进行编译和链接,还要在链接步骤中指定-xopenmp.
在编译包含OpenMP指令的库时,这一点尤为重要.
3.
4.
154–xpad与-pad等效.
3.
4.
155–xpagesize=size为栈和堆设置首选页面大小.
在SPARC平台上,size值必须是以下值之一:8K、64K、512K、4M、32M、256M、2G、16G或default在x86平台上,size值必须是以下值之一:4K、2M、4M或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接受相同的参数.
可以通过指定-xpagesize=size来为二者设置相同的值,或分别为它们指定不同的值.
3.
4选项参考第3章Fortran编译器选项117使用该标志进行编译,与使用等效选项将LD_PRELOAD环境变量设置为mpss.
so.
1或在启动程序之前使用等效选项运行Solaris9命令ppgsz(1)具有相同的效果.
有关详细信息,请参见Solaris9手册页.
3.
4.
156–xpagesize_heap=size为堆设置首选页面大小.
size值与所述的-xpagesize值相同.
有关详细信息,请参见-xpagesize.
3.
4.
157–xpagesize_stack=size(SPARC)为栈设置首选页面大小.
size值与所述的-xpagesize值相同.
有关详细信息,请参见-xpagesize.
3.
4.
158–xpec[={yes|no}]生成PEC(PortableExecutableCode,可移植执行代码)二进制文件.
PEC二进制文件可用于自动调优系统(AutomaticTuningSystem,ATS).
有关ATS的更多信息,请访问http://cooltools.
sunsource.
net/ats/index.
html.
使用-xpec生成的二进制文件通常要比不使用该选项生成的文件大5到10倍.
缺省值为-xpec=no.
不带参数的-xpec与-xpec=yes等效.
3.
4.
159–xpg与-pg等效.
3.
4选项参考OracleSolarisStudio12.
2:Fortran用户指南2010年9月1183.
4.
160–xpp={fpp|cpp}选择源文件预处理程序.
缺省值为-xpp=fpp.
编译器使用fpp(1)来预处理.
F、.
F95或.
F03源文件.
此预处理程序适用于Fortran.
以前的版本使用标准C预处理程序cpp.
要选择cpp,请指定-xpp=cpp.
3.
4.
161–xprefetch[=a[,a]]在支持预取的体系结构上启用预取指令.
有关FortranPREFETCH指令的说明,请参见第31页中的"2.
3.
1.
7PREFETCH指令".
a必须是以下值之一:auto启用预取指令的自动生成no%auto禁用预取指令的自动生成explicit启用显式预取宏no%explicit禁用显式预取宏latx:factor(SPARC)按指定的因子调整编译器的假定预取到装入的延迟和预取到存储的延迟.
该因子必须是正浮点数或整数.
如果要在较大的SPARC多处理器上运行计算密集的代码,您会发现使用-xprefetch=latx:factor有很多优点.
该选项指示代码生成器按照指定的因子调节在预取及其相关的装入或存储之间的缺省延迟时间.
预取延迟是从执行预取指令到所预取的数据在高速缓存中可用那一刻之间的硬件延迟.
在确定发出预取指令到发出使用所预取数据的装入或存储指令之间的间隔时,编译器就采用预取延迟值.
注–在预取和装入之间采用的延迟可能与在预取和存储之间采用的延迟不同.
编译器可以在众多计算机与应用程序间调整预取机制,以获得最佳性能.
这种调整并非总能达到最优.
对于占用大量内存的应用程序,尤其是要在大型多处理器上运行的应用程序,可以通过增加预取延迟值来提高性能.
要增加值,请使用大于1的因子.
介于.
5和2.
0之间的值最有可能提供最佳性能.
3.
4选项参考第3章Fortran编译器选项119对于数据集完全位于外部高速缓存中的应用程序,可以通过减小预取延迟值来提高性能.
要减小此值,请使用小于1的因子.
要使用-xprefetch=latx:factor选项,请首先使用接近1.
0的因子值并对应用程序运行性能测试.
然后适当增加或减小该因子,并再次运行性能测试.
继续调整因子并运行性能测试,直到获得最佳性能.
以很小的增量逐渐增加或减小因子时,前几步中不会看到性能差异,之后会突然出现差异,然后再趋于稳定.
yes-xprefetch=yes与-xprefetch=auto,explicit相同no-xprefetch=no与-xprefetch=no%auto,no%explicit相同使用-xprefetch、-xprefetch=auto和-xprefetch=yes时,编译器就可以将预取指令插入到其生成的代码中.
该操作会提高支持预取的体系结构的性能.
3.
4.
161.
1缺省:如果未指定-xprefetch,则采用-xprefetch=auto,explicit.
如果仅指定了-xprefetch,则假定为-xprefetch=auto,explicit.
如果使用-xprefetch或-xprefetch=yes等启用了自动预取,但未指定延迟因子,则假定-xprefetch=latx:1.
0.
3.
4.
161.
2交互:如果使用-xprefetch=explicit,编译器将能够识别以下指令:!
$PRAGMASUN_PREFETCH_READ_ONCE(name)!
$PRAGMASUN_PREFETCH_READ_MANY(name)!
$PRAGMASUN_PREFETCH_WRITE_ONCE(name)!
$PRAGMASUN_PREFETCH_WRITE_MANY(name)-xchip设置影响假定延迟的决定以及latx:factor设置的结果.
仅当在SPARC处理器上启用了自动预取(auto)时,latx:factor子选项才有效.
3.
4.
161.
3警告:显式预取只应在度量支持的特殊环境下使用.
因为编译器可以在众多计算机与应用程序间调整预取机制以获得最佳性能,所以当性能测试指示性能明显提高时,应当只使用-xprefetch=latx:factor.
假定的预取延迟在不同发行版本中是不同的.
因此,无论何时切换到不同的发行版本,强烈建议重新测试延迟因子对性能的影响.
3.
4选项参考OracleSolarisStudio12.
2:Fortran用户指南2010年9月1203.
4.
162–xprefetch_auto_type=indirect_array_access为间接访问的数据数组生成间接预取.
以生成直接内存访问预取的相同方式来生成由选项-xprefetch_level={1|2|3}指定的循环的间接预取.
可添加前缀no%否定声明.
缺省值为-xprefetch_auto_type=no%indirect_array_access.
要求-xprefetch=auto以及优化级别-xO3或更高级别.
诸如-xdepend之类的选项可以影响计算间接预取候选项的主动性,进而影响由于更好的内存别名歧义消除信息而发生的自动间接预取插入的主动性.
3.
4.
163–xprefetch_level={1|2|3}控制预取指令的自动生成.
在以下情况下编译时,此选项才有效:-xprefetch=auto,使用优化级别3或更高.
在支持预取的平台上.
如果未指定-xprefetch_level,则-xprefetch=auto的缺省值为级别2.
预取级别2比级别1产生更多的预取指令机会.
预取级别3比级别2生成更多的预取指令.
在早期的SPARC或x86平台上,预取级别2和3可能不会生效.
3.
4.
164–xprofile=p收集用于配置文件的数据或使用配置文件进行优化.
p必须是collect[:profdir]、use[:profdir]或tcov[:profdir].
此选项可在执行期间收集并保存执行频率数据,然后在后续运行中可以使用该数据来改进性能.
对多线程应用程序来讲,配置文件集合是安全的.
也就是说,对执行自身多任务(-mt)的程序进行文件配置会产生准确的结果.
只有指定-xO2或更高优化级别时,此选项才有效.
如果分别执行编译和链接,则链接步骤和编译步骤中必须都出现同一-xprofile选项.
collect[:profdir]在-xprofile=use时优化器收集并保存执行频率,以供将来使用.
编译器生成可测量语句执行频率的代码.
3.
4选项参考第3章Fortran编译器选项121-xMerge、-ztext和--xprofile=collect不应同时使用.
-xMerge会强制将静态初始化的数据存储到只读存储器中,-ztext禁止在只读存储器中进行依赖于位置的符号重定位,而-xprofile=collect会在可写存储器中生成静态初始化的、依赖于位置的符号重定位.
配置文件目录名profdir(如果指定)是包含已进行文件配置的对象代码的程序或共享库在执行时用来存储配置文件数据的目录的路径名.
如果profdir路径名不是绝对路径,在使用选项-xprofile=use:profdir编译程序时将相对于当前工作目录来解释该路径.
如果未指定配置文件目录名,配置文件数据将存储在名为program.
profile的目录中,其中program是已进行文件配置的主程序的基本名称.
示例[1]:在生成程序所在的同一目录中的myprof.
profile目录中收集和使用配置文件数据:demo:f95-xprofile=collect:myprof.
profile-xO5prog.
f95-oprogdemo:.
/progdemo:f95-xprofile=use:myprof.
profile-xO5prog.
f95-oprog示例[2]:在目录/bench/myprof.
profile中收集配置文件数据,然后在优化级别-xO5的反馈编译中使用收集的配置文件数据:demo:f95-xprofile=collect:/bench/myprof.
profile\-xO5prog.
f95-oprog.
.
.
runprogfrommultiplelocations.
.
demo:f95-xprofile=use:/bench/myprof.
profile\-xO5prog.
f95-oprog可以设置环境变量SUN_PROFDATA和SUN_PROFDATA_DIR控制使用-xprofile=collect编译的程序存储配置文件数据的位置.
如果设置了这两个环境变量,-xprofile=collect数据将写入$SUN_PROFDATA_DIR/$SUN_PROFDATA.
这些环境变量同样控制由tcov写入的配置文件数据文件的路径和名称,如tcov(1)手册页中所述.
如果未设置这些环境变量,配置文件数据就写入当前目录中的目录profdir.
profile,其中profdir是可执行文件的名称或在-xprofile=collect:profdir标志中指定的名称.
如果profdir已在.
profile中结束,-xprofile不会将.
profile附加到profdir中.
如果多次运行程序,那么执行频率数据会累积在profdir.
profile目录中;也就是说,以前执行的输出不会丢失.
如果在不同的步骤中进行编译和链接,应确保使用-xprofile=collect编译的任何目标文件也使用-xprofile=collect进行链接.
3.
4选项参考OracleSolarisStudio12.
2:Fortran用户指南2010年9月122use[:profdir]通过从使用-xprofile=collect[:profdir]编译的代码中收集的执行频率数据来优化在执行已进行文件配置的代码时执行的工作.
profdir是一个目录的路径名,该目录包含运行用-xprofile=collect[:profdir]编译的程序所收集的配置文件数据.
profdir路径名是可选的.
如果未指定profdir,将使用可执行二进制文件的名称.
如果未指定-o,将使用a.
out.
如果未指定profdir,编译器将查找profdir.
profile/feedback或a.
out.
profile/feedback.
例如:demo:f95-xprofile=collect-omyexeprog.
f95demo:f95-xprofile=use:myexe-xO5-omyexeprog.
f95程序是使用以前生成并保存在feedback文件中的执行频率数据优化的,此数据是先前执行用-xprofile=collect编译的程序时写入的.
除了-xprofile选项之外,源文件和其他编译器选项必须与用于编译(该编译过程创建了生成feedback文件的编译程序)的相应选项完全相同.
编译器的相同版本必须同时用于collect生成和use生成.
如果用-xprofile=collect:profdir编译,则必须将相同的配置文件目录名profdir用在优化编译中:-xprofile=use:profdir.
另请参见-xprofile_ircache,以了解有关加速collect阶段和use阶段之间的编译的说明.
tcov[:profdir]使用tcov(1)校验基本块覆盖率分析的目标文件.
如果指定可选的profdir参数,编译器将在指定位置创建配置文件目录.
该配置文件目录中存储的数据可通过tcov(1)或由编译器通过-xprofile=use:profdir来使用.
如果省略可选的profdir路径名,执行已进行文件配置的程序时将创建配置文件目录.
只能通过tcov(1)使用该配置文件目录中存储的数据.
使用环境变量SUN_PROFDATA和SUN_PROFDATA_DIR可以控制配置文件目录的位置.
如果profdir指定的位置不是绝对路径名,则编译时相对于要将当前的目标文件写入到的目录来解释该位置.
如果为任何目标文件指定了profdir,则必须为同一程序中的所有目标文件指定同一位置.
由profdir指定位置的目录必须在要执行已进行文件配置的程序的所有计算机中都可以访问.
除非不再需要配置文件目录中的内容,否则不应删除该目录,因为除非重新编译,否则编译器存储在其中的数据将无法恢复.
3.
4选项参考第3章Fortran编译器选项123示例[1]:如果用-xprofile=tcov:/test/profdata编译一个或多个程序的目标文件,编译器会创建一个名为/test/profdata.
profile的目录并将其用来存储描述已进行文件配置的目标文件的数据.
该同一目录还可在执行时用来存储与已进行文件配置的目标文件关联的执行数据.
示例[2]:如果名为myprog的程序用-xprofile=tcov编译并在目录/home/joe中执行,将在运行时创建目录/home/joe/myprog.
profile并将其用来存储运行时配置文件数据.
3.
4.
165–xprofile_ircache[=path](SPARC)保存并重用收集阶段和使用配置文件阶段之间的编译数据.
在使用阶段,与-xprofile=collect|use一起使用会重用收集阶段保存的编译数据,从而可以减少编译时间.
如果指定,path将覆盖高速缓存文件的保存位置.
缺省情况下,这些文件会与目标文件保存在同一目录下.
当收集阶段和使用阶段出现在两个不同的位置时,指定路径便十分有用.
典型的命令序列可能是:demo%f95-xO5-xprofile=collect-xprofile_ircachet1.
ct2.
cdemo%a.
outcollectsfeedbackdatademo%f95-xO5-xprofile=use-xprofile_ircachet1.
ct2.
c对于大程序,通过用这种方式保存中间数据,可以显著缩短使用阶段的编译时间.
但这将以显著增加所用的磁盘空间为代价.
3.
4.
166–xprofile_pathmap=collect_prefix:use_prefix(SPARC)设置配置文件数据文件的路径映射.
请将-xprofile_pathmap选项与-xprofile=use选项一起使用.
如果编译器找不到用-xprofile=use编译的目标文件的配置文件数据,请使用-xprofile_pathmap,并且:当前使用-xprofile=use进行编译所用的目录,不是先前使用-xprofile=collect编译时使用的目录.
目标文件会共享配置文件中的公共基名,但可以根据它们在不同目录中的位置互相区分.
3.
4选项参考OracleSolarisStudio12.
2:Fortran用户指南2010年9月124collect-prefix是目录树的UNIX路径名的前缀,该目录树中的目标文件是使用-xprofile=collect编译的.
use-prefix是目录树的UNIX路径名的前缀,该目录树中的目标文件是使用-xprofile=use编译的.
如果指定了-xprofile_pathmap的多个实例,编译器将按照这些实例的出现顺序对其进行处理.
将-xprofile_pathmap实例指定的每个use-prefix与目标文件路径名进行比较,直至找到匹配的use-prefix或发现最后一个指定的use-prefix与目标文件路径名也不匹配.
3.
4.
167–xrecursive允许不带RECURSIVE属性的例程以递归方式调用它们自己.
通常,只有使用RECURSIVE属性定义的子程序才能以递归方式调用它们自己.
使用-xrecursive进行编译时,子程序将可以调用自身,即使它们没有使用RECURSIVE属性进行定义也是如此.
但是,与定义了RECURSIVE的子例程不同,缺省情况下,使用此标志不会导致在栈上分配局部变量.
要使局部变量在子程序的每个递归调用中具有不同的值,还应该使用-stackvar进行编译以便将局部变量放在栈上.
间接递归(例程A调用例程B,而例程B又调用例程A)可在高于-xO2的优化级别上生成不一致的结果.
使用-xrecursive标志进行编译,可以保证使用间接递归的正确性,即使优化级别更高也是如此.
使用-xrecursive进行编译会导致性能下降.
3.
4.
168–xreduction与-reduction等效.
3.
4.
169–xregs=r为生成的代码指定寄存器用法.
r是一个逗号分隔列表,它包含下面的一个或多个子选项:appl、float、frameptr.

用no%作为子选项的前缀会禁用该子选项.
请注意,-xregs子选项仅限于特定的硬件平台.
示例:-xregs=appl,no%float3.
4选项参考第3章Fortran编译器选项125表3–17-xregs子选项值含义appl(SPARC)允许编译器将应用程序寄存器用作临时寄存器来生成代码.
应用程序寄存器是:g2、g3或g4(在32位平台上)g2或g3(在64位平台上)强烈建议使用-xregs=no%appl编译所有系统软件和库.
系统软件(包括共享库)必须为应用程序保留这些寄存器值.
这些值的使用将由编译系统控制,而且在整个应用程序中必须保持一致.
在SPARCABI中,这些寄存器表示为应用程序寄存器.
由于需要更少的装入和存储指令,因此使用这些寄存器可提高性能.
但是,这样使用可能与某些用汇编代码编写的旧库程序冲突.
float(SPARC)允许编译器通过将浮点寄存器用作整数值的临时寄存器来生成代码.
使用浮点值可能会用到与该选项无关的这些寄存器.
如果希望代码没有任何对浮点寄存器的引用,需要使用-xregs=no%float并确保代码不以任何方式使用浮点类型.
frameptr(x86)允许编译器将帧指针寄存器(IA32上为%ebp,AMD64上为%rbp)用作通用寄存器.
缺省值为-xregs=no%frameptr通过-xregs=framptr,编译器可以自由使用帧指针寄存器来提高程序性能.
但是,这可能会限制调试器和性能测量工具的某些功能.
栈跟踪、调试器和性能分析器不能对通过-xregs=frameptr编译的函数生成报告.
如果直接调用或从C或Fortran函数间接调用的C++函数会引发异常,不应该用-xregs=frameptr编译C、Fortran和C++混合代码.
如果使用-fast编译此类混合源代码,请在命令行中的-fast选项后添加-xregs=no%frameptr.
由于64位平台上的可用寄存器更多,因此相对于64位代码相比,使用-xregs=frameptr编译更容易改进32位代码的性能.
如果同时指定了-xpg,编译器会忽略-xregs=frameptr并发出警告.
SPARC缺省值为-xregs=appl,float.
x86缺省值为-xregs=no%frameptr.
-xregs=frameptr包含在-fast的扩展中.
强烈推荐您用-xregs=no%appl,float编译那些用于与应用程序链接的共享库的代码.
至少共享库应该显式说明它如何使用应用程序寄存器,以便与这些库链接的应用程序知道这些寄存器分配.
3.
4选项参考OracleSolarisStudio12.
2:Fortran用户指南2010年9月126例如,在某种全局意义上使用寄存器(例如,使用寄存器指向一些关键数据结构)的应用程序,需要确切地知道其代码未使用-xregs=no%appl编译的某个库如何使用应用程序寄存器,以便安全地与该库链接.
3.
4.
170–xs允许dbx在没有目标(.
o)文件的情况下进行调试.
如果使用-xs,则所有调试信息将复制到可执行文件中.
如果将可执行文件移至另一个目录,则可以使用dbx并忽略目标(.
o)文件.
如果不能保留.
o文件,请使用该选项.
如果不使用-xs,在移动可执行文件的情况下,您必须同时移动源文件和目标(.
o)文件,或者使用dbxpathmap或use命令设置路径.
3.
4.
171–xsafe=mem(SPARC)允许编译器假定未发生违反内存保护的情况.
使用此选项可允许编译器假定未发生基于内存的陷阱.
此选项允许在SPARCV9平台上使用推测装入指令.
仅当与优化级别-xO5及以下-xarch值中的一个一起使用时,此选项才能有效:sparc、sparcvis、sparcvis2或sparcvis3(用于-m32和-m64).
注意–由于在发生诸如地址未对齐或段违规的故障时,无故障装入不会导致陷阱,因此您应该只对不会发生此类故障的程序使用该选项.
因为只有很少的程序会导致基于内存的陷阱,所以您可以安全地将该选项用于大多数程序.
对于显式依赖基于内存的陷阱来处理异常情况的程序,请勿使用该选项.
3.
4.
172–xsb(已过时)与-sb等效.
3.
4.
173–xsbfast(已过时)与-sbfast等效.
3.
4.
174–xspace不执行会增加代码大小的优化.
示例:如果增加代码大小,则不会解开循环或并行化循环.
3.
4选项参考第3章Fortran编译器选项1273.
4.
175–xtarget=t为指令集和优化指定目标平台.
t必须是以下值之一:native、native64、generic、generic64和platform–name.
-xtarget选项允许简便快捷地指定发生在实际平台上的-xarch、-xchip和-xcache组合.
-xtarget的唯一含义在其扩展中.
通过为编译器提供目标计算机硬件的精确描述,某些程序的性能可得到提高.
当程序性能很重要时,目标硬件的正确指定是非常重要的.
在较新的SPARC处理器上运行时,尤其是这样.
不过,对大多数程序和较旧的SPARC处理器来讲,性能的提高微不足道,因此指定generic就足够了.
-xtarget值的实际扩展可能会因发行版的不同而异.
通过使用-dryrun标志,您始终可以确定编译器将使用的扩展:demo%f95-dryrun-xtarget=ultra4plus###commandlinefilesandoptions(expanded):###-dryrun-xarch=sparcvis-xcache=64/32/4/1:2048/64/4/2:32768/64/4/2-xchip=ultra4plus请注意,针对特定名称平台的—xtarget扩展不得与同一平台上的—xtarget=native相同.
3.
4.
175.
1通用平台与本机平台native优化主机平台(32位)的性能.
扩展至—m32—xarch=native—xchip=native—xcache=nativenative64已过时.
改用—xtarget=native—m64.
generic为大多数32位平台获得最佳性能.
这是缺省值并可扩展至:-m32-xarch=generic-xchip=generic-xcache=genericgeneric64已过时.
改用-xtarget=generic-m64.
platform–name获取以下列出的指定平台的最佳性能.
3.
4.
175.
2SPARC平台下表列出了编译器接受的常用系统平台的名称.
3.
4选项参考OracleSolarisStudio12.
2:Fortran用户指南2010年9月128表3–18常用的-xtarget系统平台的扩展-xtarget=platform-name-xarch-xchip-xcachesparc64visparcfmafsparc64vi128/64/2:5120/64/10sparc64viisparcimasparc64vii64/64/2:5120/256/10ultrasparcvisultra16/32/1:512/64/1ultra1/140sparcvisultra16/32/1:512/64/1ultra1/170sparcvisultra16/32/1:512/64/1ultra1/200sparcvisultra16/32/1:512/64/1ultra2sparcvisultra216/32/1:512/64/1ultra2/1170sparcvisultra16/32/1:512/64/1ultra2/1200sparcvisultra16/32/1:1024/64/1ultra2/1300sparcvisultra216/32/1:2048/64/1ultra2/2170sparcvisultra16/32/1:512/64/1ultra2/2200sparcvisultra16/32/1:1024/64/1ultra2/2300sparcvisultra216/32/1:2048/64/1ultra2esparcvisultra2e16/32/1:256/64/4ultra2isparcvisultra2i16/32/1:512/64/1ultra3sparcvis2ultra364/32/4:8192/512/1ultra3cusparcvis2ultra3cu64/32/4:8192/512/2ultra3isparcvis2ultra3i64/32/4:1024/64/4ultra4sparcvis2ultra464/32/4:8192/128/2ultra4plussparcvis2ultra4plus64/32/4/1:2048/64/4/2:32768/64/4/2ultraT1sparcultraT18/16/4/4:3072/64/12/32ultraT2sparcvis2ultraT28/16/4:4096/64/16ultraT2plussparcvis2ultraT2plus8/16/4:4096/64/16ultraT3sparcvis3ultraT38/16/4:6144/64/24-m64标志表示针对启用了64位的平台上的64位SolarisOS进行编译.
如果指定了-xtarget,则-m64必须出现在-xtarget标志之后,如下所示:-xtarget=ultra2.
.
.
-m643.
4选项参考第3章Fortran编译器选项129否则,将使用缺省的32位内存模型.
3.
4.
175.
3X86平台对于x86系统,有效的-xtarget平台名称如下:generic、native、pentium、pentium_pro、pentium3、pentium4、woodcrest、penryn、nehalem、barcelona和opteron.
表3–19-xtarget值(x86平台)-xtarget=-xarch-xchip-xcachegenericgenericgenericgenericopteronsse2opteron64/64/2:1024/64/16pentium386pentiumgenericpentium_propentium_propentium_progenericpentium3ssepentium316/32/4:256/32/4pentium4sse2pentium48/64/4:256/128/8nehalemsse4_2nehalem32/64/8:256/64/8:8192/64/16penrynsse4_1penryn2/64/8:4096/64/16woodcrestssse3core232/64/8:4096/64/16barcelonaamdsse4aamdfam1064/64/2:512/64/16-m64标志表示针对启用了64位的x86平台上的64位SolarisOS进行编译.
例如,使用-xtarget=opteron进行编译是不必要的或不够的.
如果指定了-xtarget,则-m64选项必须出现在-xtarget标志之后,如下所示:-xtarget=opteron-m64否则,编译将为32位x86.
3.
4.
176–xtime与-time等效.
3.
4.
177–xtypemap=spec指定缺省数据映射.
3.
4选项参考OracleSolarisStudio12.
2:Fortran用户指南2010年9月130此选项提供了一种为缺省数据类型指定字节大小的灵活方法.
此选项适用于缺省大小的变量和常量.
规范字符串spec可以包含以下任何或全部项(采用逗号分隔列表形式):real:sizedouble:sizeinteger:size每个平台上允许的组合包括:real:32real:64double:64double:128integer:16integer:32integer:64例如:–xtypemap=real:64,double:64,integer:64可同时将缺省的REAL和DOUBLE映射到8字节.
此选项适用于使用缺省规范(不带显式字节大小)声明的所有变量,例如REALXYZ(生成64位XYZ).
此外,所有的单精度REAL常量将被提升为REAL*8常量.
请注意,INTEGER和LOGICAL的处理方式相同,COMPLEX映射为两个REAL.
此外,DOUBLECOMPLEX将按照DOUBLE的映射方式进行处理.
3.
4.
178–xunroll=n与-unroll=n等效.
3.
4.
179–xvector[=[[no%]lib,[no%]simd,%none]]启用对向量库函数调用的自动生成.
-xvector选项需要-xO3或更高的优化级别.
如果优化级别未指定或低于-xO3,编译将不会继续,同时会发出消息.
在使用-xvector进行编译时,此选项要求使用缺省舍入模式-fround=nearest进行编译.
-xvector=lib(仅适用于Solaris平台),允许编译器将循环内的数学库调用转换为对等效向量数学例程的单个调用(如果能够进行此类转换的话).
此类转换可提高那些循环计数较大的循环的性能.
-xvector=no%lib将禁用此功能.
3.
4选项参考第3章Fortran编译器选项131-xvector=simd指示编译器使用本机x86SSESIMD指令来提高某些循环的性能.
在x86中,缺省情况下以可产生有利结果的优化级别3和更高级别使用流扩展.
可以使用子选项no%simd将其禁用.
仅当目标体系结构中存在流扩展(即目标ISA至少为SSE2)时,编译器才会使用SIMD.
例如,可在现代平台中指定-xtarget=woodcrest、-xarch=generic64、-xarch=sse2、-xarch=sse3或-fast来使用它.
如果目标ISA没有流扩展,子选项将无效.
如果您同时指定了-xvector=simd和-fsimple=2,则可以获得比单独指定-xvector=simd更好的性能.
但是,浮点结果可能会稍有不同,因为-fsimple=2允许对浮点运算重新排序.
在x86平台上的缺省值为-xvector=simd,在SPARC平台上的缺省值为-xvector=%none.
如果指定不带子选项的-xvector,在x86、SPARC(Solaris)和Linux上,编译器将分别采用-xvector=simd,lib、-xvector=lib和-xvector=simd.
在装入步骤中,编译器会包含libmvec库.
如果您在编译时指定了-xvector=lib,则还必须在链接时指定它.
此选项会覆盖以前的实例,因此,-xvector=%none会覆盖以前指定的-xvector=lib.
3.
4.
180–ztext在不重定位的情况下仅生成纯库.
-ztext的一般用途是验证所生成的库是否为纯文本;指令都是与位置无关的代码.
因此,它通常与-G和-pic一起使用.
使用-ztext时,如果ld在text段中找到了不完整的重定位,则不会生成库.
如果它在data段中找到了不完整的重定位,则通常会生成库;数据段是可写入的.
不使用-ztext时,ld会生成库,与有无重定位无关.
如果您不知道目标文件是否是使用-pic生成的,则一种典型用法是利用源文件和目标文件生成库.
示例:利用源文件和目标文件生成库:demo%f95-G-pic-ztext-oMyLib-hMyLiba.
fb.
fx.
oy.
o另一种用法是确认代码是否与位置无关:不带-pic进行编译,但确认是否为纯文本.
示例:确认是否为纯文本-即使不带-pic进行编辑:demo%f95-G-ztext-oMyLib-hMyLiba.
fb.
fx.
oy.
o3.
4选项参考OracleSolarisStudio12.
2:Fortran用户指南2010年9月132选项-ztext和-xprofile=collect不应同时使用.
-ztext会阻止只读存储中与位置有关的符号重定位,而-xprofile=collect会在可写存储中生成静态初始化且与位置有关的符号重定位.
如果使用-ztext进行编译时ld不生成库,则可以在不使用-ztext的情况下重新编译,此时ld将生成库.
使用-ztext生成失败意味着无法对库的一个或多个组件共享,不过,也许能共享某些其他组件.
此时就产生了性能问题,这最好由您-程序员来解决.
3.
4选项参考第3章Fortran编译器选项133134SolarisStudioFortran的功能与差异本附录介绍了标准Fortran与SolarisStudioFortran编译器f95之间的一些主要功能差异.
4.
1源语言功能f95编译器提供标准Fortran的以下源语言功能和扩展.
4.
1.
1续行限制f95允许999个续行(1个初始行和999个续行).
对于固定格式,标准Fortran允许19个续行;对于自由格式,允许39个续行.
4.
1.
2固定格式源代码行在固定格式源代码中,行的长度可以超过72个字符,但忽略第73列以后的任何内容.
标准Fortran95仅允许72个字符长的行.
4.
1.
3制表符格式f95固定格式源代码文本的定义如下:如果第1列至第6列的任一列中有制表符,都会使该行成为制表符格式的源代码行.
制表符前面可以有注释指示符或语句编号.
如果制表符是第一个非空字符,会出现以下情况:如果制表符后面的字符不是非零数字,则制表符后面的文本是初始行.
4第4章135如果第一个制表符后面是非零数字,则该行是续行.
非零数字后面的文本是语句的下一个部分.
对于固定格式,f95的缺省最大行长度是72列;对于自由格式,则为132列.
使用-e编译器选项,可将固定格式源代码中的行扩展到132列.
示例:左侧的制表符格式源代码的处理方式如右侧所示.
!
^IUsesoftabs^ICHARACTER*3A='A'^IINTEGERB=2^IREALC=3.
0^IWRITE(*,9)A,B,C9^IFORMAT(1X,A3,^I1I3,^I2F9.
1)^IEND!
UsesoftabsCHARACTER*3A='A'INTEGERB=2REALC=3.
0WRITE(*,9)A,B,C9FORMAT(1X,A3,1I3,2F9.
1)END在以上示例中,"^I"代表制表符,以"1"和"2"开头的行是续行.
显示此代码的目的在于说明各种制表符情形,而不是提倡任一样式.
f95中的制表符会强制填充剩余的行直到第72列.
如果制表符出现在持续到下一行的字符串中,则可能会引发意外结果:源文件:^Iprint*,"Tabonnextline^I1thiscontinuationlinestartswithatab.
"^Iend运行代码:Tabonnextlinethiscontinuationlinestartswithatab.
此外,对于制表符格式允许使用—f77选项.
4.
1.
4采用的源代码格式f95采用的源代码格式取决于选项、指令和后缀.
具有.
f或.
F后缀的文件采用固定格式.
带.
f90、.
f95、.
F90或.
F95后缀的文件假定采用自由格式.
4.
1源语言功能OracleSolarisStudio12.
2:Fortran用户指南2010年9月136表4–1F95源代码格式命令行选项选项操作-fixed将所有源文件解释为Fortran固定格式-free将所有源文件解释为Fortran自由格式如果使用-free或-fixed选项,则它覆盖文件名后缀.
如果使用!
DIR$FREE或!
DIR$FIXED指令,则它覆盖选项和文件名后缀.
4.
1.
4.
1混合格式允许混合使用某些源代码格式.
在同一个f95命令中,一些源文件可以是固定格式,而另一些源文件可以是自由格式.
在同一个文件中,可以通过使用!
DIR$FREE和!
DIR$FIXED指令将自由格式与固定格式混合使用.
在同一个程序单元中,可以将制表符格式与自由格式或固定格式混合使用.

4.
1.
4.
2大小写缺省情况下,SolarisStudioFortran不区分大小写.
这意味着,变量AbcDeF的处理方式与将其拼写为abcdef时相同.
要让编译器区别处理大写字母和小写字母,请使用-U选项进行编译.
4.
1.
5限制和缺省值一个Fortran程序单元最多可定义65,535个派生类型和16,777,215个不同的常量.
变量和其他对象的名称最多可包含127个字符,标准长度为31个字符.
4.
2数据类型本节介绍Fortran数据类型的功能和扩展.
4.
2.
1布尔类型f95支持布尔类型的常量和表达式.
但是,没有布尔变量或数组,也没有布尔类型语句.
4.
2数据类型第4章SolarisStudioFortran的功能与差异1374.
2.
1.
1控制布尔类型的各种规则对于屏蔽操作,按位逻辑表达式具有布尔结果;它的每个位都是对相应操作数位进行一个或多个逻辑运算的结果.
用于二进制算术运算符和关系运算符:如果一个操作数是布尔型,则在执行运算时不进行转换.
如果两个操作数均是布尔型,则在执行运算时就当它们是整数一样.
用户指定的函数均不能生成布尔结果,但某些(非标准的)内部函数可以.

布尔和逻辑类型具有以下差异:变量、数组和函数可以是逻辑类型,但它们不能是布尔类型.
可以使用LOGICAL语句,但不能使用BOOLEAN语句.
逻辑型的变量、常量或表达式仅有两个值:.
TRUE.
或.
FALSE.
.
布尔型的变量、常量或表达式可以表示任意二进制值.
逻辑型实体在算术表达式、关系表达式或按位逻辑表达式中无效.
布尔型实体在所有3种表达式中都有效.
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).
4.
2数据类型OracleSolarisStudio12.
2:Fortran用户指南2010年9月138数字必须用撇号或引号括起来.
忽略空格.
十六进制数字可以以+或-符号开头.
8个十六进制数字表示一个完整的32位字,等效的二进制数字对应于32位字中每个位的内容.
如果位数不足8个,则该值右对齐,即它表示字最右侧的位:位n至31.
其他位为0.
霍尔瑞斯接受的霍尔瑞斯数据格式为:nH…'…'H"…"HnL…'…'L"…"LnR…'…'R"…"R上面的"…"是字符串,n是字符数.
霍尔瑞斯常量是布尔类型.
如果任何字符常量是按位逻辑表达式,则该表达式的计算结果为霍尔瑞斯型.

霍尔瑞斯常量可以包含1至4个字符.
示例:八进制和十六进制常量.
布尔常量32位字的内部八进制数0B0000000000077740B00000077740X"ABE"00000005276X"-340"37777776300X'123'00000000443X'FFFFFFFFFFFFFFFF'37777777777示例:赋值语句中的八进制和十六进制数.
i=1357Bj=X"28FF"k=X'-5A'4.
2数据类型第4章SolarisStudioFortran的功能与差异139在算术表达式中使用八进制或十六进制常量可产生未定义的结果,并且不会生成语法错误.
4.
2.
1.
3布尔常量的替代上下文f95允许在非DATA语句中使用BOZ常量.
B'bbb'O'ooo'Z'zzz'B"bbb"O"ooo"Z"zzz"如果将它们赋值给实数变量,则不进行类型转换.
标准Fortran只允许在DATA语句中使用它们.
4.
2.
2数值数据类型的缩写大小表示法f95允许在声明语句、函数语句和IMPLICIT语句中使用以下非标准的类型声明格式.
第一列中的格式虽然已被广泛使用,但它们是非标准的Fortran格式.
第二列中的种类数字可能会因供应商不同而异.
表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个字节)4.
2数据类型OracleSolarisStudio12.
2:Fortran用户指南2010年9月140表4–2数值数据类型的大小表示法(续)非标准声明符简短形式含义COMPLEX*32COMPLEX(KIND=16)COMPLEX(16)四精度复数(每个部分16个字节)4.
2.
3数据类型的大小和对齐存储和对齐始终以字节为单位.
可以划分为单字节的值按字节对齐.
类型的大小和对齐取决于各种编译器选项和平台以及变量的声明方式.
COMMON块中的缺省最大对齐位置是4字节边界.
使用特殊选项(如-aligncommon、-f、-dalign、-dbl_align_all、-xmemalign和-xtypemap)进行编译,可以更改缺省的数据对齐和存储分配.
本手册中的缺省描述假定这些选项无效.
《Fortran编程指南》提供了有关某些平台上数据类型和对齐方式特例的其他信息.

下表汇总了缺省的大小和对齐,并忽略类型和选项的其他方面.
表4–3缺省的数据大小和对齐(以字节为单位)Fortran数据类型大小缺省对齐COMMON中的对齐BYTEXCHARACTERXCHARACTER*nX11n111111COMPLEXXCOMPLEX*8XDOUBLECOMPLEXXCOMPLEX*16XCOMPLEX*32X8816163244888/1644444DOUBLEPRECISIONXREALXREAL*4XREAL*8XREAL*16X84481684488/16444444.
2数据类型第4章SolarisStudioFortran的功能与差异141表4–3缺省的数据大小和对齐(以字节为单位)(续)Fortran数据类型大小缺省对齐COMMON中的对齐INTEGERXINTEGER*2XINTEGER*4XINTEGER*8X424842484244LOGICALXLOGICAL*1XLOGICAL*2XLOGICAL*4XLOGICAL*8X412484124841244请注意以下事项:REAL*16和COMPLEX*32:在64位环境(使用-m64进行编译)中,缺省对齐位置是16字节(而非8字节)边界,如表中8/16所示.
该数据类型通常称为四精度.
数组和结构按照其元素或字段对齐.
数组对齐方式与数组元素相同.
结构对齐方式与具有最宽对齐的字段相同.
选项-f或-dalign可强制将所有8、16或32字节数据与8字节边界对齐.
选项-dbl_align_all可使所有数据与8字节边界对齐.
如果程序依赖于这些选项的使用,则可能无法进行移植.
4.
3Cray指针Cray指针是一个变量,其值是另一个实体(称为指针对象)的地址.
f95支持Cray指针;标准Fortran95不支持.
4.
3.
1语法CrayPOINTER语句采用以下格式:POINTER(pointer_name,pointee_name[array_spec]),.
.
.
其中,pointer_name、pointee_name和array_spec如下所示:pointer_name指向相应pointee_name的指针.
pointer_name包含pointee_name的地址.
必须是一个标量变量名称(但不是派生类型).
不能是常量、结构名称、数组或函数.
4.
3Cray指针OracleSolarisStudio12.
2:Fortran用户指南2010年9月142pointee_name指向相应pointer_name的指针对象必须是:变量名、数组声明符或数组名称array_spec如果array_spec存在,则它必须是显形(常量或非常量边界)或者假定大小.
例如,可以声明指向两个指针对象的Cray指针:POINTER(p,b),(q,c)以上示例声明Cray指针p及其指针对象b以及Cray指针q及其指针对象c.
还可以声明指向数组的Cray指针:POINTER(ix,x(n,0:m))以上示例声明Cray指针ix及其指针对象x;并将x声明为nx(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指针类型.
4.
3Cray指针第4章SolarisStudioFortran的功能与差异143在32位处理器中,Cray指针的值占用一个存储单元;在64位处理器中,Cray指针的值占用两个存储单元.
Cray指针可以出现在COMMON列表中,也可以作为哑元参数.
在定义Cray指针的值之前,Cray指针对象没有地址.
如果将数组命名为指针对象,则该数组称为指针对象数组.
其数组声明符可以出现在:单独的类型语句单独的DIMENSION语句中指针语句本身如果数组声明符在子程序中,则维数赋值可以引用: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.
3Cray指针OracleSolarisStudio12.
2:Fortran用户指南2010年9月1444.
3.
7Cray指针的用法可以将Cray指针赋值如下:设置为绝对地址示例:q=0赋值给整数变量、加或减表达式或从整数变量、加或减表达式中赋值示例:p=q+100Cray指针不是整数.
不能将它们赋值给实数变量.
LOC函数(非标准)可用于定义Cray指针.
示例:p=LOC(x)示例:按上述方式使用Cray指针.
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.
.
.
有关以上示例的说明:word64引用绝对地址64的内容blk是占用内存前128个字的数组a是块公用区中长度为1000的数组b跟在a的后面,其长度为nc跟在b的后面a、b和c与pool相关联word64与blk(17)相同,因为Cray指针是字节地址,而且blk的每个整数元素都是4字节长4.
3Cray指针第4章SolarisStudioFortran的功能与差异1454.
4STRUCTURE和UNION(VAXFortran)为帮助迁移用旧版FORTRAN77编写的程序,f95接受VAXFortranSTRUCTURE和UNION语句,它是Fortran95中"派生类型"的前身.
有关语法的详细信息,请参见《FORTRAN77LanguageReference》手册.
STRUCTURE中的字段声明可以是以下内容之一:子结构-另一个STRUCTURE声明或一个先前定义的记录.
UNION声明.
TYPE声明,它可以包含初始值.
具有SEQUENCE属性的派生类型.
(这是f95所特有的.
)与传统f77编译器相同,POINTER语句不能用作域声明.
f95还允许:".
"或"%"均可用作结构域非关联化符号:struct.
field或struct%field.
结构可以出现在格式化I/O语句中.
可以在PARAMETER语句中初始化结构;格式与派生类型初始化相同.
结构可以作为派生类型中的组件,但必须使用SEQUENCE属性声明派生类型.
4.
5无符号整数Fortran编译器接受新的数据类型UNSIGNED作为对该语言的一种扩展.
UNSIGNED接受四个KIND参数值:1、2、4和8,分别对应于1、2、4和8字节无符号整数.
无符号整型常量的形式是:数字串后跟大写或小写字母U,再后跟一个下划线和种类参数(可选).
下面的示例显示了无符号整型常量的最大值:255u_165535u_24294967295U_418446744073709551615U_8如果没有使用种类参数(12345U),则缺省值与缺省整数相同.
缺省值为U_4,但可以使用-xtypemap选项更改它,这会更改缺省无符号整数的种类类型.
可使用UNSIGNED类型说明符声明无符号整型变量或数组:UNSIGNEDUUNSIGNED(KIND=2)::AUNSIGNED*8::B4.
4STRUCTURE和UNION(VAXFortran)OracleSolarisStudio12.
2:Fortran用户指南2010年9月1464.
5.
1算术表达式二进制运算(如+-*/)不能混合使用有符号操作数和无符号操作数.
即,如果将U声明为UNSIGNED并且N是有符号的INTEGER,则U*N是非法的.
可使用UNSIGNED内部函数将二进制运算中的混合操作数组合起来,例如U*UNSIGNED(N).
有一种例外情况是,如果一个操作数是无符号整数,而另一个操作数是具有正值或零值的有符号整数常量表达式,则结果是无符号整数.
此类混合表达式的结果的类型,是操作数最常见的类型.
有符号值的幂是有符号的值;而无符号值的幂是无符号的值.
无符号值的一元负值是无符号的值.
无符号操作数可以与实数、复数操作数任意混合使用.
(无符号操作数不能与区间操作数混合使用.
)4.
5.
2关系表达式可以使用内部关系运算来比较有符号和无符号整型操作数.
其结果基于未修改的操作数的值.
4.
5.
3控制构造CASE构造接受无符号整数作为条件表达式.
不允许将无符号整数作为DO循环控制变量,也不允许在算术IF控制表达式中使用它.
4.
5.
4输入/输出构造可以使用I、B、O和Z编辑描述符来读取和写入无符号整数.
还可使用列表式I/O和名称列表I/O读取和写入无符号整数.
列表式I/O或名称列表I/O下的无符号整数的写入格式与带符号的正整数使用的格式相同.
也可以使用未格式化I/O读取或写入无符号整数.
4.
5.
5内部函数允许在内部函数中使用无符号整数,但SIGN和ABS除外.
新的内部函数UNSIGNED与INT类似,但生成无符号类型的结果.
格式为4.
5无符号整数第4章SolarisStudioFortran的功能与差异147UNSIGNED(v[,kind]).
另一个新的内部函数SELECTED_UNSIGNED_KIND(var)返回var的种类参数.
内部函数不允许同时使用有符号整型操作数和无符号整型操作数,但MAX和MIN函数除外.
仅当至少有一个REAL类型的操作数时,才允许这两个函数同时使用有符号整型操作数和无符号整型操作数.
无符号数组不能作为数组内部函数的参数.
4.
6Fortran200x的功能此发行版的SolarisStudioFortran编译器中引入了Fortran2003标准中的许多新功能.
有关详细信息,请参阅Fortran2003标准.
同时也引入了Fortran2008草案标准中所建议的一些功能.
有关这些功能的详细信息,请参见相应的草案出版物.
4.
6.
1与C函数之间的互操作性新的Fortran标准提供了以下内容:一种引用C语言过程的方法(相反的功能是,一种指定可从C函数中引用Fortran子程序的方法),以及一种声明与外部C变量相链接的全局变量的方法ISO_C_BINDING模块提供了对命名常量的访问,这些命名常量是种类类型参数,它们代表了与C类型兼容的数据.
该标准还引入了BIND(C)属性.
如果Fortran派生类型具有BIND属性,则它可以与C之间进行互操作.
此发行版的Fortran编译器实现了该标准第15章中描述的这些功能.
如标准中第4章所述,Fortran还提供了用于定义与C类型对应的派生类型和枚举的工具.
4.
6.
2IEEE浮点异常处理在Fortran语言中,新的内部模块IEEE_ARITHMETIC和IEEE_FEATURES提供了对异常和IEEE算法的支持.
对这些功能提供完整支持的是:USE,INTRINSIC::IEEE_ARITHMETICUSE,INTRINSIC::IEEE_FEATURES4.
6Fortran200x的功能OracleSolarisStudio12.
2:Fortran用户指南2010年9月148INTRINSIC关键字是Fortran2003中的新增功能.
这些模块定义了一组派生类型、常量、舍入模式、查询函数、基本函数、种类函数、基本和非基本子例程.
有关详细信息,请参见Fortran2003标准的第14章.
4.
6.
3命令行参数内部函数Fortran2003标准引入了三个新的内部函数,用来处理命令行参数和环境变量.
包括:GET_COMMAND(command,length,status)以command返回调用该程序的整个命令行.
GET_COMMAND_ARGUMENT(number,value,length,status)以value返回命令行参数.
GET_ENVIRONMENT_VARIABLE(name,value,length,status,trim_name)返回环境变量的值.
4.
6.
4PROTECTED属性现在,Fortran编译器接受Fortran2003的PROTECTED属性.
PROTECTED对模块实体的使用进行了限制.
具有PROTECTED属性的对象只能在声明这些对象的模块中定义.
4.
6.
5Fortran2003异步I/O编译器可识别I/O语句中的ASYNCHRONOUS说明符:ASYNCHRONOUS=['YES'|'NO']此语法是在Fortran2003标准第9章中提出的.
在与WAIT语句结合使用的情况下,允许程序员指定可能与计算重叠的I/O进程.
虽然编译器可以识别ASYNCHRONOUS='YES',但标准不要求实际的异步I/O.
在本发行版的编译器中,I/O始终是同步的.
4.
6.
6扩展的ALLOCATABLE属性Fortran2003扩展了ALLOCATABLE属性所允许的数据实体.
以前,仅限本地存储的数组变量使用该属性.
现在,允许将它用于:结构的数组组件哑元数组数组函数结果4.
6Fortran200x的功能第4章SolarisStudioFortran的功能与差异149在可分配实体可能与存储关联的所有位置,仍然禁止使用可分配实体:COMMON块和EQUIVALENCE语句.
可分配数组组件可以以SEQUENCE类型出现,但在COMMON和EQUIVALENCE中禁止使用此类型的对象.
4.
6.
7VALUE属性f95编译器接受Fortran2003VALUE类型声明属性.
如果使用此属性指定子程序哑元输入参数,则表明"按值"传递实际参数.
以下示例说明如何将VALUE属性用于一个C主程序,该主程序将文字值作为参数来调用Fortran子程序:Ccode:#includeintmain(intac,char*av[]){to_fortran(2);}Fortrancode:subroutineto_fortran(i)integer,value::iprint*,iend4.
6.
8Fortran2003流I/OFortran2003标准定义了一个新的"流"I/O方案.
流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.
9Fortran2003格式化I/O功能在f95中,已实现了三个新的Fortran2003格式化I/O说明符.
它们可以出现在OPEN、READ、WRITE、PRINT和INQUIRE语句中:DECIMAL=['POINT'|'COMMA']4.
6Fortran200x的功能OracleSolarisStudio12.
2:Fortran用户指南2010年9月150更改缺省的十进制编辑模式.
对于使用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编译器命令行选项.
(第67页中的"3.
4.
45–iorounding[={compatible|processor-defined}]")4.
6.
10Fortran2003IMPORT语句IMPORT语句指定主机作用域单元中可由主机关联访问的实体.
仅在接口主体中允许使用.
4.
6.
11Fortran2003FLUSHI/O语句f95编译器接受Fortran2003FLUSH语句.
FLUSH语句使写入外部文件的数据可用于其他进程;通过除Fortran以外的其他方法使外部文件中的数据可用于READ语句.
4.
6Fortran200x的功能第4章SolarisStudioFortran的功能与差异1514.
6.
12Fortran2003POINTERINTENT功能现在,Fortran编译器支持POINTER哑元参数的INTENT属性:可以为指针dummy指定INTENT(IN)、INTENT(OUT)或INTENT(INOUT).
例如,subroutinesub(P)integer,pointer,intent(in)::p.
.
.
end指针的INTENT属性应用于指针,而非指针所指向的元素,因此对于INTENT(IN)指针,以下语句是非法的,因为这些语句将修改指针:p=>tallocate(p)deallocate(p)但以下语句对于INTENT(IN)指针是合法的,因为它修改指针所指向的元素:p=4004.
6.
13Fortran2003中增强的数组构造函数数组构造函数中允许使用方括号代替(/和/):X=[3.
2,4.
01,6.
5]Fortran2003标准允许使用方括号作为数组构造函数.
这可能会与区间常量冲突.
如果在不带-xia选项(或用于启用区间运算的类似选项)的情况下使用方括号,这些方括号将被视为数组构造函数.
如果使用-xia选项,这些方括号将被视为常量.
区间用户应继续使用(/和/)数组构造函数,以避免出现编译错误.
4.
6.
14Fortran2003和Fortran2008的其他功能有关下列Fortran2003功能的详细信息,请参阅已发布的Fortran2003标准.
发布的Fortran200x草案文档中介绍了Fortran2008的功能.
2003对可分配数组的扩展-赋值重新分配及可分配的标量2003对ALLOCATE/DEALLOCATE语句的扩展-ERRMSG和SOURCE2003对MOVE_ALLOC内部函数的扩展2003对带重映射的指针赋值的扩展4.
6Fortran200x的功能OracleSolarisStudio12.
2:Fortran用户指南2010年9月1522003扩展:MIN/MAX、MIN/MAXVAL和MIN/MAXLOC,使用字符参数.
2003内部函数IS_IOSTAT_END、IS_IOSTAT_EOR、NEW_LINE2003内部函数SELECTED_CHAR_KIND内部函数SYSTEM_CLOCK的COUNT_RATE参数的2003REAL类型2003对复合SQRT内部函数结果的新限制2008:使用空指针作为缺少的可选参数x86平台上的IEEE内部模块支持.
2008的位内部函数:BGE,BGT,BLE,BLT,DSHIFTL,DSHIFTR,LEADZ,POPCNT,POPPAR,TRAILZ,MASKL,MASKR,SHIFTA,SHIFTL,SHIFTR,MERGE_BITS,IALL,IANY,IPARITY4.
7其他的I/O扩展本节介绍一些Fortran95输入/输出处理扩展,f95编译器接受这些扩展,但它们不是Fortran2003标准的一部分.
某些扩展是在Fortran77编译器f77中出现的I/O扩展,现在这些扩展已成为Fortran编译器的一部分.
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其他的I/O扩展第4章SolarisStudioFortran的功能与差异1534.
7.
3NAMELIST输入格式输入中的组名前面可以是$或&.
&是Fortran95标准接受的唯一格式,并且是NAMELIST输出所写入的内容.
接受$作为用来终止输入的符号,但以下情况除外:组中最后一个数据项是CHARACTER数据,此时将$作为输入数据处理.
允许NAMELIST输入从记录的第一列开始.
4.
7.
4二进制未格式化I/O使用FORM='BINARY'打开文件与使用FORM='UNFORMATTED'具有大致相同的效果,所不同的是文件中没有嵌入记录长度.
如果没有此数据,则无法知道一条记录的开始或结束位置.
因此,无法对FORM='BINARY'文件执行BACKSPACE操作,这是因为不知道要退格到什么位置.
对'BINARY'文件执行READ操作时,将按需要读取尽可能多的数据来填充输入列表中的变量.
WRITE语句:以二进制的形式将数据写入文件,并按输出列表中指定的数量传输字节.
READ语句:将数据读取到输入列表中的变量,并传输该列表所要求数量的字节.
因为文件中没有记录标记,所以不进行"记录结束"错误检测.
检测到的唯一错误是"文件结束"或异常系统错误.
INQUIRE语句:对使用FORM="BINARY"打开的文件执行INQUIRE返回:FORM="BINARY"ACCESS="SEQUENTIAL"DIRECT="NO"FORMATTED="NO"UNFORMATTED="YES"RECL=ANDNEXTREC=areundefinedBACKSPACE语句:不允许使用-返回一个错误.
ENDFILE语句:在当前位置照常截断文件.
REWIND语句:将文件照常重新定位到数据的开头.
4.
7.
5各种I/O扩展在不同单元上可能出现的递归I/O(这是因为f95I/O库为"MT-Warm").
RECL=2147483646(231-2)是顺序格式化输出、列表式输出和名称列表输出中的缺省记录长度.
可以按《FORTRAN77LanguageReference》手册中所述识别和实现ENCODE和DECODE.
非前进式I/O是使用ADVANCE='NO'启用的,如下所示:write(*,'(a)',ADVANCE='NO')'n='read(*,*)n4.
7其他的I/O扩展OracleSolarisStudio12.
2:Fortran用户指南2010年9月1544.
8指令编译器指令指示编译器执行某些特殊的操作.
指令又称pragma.
可以将编译器指令作为一个或多个文本行插入到源程序中.
每一行看起来就像注释一样,但其中包含的其他字符可将其标识为不仅仅是该编译器的注释.
对于大多数其他编译器,它被处理为注释,因此具有一定的代码移植性.
有关Fortran指令的完整摘要,请参见附录C,Fortran指令摘要.
4.
8.
1特殊f95指令行的格式除了第20页中的"1.
8命令行帮助"中介绍的指令外,f95还可识别其自己的特殊指令.
这些指令使用以下语法:!
DIR$d1,d2,.
.
.
4.
8.
1.
1固定格式源代码将CDIR$或!
DIR$放在第1至第5列中.
指令在第7列及后面的列中列出.
忽略第72列后面的列.
初始指令行的第6列为空.
连续指令行的第6列非空.
4.
8.
1.
2自由格式源代码将后跟空格的!
DIR$放在行中的任意位置.
!
DIR$字符是行中的第一个非空字符(实际上就是非空白).
指令在空格后面列出.
在初始指令行中,紧跟在!
DIR$之后的位置中为空格、制表符或换行符.
在连续指令行中,紧跟在!
DIR$之后的位置中为空格、制表符或换行符以外的字符.
因此,第1至第5列中的!
DIR$既用于自由格式源代码又用于固定格式源代码.
4.
8.
2FIXED和FREE指令这些指令指定指令行后面行的源代码格式.
4.
8指令第4章SolarisStudioFortran的功能与差异1554.
8.
2.
1作用域它们适用于所在文件的其余部分,或者在遇到下一个FREE或FIXED指令之前的部分.
4.
8.
2.
2用法它们用于切换源文件中的源代码格式.
它们用于切换INCLUDE文件的源代码格式.
您可以将指令插入在INCLUDE文件的开头.
在处理INCLUDE文件后,源代码格式恢复为处理INCLUDE文件之前使用的格式.
4.
8.
2.
3限制FREE/FIXED指令:每个指令必须单独出现在编译器指令行中(没有续行).
每个指令可以出现在源代码中的任意位置.
其他指令必须出现在它们所影响的程序单元中.
示例:一个FREE指令.
!
DIR$FREEDOi=1,na(i)=b(i)*c(i)ENDDO4.
8.
3并行化指令并行化指令是一种特殊的注释,它指示编译器尝试并行处理下一个DO循环.
附录D中对这些指令进行概述,《Fortran编程指南》中有关并行化的一章介绍了这些指令.
Sun和Cray样式并行化指令现已过时,应首选使用OpenMPFortranAPI指令和并行化模型.
《OpenMPAPI用户指南》中介绍了OpenMP并行化.
4.
9模块文件在编译包含Fortran95MODULE的文件时,会为在源代码中遇到的每个MODULE生成模块接口文件(.
mod文件).
文件名是从MODULE的名称中派生的;将为MODULExyz创建文件xyz.
mod(全部小写).
编译还会为包含MODULE语句的源文件生成.
o模块实现目标文件.
可与模块实现目标文件以及所有其他目标文件链接在一起以创建可执行文件.
4.
9模块文件OracleSolarisStudio12.
2:Fortran用户指南2010年9月156编译器在-moddir=dir标志或MODDIR环境变量指定的目录中创建模块接口文件和实现目标文件.
如果没有指定,则编译器在当前工作目录中写入.
mod文件.
在编译USEmodulename语句时,编译器在当前工作目录中查找接口文件.
使用-Mpath选项,可以为编译器指定其他搜索路径.
必须在链接步骤的命令行中显式列出模块实现目标文件.
通常,程序员为每个文件定义一个MODULE,并为MODULE及包含它的源文件指定相同的名称.
但是,这并不是必需的.
在本示例中,同时编译所有的文件.
模块源文件在主程序使用它们之前就已出现.

demo%catmod_one.
f90MODULEone.
.
.
ENDMODULEdemo%catmod_two.
f90MODULEtwo.
.
.
ENDMODULEdemo%catmain.
f90USEoneUSEtwo.
.
.
ENDdemo%f95-omainmod_one.
f90mod_two.
f90main.
f90编译创建以下文件:mainmain.
oone.
modmod_one.
otwo.
modmod_two.
o下一个示例单独编译每个单元,并将它们链接在一起.
demo%f95-cmod_one.
f90mod_two.
f90demo%f95-cmain.
f90demo%f95-omainmain.
omod_one.
omod_two.
o在编译main.
f90时,编译器在当前目录中搜索one.
mod和two.
mod.
必须先编译这些文件,再编译在USE语句中引用模块的任何文件.
链接步骤要求模块实现目标文件mod_one.
o和mod_two.
o与所有其他目标文件一起出现,以创建可执行文件.
4.
9.
1搜索模块在发行的7.
0版的Fortran编译器中,可以将.
mod文件存储在归档(.
a)文件中.
要在归档中搜索模块,必须在命令行的-Mpath标志中显式指定它.
在缺省情况下,编译器并不搜索归档文件.
仅搜索与USE语句中出现的名称同名的.
mod文件.
例如,Fortran语句USEmymod使编译器缺省搜索模块文件mymod.
mod.
4.
9模块文件第4章SolarisStudioFortran的功能与差异157在搜索过程中,编译器为在其中写入模块文件的目录指定更高的优先级.
可以使用-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具有相同的效果.
4.
9.
3fdumpmod命令使用fdumpmod(1)命令可显示有关已编译模块信息文件的内容的信息.
demo%fdumpmodx.
modgroup.
modx1.
0v8,i4,r4,d8,n16,a4x.
modgroup1.
0v8,i4,r4,d8,n16,a4group.
modfdumpmod命令将在单个.
mod文件、通过串联.
mod文件形成的文件以及.
mod文件的.
a归档中显示有关模块的信息.
显示的内容包含模块名称、版本号、目标体系结构,以及用来指示与模块兼容的编译选项的标志.
有关详细信息,请参见fdumpmod(1)手册页.
4.
10内部函数f95支持某些内在过程,它们是超出标准的扩展.
表4–4非标准的内部函数名称定义函数类型参数类型参数说明COT余切实型实型([X=]x)P,EDDIM正偏差双精度双精度([X=]x,[Y=]y)P,ENotes:P:名称可以作为参数传递.
E:在运行时调用内部函数的外部代码.
有关内部函数(包括Fortran编译器可识别的Fortran77内部函数)的更完整论述,请参见《Fortran库参考》.
4.
10内部函数OracleSolarisStudio12.
2:Fortran用户指南2010年9月1584.
11向前兼容性以后的f95发行版在源代码上将与此发行版兼容.
不能保证此发行版的f95所生成的模块信息文件与以后的发行版兼容.
4.
12混合语言可以将使用C编写的例程与Fortran程序结合使用,因为这些语言具有通用的调用约定.
有关C和Fortran例程之间如何进行交互操作的详细信息,请参见《Fortran编程指南》的"C/Fortran接口"一章.
4.
12混合语言第4章SolarisStudioFortran的功能与差异159160FORTRAN77兼容性:迁移到SolarisStudioFortran不再提供单独的Fortran77编译器.
SolarisStudioFortran编译器f95可编译大多数的旧版FORTRAN77程序,其中包括采用以前由SunWorkShopf77编译器编译的非标准扩展的程序.
f95可直接接受很多FORTRAN77功能.
其他功能要求在FORTRAN77兼容性模式(f95-f77)下进行编译.
本章介绍f95接受的FORTRAN77功能,并列出了那些与f95不兼容的f77功能.
有关SunWorkShopf77编译器所接受的任何非标准FORTRAN77扩展的详细信息,请参见http://docs.
sun.
com/source/806-3594/index.
html上的旧版《FORTRAN77LanguageReference》手册.
有关f95编译器所接受的其他Fortran语言扩展的信息,请参见第4章,SolarisStudioFortran的功能与差异.
f95可编译符合标准的FORTRAN77程序.
要确保持续的可移植性,使用非标准FORTRAN77功能的程序应该迁移到符合标准的Fortran95/2003.
使用-ansi选项进行编译,会标出程序中所有不符合标准的用法.
5.
1兼容的f77功能f95直接接受或在-f77兼容性模式下进行编译时接受旧版FORTRAN77编译器f77的以下非标准功能:源代码格式续行可以在第一列中以'&'开头.
[-f77=misc]include文件中的第一行可以是续行.
[-f77=misc]使用f77制表符格式.
[-f77=tab]制表符格式可以将源代码行扩展到第72列以后.
[-f77=tab]5第5章161如果字符串扩展到续行上,则f95制表符格式不会将字符串一直填充到第72列.
[-f77]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语句.
5.
1兼容的f77功能OracleSolarisStudio12.
2:Fortran用户指南2010年9月162f95接受AUTOMATIC语句(FORTRAN77扩展).
f95接受STATIC语句,处理方式与SAVE语句一样.
f95接受VAXSTRUCTURE、UNION和MAP语句.
(请参见第146页中的"4.
4STRUCTURE和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.
1兼容的f77功能第5章FORTRAN77兼容性:迁移到SolarisStudioFortran163如果常量折叠产生浮点异常,则在编译时不进行常量折叠.
[-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类型的参数来定义语句函数;实际参数将转换为语句函数所定义的类型.
[-f77=misc]允许使用空实际参数.
例如:CALLFOO(I,,,J)在第一个I和最后一个J参数之间使用了两个空参数.
f95将函数%LOC()调用作为LOC()调用处理.
[-f77=misc]允许在其他运算符(如**或*)后面使用一元加号和一元减号.
即使第一个参数的类型是COMPLEX,也允许CMPLX()内部函数使用第二个参数.
在这种情况下,使用第一个参数的实部.
[-f77=misc]允许CHAR()内部函数的参数超过255,并且只生成警告而不生成错误.
[-f77=misc]允许移位计数为负,并且只生成警告而不生成错误.
在当前目录中以及-I选项指定的目录中搜索INCLUDE文件.
[-f77=misc]允许进行连续的.
NOT.
运算,例如.
NOT.
.
NOT.
.
NOT.
(I.
EQ.
J).
[-f77=misc]5.
1兼容的f77功能OracleSolarisStudio12.
2:Fortran用户指南2010年9月164其他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有关旧版SunWorkShopFORTRAN77编译器所接受的非标准语言扩展语法和语义的详细信息,请参见http://docs.
sun.
com/source/806-3594/index.
html上归档的《FORTRAN77LanguageReference》.
5.
2不兼容问题下面列出了在使用此发行版的f95编译和测试传统f77程序时出现的已知不兼容问题.
这些问题是由于f95中缺少相当的功能或者行为方式不同造成的.
这些项目是旧版SunWorkShopFORTRAN77编译器支持的FORTRAN77非标准扩展,但当前的f95编译器不支持这些扩展.
源代码格式在指定-f77选项时,如果名称长度超过6个字符,则会发出ANSI警告.
I/O:f95不允许对直接访问文件使用ENDFILE.
f95无法识别在直接访问I/O中指定记录编号时使用的'n格式:READ(2'13)X,Y,Zf95无法识别传统f77"R"格式编辑描述符.
f95不允许在CLOSE语句中使用DISP=说明符.
不允许在WRITE语句中使用位常量.
Fortran95NAMELIST不允许使用长度可变的数组和字符串.
使用RECL=1打开的直接访问文件不能用作"流"文件.
请改用FORMAT='STREAM'.
5.
2不兼容问题第5章FORTRAN77兼容性:迁移到SolarisStudioFortran165Fortran95将非法I/O说明符报告为错误,而f77只发出警告.
数据类型、声明和用法:f95只允许7个数组下标;而f77允许20个.
f95不允许在PARAMETER语句中使用非常量.
不能在CHARACTER类型声明的初始化函数中使用整数值.
REAL()内部函数返回复数参数的实部,而不是将参数转换为REAL*4.
当参数为DOUBLECOMPLEX或COMPLEX*32时,这将产生不同的结果.
Fortran95不允许在数组声明之前在边界表达式中使用数组元素.
例如:subroutines(i1,i2)integeri1(i2(1):10)dimensioni2(10).
.
.
ERROR:"I2"hasbeenusedasafunction,thereforeitmustnotbedeclaredwiththeexplicit-shapeDIMENSIONattribute.
end程序、子例程、函数和语句:名称的最大长度为127个字符.
命令行选项:f95无法识别f77编译器选项-dbl-oldstruct-i2-i4,以及-vax的一些子选项.
f95不支持FORTRAN77库例程:POSIX库.
IOINIT()库例程.
磁带I/O例程topen、tclose、twrite、tread、trewin、tskipf、tstate.
start_iostats和end_iostats库例程.
f77_init()函数.
f95不允许通过使用相同名称定义用户自己的例程来绕过IEEE_RETROSPECTIVE子例程.
5.
3与旧版FORTRAN77编译的例程链接要混合使用f77和f95目标二进制文件,应通过-xlang=f77选项利用f95编译器进行链接.
即使主程序是f77程序,也使用f95执行链接步骤.
示例:编译包含f77目标文件的f95主程序.
demo%catm.
f95CHARACTER*74::c='Thisisatest.
'CALLecho1(c)END5.
3与旧版FORTRAN77编译的例程链接OracleSolarisStudio12.
2:Fortran用户指南2010年9月166demo%f95-xlang=f77m.
f95sub77.
odemo%a.
outThisisatest.
demo%在f95程序中可以使用FORTRAN77库和内部函数,《Fortran库参考》手册中列出了这些库和内部函数.
示例:f95主程序调用FORTRAN77库中的例程.
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%请参见dtime(3F).
5.
3.
1Fortran内部函数Fortran标准支持FORTRAN77中没有的内部函数.
《Fortran库参考》手册中介绍了完整的Fortran内部函数集,其中包括非标准的内部函数.
如果在程序中将《Fortran库参考》中列出的任何内部函数名称用作函数名称,则必须添加EXTERNAL语句才能让f95使用您的例程而不是内例程.
《Fortran库参考》还列出了以前发行版的f77编译器能够识别的所有内部函数.
f95编译器也将这些名称识别为内部函数.
如果使用-f77=intrinsics进行编译,则会将编译器识别的内部函数限定为f77编译器识别的那些函数,而忽略Fortran内部函数.
5.
4有关迁移到f95编译器的附加说明floatingpoint.
h头文件替代了f77_floatingpoint.
h,在源程序中应按如下方式使用它:#include"floatingpoint.
h"格式为f77/filename的头文件引用应改为删除f77/目录路径.
5.
4有关迁移到f95编译器的附加说明第5章FORTRAN77兼容性:迁移到SolarisStudioFortran167对于某些使用非标准别名技术(通过为数组设置过度索引,或者重叠Cray或Fortran指针)的程序,可通过使用相应的-xalias标志进行编译而受益.
请参见第88页中的"3.
4.
108–xalias[=keywords]".
《Fortran编程指南》中有关移植"旧式"程序的一章中举例说明了这个问题.
5.
5f77命令SolarisStudio软件不再包括单独的FORTRAN77编译器f77.
最新的发行版已将许多FORTRAN77功能迁移到Fortran95编译器f95中.
现在,Fortran95编译器中提供了旧版FORTRAN77编译器的许多功能.
当前SolarisStudio编译器发行版提供一个f77脚本,它用一组适当的缺省选项调用f95编译器.
调用f77相当于:f95-f77-ftrap=%none如果需要链接使用先前发行的f77编译器编译的库例程,请将-xlang=f77添加到命令行中.
但如果在单独的步骤中进行编译和链接,并显式指定-xlang=f77、-lM77、-lF77或-lsunmath,则必须使用f95(或f77脚本)进行链接,而不能使用cc或CC.
如果还使用-fast标志进行编译,应将-ftrap=%none添加到-fast之后,以保留FORTRAN77对运算异常的捕获行为,因为-fast将捕获模式设置为"common".
f77-fast-ftrap=%none如果调用f77脚本,将发出消息,警示您正在-f77兼容模式下使用f95编译器.
您可以在命令行中添加-errtags=INVOKE来禁用此消息.
有关更多信息,请参见第56页中的"3.
4.
23–f77[=list]".
5.
5f77命令OracleSolarisStudio12.
2:Fortran用户指南2010年9月168运行时错误消息本附录介绍由Fortran运行时I/O库和操作系统生成的错误消息.
A.
1操作系统错误消息操作系统错误消息包括系统调用失败、C库错误和shell诊断.
系统调用错误消息可在intro(2)中找到.
通过Fortran库进行的系统调用并不直接生成错误消息.
Fortran库中的以下系统例程将调用C库例程,而这些库例程可生成错误消息:integersystem,statusstatus=system("cpafilebfile")print*,"status=",statusend显示以下消息:cp:cannotaccessafilestatus=512A.
2f95运行时I/O错误消息f95I/O库在运行时检测到错误的时候发出诊断消息.
下面是一个使用f95编译和运行的示例:demo%catwf.
fWRITE(6)1ENDdemo%f95-owfwf.
fdemo%wf******FORTRANRUN-TIMESYSTEM******Error1003:unformattedI/OonformattedunitLocation:theWRITEstatementatline1of"wf.
f"A附录A169Unit:6File:standardoutputAbort因为f95消息包含对原始源代码文件名和行号的引用,所以应用程序开发者应该考虑在I/O语句中使用ERR=子句以软件方式捕获运行时I/O错误.
表A–1列出了由f95发出的运行时I/O消息.
表A–1f95运行时I/O消息错误消息1000格式错误1001非法单元编号1002未格式化单元上的格式化I/O1003格式化单元上的未格式化I/O1004顺序访问单元上的直接存取I/O1005直接访问单元上的顺序存取I/O1006设备不支持BACKSPACE1007偏离记录开始1008无法对文件执行stat1009重复计数后没有*1010记录过长1011截断失败1012无法理解的列表输入1013可用空间不足1014单元未连接1015读取意外的字符1016非法逻辑输入字段1017"新"文件存在1018无法找到"旧"文件1019未知系统错误1020需要查找能力1021非法参数A.
2f95运行时I/O错误消息OracleSolarisStudio12.
2:Fortran用户指南2010年9月170表A–1f95运行时I/O消息(续)错误消息1022负重复计数1023通道或设备非法操作1024可重入I/O1025不兼容的说明符处于打开状态1026名称列表非法输入1027FILEOPT参数中有错误1028不允许写入1029不允许读取1030输入时整数溢出1031输入时浮点溢出1032输入时浮点下溢1051缺省的输入单元已关闭1052缺省的输出单元已关闭1053来自未连接单元的直接访问READ1054来自未连接单元的直接访问WRITE1055无联系的内部单元1056对内部单元的空引用1057空内部文件1058未格式化单元上的列表式I/O1059未格式化单元上的名称列表I/O1060试图在内部文件的结束之后写入1061无联系的ADVANCE说明符1062ADVANCE说明符不是'YES'或'NO'1063前进式输入中存在EOR说明符1064前进式输入中存在SIZE说明符1065记录编号为负数或零1066记录不在文件中1067被破坏的格式A.
2f95运行时I/O错误消息附录A运行时错误消息171表A–1f95运行时I/O消息(续)错误消息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组名与程序中的名称不匹配1090在NAMELIST项中有意外的字符1091在NAMELIST项名中有不配对的括号1092变量不在NAMELIST组中1093NAMELIST对象名中的下标过多1094NAMELIST对象名中的下标不够1095NAMELIST对象名中有零跨距A.
2f95运行时I/O错误消息OracleSolarisStudio12.
2:Fortran用户指南2010年9月172表A–1f95运行时I/O消息(续)错误消息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说明符1130零长度的文件名1131ACCESS说明符不是'SEQUENTIAL'或'DIRECT'1132ACTION说明符不是'READ'、'WRITE'或'READWRITE'1133BLANK说明符不是'ZERO'或'NULL'A.
2f95运行时I/O错误消息附录A运行时错误消息173表A–1f95运行时I/O消息(续)错误消息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需要写入权限1167直接访问单元上的ENDFILE1168对顺序或直接访问单元的流访问A.
2f95运行时I/O错误消息OracleSolarisStudio12.
2:Fortran用户指南2010年9月174表A–1f95运行时I/O消息(续)错误消息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/OA.
2f95运行时I/O错误消息附录A运行时错误消息175表A–1f95运行时I/O消息(续)错误消息1214同步单元上的异步I/O1215数据编辑描述符与I/O列表项类型不兼容1216当前I/O列表项与任何数据编辑描述符不匹配1217非法CORR_ACCTION值1218由于启用I/O处理程序而发生死循环1220所请求的字节数大于目标平台上所支持的字节数1221UNION中的数据无法从不兼容的文件类型读取,也不能写入不兼容的文件类型2001无效的常量、结构或组件名2002未创建句柄2003字符参数太短2004数组参数太长或太短2005文件、记录或目录流结束2021锁定未初始化(OpenMP)2022使用锁定变量时死锁(OpenMP)2023未设置锁定(OpenMP)A.
2f95运行时I/O错误消息OracleSolarisStudio12.
2:Fortran用户指南2010年9月176功能发行版历史记录本附录列出此发行版及早期发行版Fortran编译器中新增和更改的功能.
B.
1OracleSolarisStudio12.
2Fortran发行版SolarisStudioFortran95编译器8.
5版本是OracleSolarisStudio12.
2发行版中的一个组件.
支持SPARCVIS3版本的SPARC-V9指令集.
如果使用-xarch=sparcvis3选项进行编译,编译器可以使用SPARC-V9指令集、UltraSPARC扩展(包括可视指令集(VisualInstructionSet,VIS)版本1.
0)、UltraSPARC-III扩展(包括可视指令集(VisualInstructionSet,VIS)版本2.
0)、混合乘加指令和可视指令集(VisualInstructionSet,VIS)版本3.
0)中的指令.
在基于x86的系统上,-xvector选项的缺省值已更改为-xvector=simd.
在基于x86的系统上,缺省情况下以可产生有利结果的优化级别3和更高级别使用流扩展.
可以使用子选项no%simd将其禁用.
在基于SPARC的系统上,缺省值为-xvector=%none.
请参见第131页中的"3.
4.
179–xvector[=[[no%]lib,[no%]simd,%none]]"现在支持AMDSSE4a指令集.
使用-xarch=amdsse4a选项进行编译.
新增的-traceback选项使可执行文件在出现严重错误时显示栈跟踪.
使用此选项时,可执行文件将捕获一组信号,并显示栈跟踪和核心转储,然后退出.
如果多个线程都生成一个信号,则只为第一个线程生成栈跟踪.
要使用回溯,请在使用f95、cc或CC链接程序时添加-traceback选项.
为方便起见,编译时也会接受该选项,不过会将其忽略.
将-traceback选项与-G选项结合使用来创建共享库的做法是错误的.
请参见第82页中的"3.
4.
95–traceback[={%none|common|signals_list}]"-mt选项已更改为-mt=yes或-mt=no.
-mt=yes选项确保按正确的顺序链接库.
请参见第71页中的"3.
4.
56-mt[={yes|no}]"-xprofile=tcov选项经过增强,支持可选的配置文件目录路径名,还能够生成与tcov兼容的反馈数据.
请参见第121页中的"3.
4.
164–xprofile=p".
B附录B177新增的-xkeepframe[=[%all,%none]选项禁止对指定的函数进行与栈相关的优化.
%all禁止对所有代码进行与栈相关的优化.
%none允许对所有代码进行与栈相关的优化.
缺省值为-xkeepframe=%none.
请参见第110页中的"3.
4.
135–xkeepframe[=[%all,%none,name,no%name]]"已经实现了其他F2003功能.
请参见第148页中的"4.
6Fortran200x的功能"IVDEP指令指示编译器忽略在循环中找到的部分或全部对数组引用的循环附带依赖性,以进行优化.
这样,编译器将可以执行通过其他方式不能实现的各种循环优化.
-xivdep可用于禁用IVDEP指令或确定指令的解释方式.
请参见第33页中的"2.
3.
3IVDEP指令"B.
2SunStudio12Update1Fortran发行版对于编译器在x86平台上的SolarisOS或者LinuxOS上创建的目标文件,如果应用程序代码包含参数或返回值为_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]选项会生成可重新编译用于自动调优系统(AutomaticTuningSystem,ATS)的PEC二进制文件.
现在,针对-x03或更高优化级别隐式启用-xdepend选项,该选项不再包括在-fast选项的扩展中.
支持OpenMP3.
0任务处理.
-xannotate[=yes|no](仅限SPARC平台)指示编译器创建稍后可用binopt(1)等二进制修改工具转换的二进制文件.
四精度(REAL*16)已在x86平台上实现.
REAL*16是128位IEEE浮点.
编译器通常会在/tmp目录中创建临时文件.
可以通过设置TMPDIR环境变量来指定其他目录.
cpu_time()Fortran内例程的行为在Solaris和Linux平台之间有所不同.
Fortran2003IMPORT语句现已实现.
B.
2SunStudio12Update1Fortran发行版OracleSolarisStudio12.
2:Fortran用户指南2010年9月178B.
3SunStudio12Fortran发行版目前,Fortran编译器适用于以下Linux(x86和x64)分发包:SuSeLinuxEnterpriseServer9withServicePack3(或更新版本)、RedHatEnterpriseLinux4以及其他基于2.
6内核的Linux分发包(尽管不会对这些分发包提供正式支持).
使用-m64创建64位可执行文件和共享库.
使用-xarch新标志替换已过时的标志.
-xtarget和-xchip的新值为UltraSPARCT2和SPARC64VI处理器提供代码生成功能.
-fma=fused新标志允许在支持乘加指令的处理器上生成这些指令.
-xhwcprof新标志为数据空间分析启用编译器支持.
-xinstrument新标志使线程分析器支持性能分析.
-xregs=frameptr已添加至x86的-fast.
提供-xarch=sse2和-xia选项支持在Solarisx86平台上执行区间运算.
x86平台和SPARC平台均接受显式预取指令.
(—xprefetch=explicit)调试信息的缺省格式由"stabs"标准格式更改为"dwarf"标准格式.
(-xdebugformat=dwarf).
B.
4SunStudio11Fortran发行版新的-xmodel选项:使用新的-xmodel选项,可以在64位AMD体系结构上指定内核、小型或中型内存模型.
如果全局变量和静态变量的大小超过2GB,请指定-xmodel=medium.
否则,请使用缺省设置-xmodel=small.
请参见第115页中的"3.
4.
148–xmodel=[small|kernel|medium]".
为x86SSE2平台扩展的-xvector选项:使用-xvector选项,可以自动生成向量库函数调用和/或生成SIMD(SingleInstructionMultipleData,单指令多数据)指令.
现在,此选项在x86SSE2平台上提供扩展的语法.
请参见第131页中的"3.
4.
179–xvector[=[[no%]lib,[no%]simd,%none]]".
STACKSIZE环境变量已增强:STACKSIZE环境变量的语法已加以改进,可以包括单位关键字.
-xpagesize选项在x86平台上可用:现在,在x86平台以及SPARC上,启用了-xpagesize、-xpagesize_heap和-xpagesize_stack选项.
请参见第117页中的"3.
4.
155–xpagesize=size".
启用了新的UltraSPARCT1和UltraSPARCIV+目标:-xarch、-xchip、-xcache和-xtarget的值支持新的UltraSPARC处理器.
请参见第128页中的"3.
4.
175–xtarget=t".
B.
4SunStudio11Fortran发行版附录B功能发行版历史记录179B.
5SunStudio10Fortran发行版:针对AMD-64处理器进行编译此发行版引入了-xarch=amd64和-xtarget=opteron,用于编译要在64位x86平台上运行的应用程序.
在big-endian和little-endian平台之间进行文件共享新的编译器标志-xfilebyteorder提供了跨平台的二进制I/O文件支持.
在Solaris操作系统x86平台上提供了OpenMP对于此发行版的SolarisStudio,可以使用OpenMPAPI在Solarisx86平台以及SolarisSPARC平台上实现共享内存并行性.
这两种平台现在都启用相同的功能.
不再支持OpenMP选项-openmp=stubsOpenMP"存根"库是为了方便用户而提供的.
要编译调用OpenMP库函数但忽略OpenMPPragma的OpenMP程序,请使用-openmp选项编译该程序,并使用libompstubs.
a库链接目标文件.
例如:%f95omp_ignore.
c-lompstubs不支持同时与libompstubs.
a和OpenMP运行时库libmtsk.
so进行链接,因为这样可能会导致意外的行为.
B.
6SunStudio9Fortran发行版:针对x86Solaris平台发行的Fortran95编译器:此发行版SolarisStudio实现了在SolarisOSx86平台上使用Fortran编译器.
使用-xtarget值(generic、native、386、486、pentium、pentium_pro、pentium3或pentium4)进行编译,可以在Solarisx86平台上生成可执行文件.
x86平台上的缺省值为-xtarget=generic.
以下f95功能尚未在x86平台上实现,只能在SPARC平台上使用:区间运算(编译器选项-xia和-xinterval)四倍(128位)运算(例如REAL*16)IEEE内部模块IEEE_EXCEPTIONS、IEEE_ARITHMETIC和IEEE_FEATURESsun_io_handler模块并行化选项(如-autopar和-openmp).
以下f95命令行选项只能在x86平台上使用,不能在SPARC平台上使用:-fprecision、-fstore和-nofstore以下f95命令行选项只能在SPARC平台上使用,不能在x86平台上使用:-xcode、-xmemalign、-xprefetch、-xcheck、-xia、-xinterval、-xipo、-xjobs、-xlang、-xlinkopt、-x外,在x86平台上,-fast增加了-nofstore.
提高了运行时性能:B.
5SunStudio10Fortran发行版:OracleSolarisStudio12.
2:Fortran用户指南2010年9月180使用此发行版,大多数应用程序的运行时性能会显著提高.
为获得最佳效果,请使用较高的优化级别-xO4或-xO5进行编译.
在这些优化级别上,编译器现在可以内联所包含的过程,以及那些带假定形状参数、可分配参数或指针参数的过程.

器安装环境和运维管理工具推荐

今天看到一个网友从原来虚拟主机准备转移至服务器管理自己的业务。这里问到虚拟主机和服务器到底有什么不同,需要用到哪些工具软件。那准备在下班之间稍微摸鱼一下整理我们服务器安装环境和运维管理中常见需要用到的软件工具推荐。第一、系统镜像软件一般来说,我们云服务器或者独立服务器都是有自带镜像的。我们只需要选择镜像安装就可以,比如有 Windows和Linux。但是有些时候我们可能需要自定义镜像的高级玩法,这...

CloudCone 新增洛杉矶优化线路 年付17.99美元且简单线路测试

CloudCone 商家在以前的篇幅中也有多次介绍到,这个商家也蛮有意思的。以前一直只有洛杉矶MC机房,而且在功能上和Linode、DO、Vultr一样可以随时删除采用按时计费模式。但是,他们没有学到人家的精华部分,要这样的小时计费,一定要机房多才有优势,否则压根没有多大用途。这不最近CloudCone商家有点小变化,有新人洛杉矶优化线路,具体是什么优化的等会我测试看看线路。内存CPU硬盘流量价格...

618云上Go:腾讯云秒杀云服务器95元/年起,1C2G5M三年仅288元起

进入6月,各大网络平台都开启了618促销,腾讯云目前也正在开展618云上Go活动,上海/北京/广州/成都/香港/新加坡/硅谷等多个地区云服务器及轻量服务器秒杀,最低年付95元起,参与活动的产品还包括短信包、CDN流量包、MySQL数据库、云存储(标准存储)、直播/点播流量包等等,本轮秒杀活动每天5场,一直持续到7月中旬,感兴趣的朋友可以关注本页。活动页面:https://cloud.tencent...

设置虚拟内存为你推荐
网络服务器租用网络公司租用什么服务器好(想开个网络公司,租用服务器,但是不知道哪个好?什么价位?求高手指导。)国内免费空间国内哪里有免费的空间?台湾主机台湾的第一台电脑香港虚拟空间香港虚拟主机空间哪家最好免备案虚拟空间虚拟免费空间网站怎么备案韩国虚拟主机香港和韩国的虚拟主机哪个比较好?100m虚拟主机100M虚拟主机有多大,能放多少东西虚拟主机管理系统什么虚拟主机管理系统支持W和linux操作系统最好的虚拟主机哪家的虚拟主机比较好?jsp虚拟主机jsp中文网的虚拟主机有人用过没?觉得怎么样?
vps优惠码 3322免费域名 万网域名管理 本网站服务器在美国维护 樊云 fastdomain 主机点评 edis 阿里云代金券 debian6 全站静态化 网通服务器托管 vip域名 环聊 cxz net空间 ssl加速 电信主机托管 上海联通 windows2008 更多