win7 的 用什么win7 fortrann 编译器

3895人阅读
Intel(R) Visual Fortran Compiler Professional for applications running on IA-32, Version 11.0.061
简单的测试函数如下:保存为exo701.f90& (取自《Fortran95程序设计【彭国伦】》的附书源码)
! Free Formatprogram mainwrite(*,*) "Hello" ! 这也是注解write(*,*) &"Hello"wr&&ite(*,*) "Hello"end
==================================
命令行批处理文件如下(保存为make.bat):
@echo offRemRem Copyright& (C)
Intel Corporation. All rights reserved.RemRem The information and source code contained herein is the exclusive propertyRem of Intel Corporation and may not be disclosed, examined, or reproduced inRem whole or in part without explicit written authorization from the Company.Rem
Rem Intel(R) Visual Fortran Compiler Professional Build Environment for applications running on IA-32
echo.echo Intel(R) Visual Fortran Compiler Professional for applications running on IA-32, Version 11.0.061echo Copyright (C)
Intel Corporation. All rights reserved.echo.
@call "D:/Microsoft Visual Studio 10.0/VC/bin/VCVARS32.BAT"
SET IFORT_COMPILER11=C:/Program Files/Intel/Compiler/11.0/061/fortran
SET INTEL_LICENSE_FILE=C:/Program Files/Common Files/Intel/Licenses
SET PATH=%IFORT_COMPILER11%/Bin/ia32;%PATH%SET LIB=%IFORT_COMPILER11%/Lib/ia32;%LIB%SET INCLUDE=%IFORT_COMPILER11%/I%IFORT_COMPILER11%/Include/ia32;%INCLUDE%
Rem ---------======G-Spider @2011=======----------------ifort /nologo&& ex0701.f90link& /INCREMENTAL:NO /NOLOGO& /SUBSYSTEM:CONSOLE ex0701.obj
ex0701.exe
===================================
以上需要注意的是D:/Microsoft Visual Studio 10.0/VC/bin/VCVARS32.BAT
和路径C:/Program Files/Intel/Compiler/11.0/061/fortran&
C:/Program Files/Common Files/Intel/Licenses 为licence文件,请依照自己的按装更改即可。
若无licence文件intel_TBE.lic则会出现错误:
Is your license file in the right location and readable?The location of your license file should be specified viathe $INTEL_LICENSE_FILE environment variable.
License file(s) used were (in this order):&&& 1.& Trusted Storage&&& 2.& C:/Program Files/Common Files/Intel/Licenses
双击运行批处理,如下图显示程序结果:
更多的编译选项请参考Intel(R) Visual Fortran Compiler User and Reference Guides
&&&&&&&&&&&&&&&&&&&&&&&& Intel(R) Fortran Compiler Help&&&&&&&&&&&&&&&&&&&&&&&& ==============================
&& usage: ifort [options] file1 [file2 ...] [/link linker_options]
&&&&& where options represents zero or more compiler options
&&&&& fileN is a Fortran source (.f .for .ftn .f90 .fpp .i .i90),&&&&& assembly (.asm), object (.obj), static library (.lib), or&&&&& other linkable file
&&&&& linker_options represents zero or more linker options 链接器来自vs或vc中的link.exe
New Options
This topic lists the options that provide new functionality in this release.
Some compiler options are only available on certain systems, as indicated by these labels:
The option is available on systems using IA-32 architecture.
The option is available on systems using Intel& 64 architecture.
The option is available on systems using IA-64 architecture.
If no label appears, the option is available on all supported systems.
If "only" appears in the label, the option is only available on the identified system.
For more details on the options, refer to the
For information on conventions used in this table, see .
New compiler options are listed in tables below:
The first table lists new options that are available on Windows* systems.
The second table lists new options that are available on Linux* and Mac OS* X systems. If an option is only available on one of these operating systems, it is labeled.
Windows* Options
Description
/arch:IA32 (i32 only)
Generates code that will run on any Pentium or later processor.
/arch:SSE3 (i32, i64em)
Optimizes for Intel& Streaming SIMD Extensions 3 (Intel& SSE3).
/arch:SSSE3 (i32, i64em)
Optimizes for Intel& Supplemental Streaming SIMD Extensions 3 (Intel& SSSE3).
/arch:SSE4.1 (i32, i64em)
Optimizes for Intel& Streaming SIMD Extensions 4 Vectorizing Compiler and Media Accelerators.
/GS(i32, i64em)
Determines whether the compiler generates code that detects some buffer overruns.
/QaxSSE2(i32, i64em)
Can generate Intel& SSE2 and SSE instructions for Intel processors, and it can optimize for Intel& Pentium& 4 processors, Intel& Pentium& M processors, and Intel& Xeon& processors with Intel& SSE2.
/QaxSSE3(i32, i64em)
Can generate Intel& SSE3, SSE2, and SSE instructions for Intel processors and it can optimize for processors based on Intel& Core& microarchitecture and Intel NetBurst& microarchitecture.
/QaxSSSE3(i32, i64em)
Can generate Intel& SSSE3, SSE3, SSE2, and SSE instructions for Intel processors and it can optimize for the Intel& Core&2 Duo processor family.
/QaxSSE4.1(i32, i64em)
Can generate Intel& SSE4 Vectorizing Compiler and Media Accelerator instructions for Intel processors. Can generate Intel& SSSE3, SSE3, SSE2, and SSE instructions and it can optimize for Intel& 45nm Hi-k next generation Intel& Core& microarchitecture.
/QaxSSE4.2(i32, i64em)
Can generate Intel& SSE4 Efficient Accelerated String and Text Processing instructions supported by Intel& Core& i7 processors. Can generate Intel& SSE4 Vectorizing Compiler and Media Accelerator, Intel& SSSE3, SSE3, SSE2, and SSE instructions and it can optimize for the Intel& Core& processor family.
/Qdiag-error-limit:n
Specifies the maximum number of errors allowed before compilation stops.
/Qdiag-once:id[,id,...]
Tells the compiler to issue one or more diagnostic messages only once.
/Qfast-transcendentals
Enables the compiler to replace calls to transcendental functions with faster but less precise implementations.
/Qfma(i64 only)
Enables the combining of floating-point multiplies and add/subtract operations.
/Qfp-relaxed(i64 only)
Enables use of faster but slightly less accurate code sequences for math functions.
/Qinstruction:[no]movbe(i32, i64em)
Determines whether MOVBE instructions are generated for Intel processors.
/Qopenmp-link:library
Controls whether the compiler links to static or dynamic OpenMP run-time libraries.
/Qopenmp-link:dynamic
/Qopenmp-threadprivate:type
Lets you specify an OpenMP* threadprivate implementation.
/Qopenmp-threadprivate:legacy
/Qopt-block-factor:n
Lets you specify a loop blocking factor.
/Qopt-jump-tables:keyword
Enables or disables generation of jump tables for switch statements.
/Qopt-jump-tables:default
/Qopt-loadpair(i64 only)
Enables loadpair optimization.
/Qopt-loadpair-
/Qopt-mod-versioning(i64 only)
Enables versioning of modulo operations for certain types of operands.
/Qopt-mod-versioning-
/Qopt-prefetch-initial-values(i64 only)
Enables or disables prefetches that are issued before a loop is entered.
/Qopt-prefetch-initial-values
/Qopt-prefetch-issue-excl-hint(i64 only)
Determines whether the compiler issues prefetches for stores with exclusive hint.
/Qopt-prefetch-issue-excl-hint-
/Qopt-prefetch-next-iteration(i64 only)
Enables or disables prefetches for a memory access in the next iteration of a loop.
/Qopt-prefetch-next-iteration
/Qopt-subscript-in-range (i32, i64em)
Determines whether the compiler assumes no overflows in the intermediate computation of subscript expressions in loops.
/Qopt-subscript-in-range-
/Qprof-data-order
Enables or disables data ordering if profiling information is enabled.
/Qprof-data-order
/Qprof-func-order
Enables or disables function ordering if profiling information is enabled.
/Qprof-func-order
/Qprof-hotness-threshold
Lets you set the hotness threshold for function grouping and function ordering.
/Qprof-src-dir
Determines whether directory information of the source file under compilation is considered when looking up profile data records.
/Qprof-src-dir
/Qprof-src-root
Lets you use relative directory paths when looking up profile data and specifies a directory as the base.
/Qprof-src-root-cwd
Lets you use relative directory paths when looking up profile data and specifies the current working directory as the base.
/Qtcollect-filter
Lets you enable or disable the instrumentation of specified functions.
/Quse-msasm-symbols(i32, i64em)
Tells the compiler to use a dollar sign ("$") when producing symbol names.
/Qvc9(i32, i64em)
Specifies compatibility with Microsoft* Visual Studio 2008.
/Qvec(i32, i64em)
Enables or disables vectorization and transformations enabled for vectorization.
/QxHost(i32, i64em)
Can generate specialized code paths for the highest instruction set and processor available on the compilation host.
/QxSSE2(i32, i64em)
Can generate Intel& SSE2 and SSE instructions for Intel processors, and it can optimize for Intel& Pentium& 4 processors, Intel& Pentium& M processors, and Intel& Xeon& processors with Intel& SSE2.
/QxSSE3(i32, i64em)
Can generate Intel& SSE3, SSE2, and SSE instructions for Intel processors, and it can optimize for processors based on Intel& Core& microarchitecture and Intel NetBurst& microarchitecture.
/QxSSE3_ATOM(i32, i64em)
Can generate MOVBE instructions for Intel processors and it can optimize for the Intel& Atom& processor and Intel& Centrino& Atom& Processor Technology.
/QxSSSE3(i32, i64em)
Can generate Intel& SSSE3, SSE3, SSE2, and SSE instructions for Intel processors and it can optimize for the Intel& Core&2 Duo processor family.
/QxSSE4.1(i32, i64em)
Can generate Intel& SSE4 Vectorizing Compiler and Media Accelerator instructions for Intel processors. Can generate Intel& SSSE3, SSE3, SSE2, and SSE instructions and it can optimize for Intel& 45nm Hi-k next generation Intel& Core& microarchitecture.
/QxSSE4.2(i32, i64em)
Can generate Intel& SSE4 Efficient Accelerated String and Text Processing instructions supported by Intel& Core& i7 processors. Can generate Intel& SSE4 Vectorizing Compiler and Media Accelerator, Intel& SSSE3, SSE3, SSE2, and SSE instructions and it can optimize for the Intel& Core& processor family.
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:225382次
积分:3442
积分:3442
排名:第6456名
原创:116篇
转载:12篇
评论:65条
(1)(1)(1)(2)(6)(4)(1)(5)(3)(1)(2)(4)(1)(1)(1)(2)(6)(6)(4)(1)(1)(4)(3)(16)(4)(6)(3)(8)(7)(3)(3)(17)Windows、Linux下的Fortran编译器简介及推荐 v2.0_Linux教程_Linux公社-Linux系统门户网站
你好,游客
Windows、Linux下的Fortran编译器简介及推荐 v2.0
来源:Linux社区&
作者: Lionel
  Windows、Linux下都有些什么常用的Fortran编译器?
  见知所限,我说的未必公允,也肯定有缺漏,厚颜写出来只是为了抛砖引玉将问题彰显,给出个尚可的解决方案,后来人就不用再在版上浪费时间在这些基本问题上了。如果有牛人进一步纠正、补偿,那就更完满了。我之前的《 10.04_i386 下安装 ifort 11.1.072》是这种用意(见 &),以后如果有空,写得入门类文章也会是这种用意。好不容易有了版主,而且愿意做这么多,由衷期待版上的其他朋友也一并参与进来,助他一臂之力,一起留下些可供后来者参考的珍贵资料~
  在开始前,先得点明一个很基本的观念:编译器(Complier)不等于IDE(Integrated Development Environment,集成开发环境)。前者只提供编译Fortran代码的功能,后者提供了从代码编辑器、编译器、调试器和图形用户界面工具(百度百科)。一个很有趣的现象是,Windows下现成可用的都是IDE,Linux下的则都是Complier。但千万不要以为前者就该多么方便,后者就得多么麻烦,具体为什么我在后面会提到。
一、Windows
  实际上,在Win平台中,大家用得最多的大概是基于微软Visual Studio因而集成了一整套IDE的、商业Fortran编辑器。这里只介绍两个:CVF,IVF。当然还有非商业的,基于命令行的编译器,如gfortran/g95等等,但我没尝试过,因为这样的话我更愿意直接到linux下工作呢。我个人非常期待关于Windows下命令行编译器的使用补充,如果是像本文一样的入门就更赞了~
1)Compad Visual Fortran
  最常见的就是Compad Visual Fortran v6.5或v6.6,基于VS6。这是Win98时代的东东,更新到v6.6c就被Intel收购了,但到了2011年的今天,我对门实验室的童鞋们都依然在用。CVF我只以VS6试用过,不知道是否支持更高版本的VS,所以个人推荐还是用最小巧,最简单的VS6。
  版本方面,网络上最常见的是v6.5的安装包+v6.6b或c的升级包。个人推荐不要升级到v6.6c,最多v6.6b就好。因为不知什么原因,我用到程序只明确支持到v6.6b,在6.6c编译不过。
  操作系统方面,确认百分比支持的是WinXP及之前版本。Vista我没试过,听说是根本就不兼容;Win7是勉强支持的,但都有这样那样的小毛病,推荐安装微软自己出品的、Win7专业版以上才可用、免费的Virtual PC XP-Mode。这是微软为了解决兼容性问题,特意为Win7打造的微型XP虚拟机,活脱脱就是XP再生,当然可以兼容CVF在内的众多软件。
  CVF只支持到Fortran 95标准,不支持任何03以上的特性,而且界面、功能远不如后继者IVF完善。但他的优点非常明显,因为用的人多,所以你向身边的人可能就在用,可以随时请教;你用到的程序,很可能就是一个现成的CVF Project;加上下载XX方便(CVF本身是免费的,而VS6一搜就有一大把的序列号),体积轻小、对配置要求极低,所以还是值得推荐的。
2)Intel Visual Fortran
  这是CVF的后继者,也是我以前一直在用的编译器。目前正不断更新,最新版本是2011 XE,版本号是,或12.0.084。我的使用经历是IVF 11.1.69
  最新的2011 XE支持扩展的Fortran2003标准,也就是吸纳了部分2008特性,而2003本身除了两个特性没实现外已经差不多完现了。
  操作系统方面,Windows全系统支持。因为我没安装过,所以不确定具体能支持哪些VS版本,应该是可以的,2005不清楚,但往下就肯定不支持了。
  但可悲的是,v12系列刚发布没半年,价格高达700刀,想用都用不起。
  盗版方面,安装程序和授权文件在网上很难找到,较常见的还是v11系列。但有一点要注意,v11对Win7支持是有缺陷的,只有11.1.48以上的版本才完整支持,大家下载时务必留意。Vista我压根没关注,所以不知道情形;XP就好办了,100%兼容。v11系列只支持VS,2010不清楚,大家下载VS时也请留意。
  在Win下比较常见的还有PGI Fortran,更新发布比IVF要勤快,也容易下载到(就有),听说口碑也不错,但我没用过,没发言权。Windows下面到底都有些什么编译器,有些什么差异,比较结果又是怎样,大家有兴趣可以去下面的网址看看:
  最后罗嗦一句,我自己最近一年有良心发现的倾向,越来越想去尊重他人的劳动成功,因而越来越抗拒盗版。更不想自己的研究工作根植于一些不道德的行为,如盗版。囊中羞涩之下,又加上对GNU project的认同,俺目前的工作环境都已经全面转向Linux及自由软件。所以,俺不会再关注Win下的商业软件了,最近的这些文章也算是作个告别吧~实际上,俺最近在学Emacs,所以也乐意多写点东西练练手。
  促使我改投Linux怀抱的是一篇著名的文章:王垠《完全用 GNU/Linux 工作》,强烈推荐。
  之前提到过,Windows下面的Fortran发行版,多半是整合了IDE的商业版,价格不菲。而Linux下则是完全不同的氛围,常用的编译器清一色都是免费,甚至开源。缺点只是:没有集成统一的IDE,在可视化、在编辑调试方面似乎不那么方便。——但事情不是这样的。
  Linux下有伟大的开源IDE,Eclipse可以替代VS;更有其他更自由更高效的解决方案,——只要你愿意花时间学习。
  当然,爱怎么折腾都全凭个人喜好。实际上,我实验室里面的师兄们都是简简单单随便一个文本编辑器+编译器就了解,纯手工维护。这里那么多方案,只是提供更多选择的可能性,让大家知道,离开Windows来到linux其实是一种解放。
  我自己用的Linux发行版是32位的Ubuntu10.04,下面也主要以之为例。以下提到的所有软件,在不同发行版中照样可用,大家不必担心。
1)两种解决方案:IDE or DIY
  先说IDE,大名鼎鼎的跨平台、自由、集成开发环境Eclipse就有专为Fortran设计的插件Photran,支持所有常见的Fortran编译器,如ifort、gfortran、g95等等。虽说一时间还比不上Windows下的VS,但已经相距不远了。(注,不是说强大的Eclipse比不上VS,而是身为插件的Photran还不够成熟,Photran+ifort还比不上IVF)。关于Eclipse和Photran可以自行Google之。下载也容易,Ubuntu的软件中心就有,虽然版本要旧一点,但胜在方便。
  关于IDE,我一师弟提到了Code::Blocks下也有Fortran插件,dongyuanxun在回复中也说:“Fortran的IDE可以使用跨平台的Code::Blocks,代码完成,函数跳转都挺不错。”下面是百度百科的资料:
  “Code::Blocks 是一个开放源码的全功能的跨平台C/C++集成开发环境. Code::Blocks是开放源码软件。Code::Blocks由纯粹的C++语言开发完成,它使用了蓍名的图形界面库wxWidgets(2.6.2 unicode)版。对于追求完美的C++程序员,再也不必忍受Eclipse的缓慢,再也不必忍受VS.NET的庞大和高昂的价格。”
  我自己是装了Eclipse+Photran的,但一次都没用过,因为Linux下有更强大的方案。继承自Unix,Linux和Unix一样,都有一种软件开发的美学:一个软件负责一种功能,把一种功能开发到极致,然后让不同的最好的软件互相协作。开发Fortran程序也可以做得到,把IDE拆分为:编辑器 + 项目管理维护软件 + 编译器,我个人所推崇的方案是:GNU/Emacs + GNU Make + Complier(如ifort)
2)Code Editor
  Emacs与Vim并称编辑器中的神器,Vim的美誉是“编辑器之神“,而Emacs的美誉则是“神的编辑器“,我个人更喜欢Emacs的自由及无限可定制性,其他朋友凭自己喜欢也可以选用Vim。唯一需要注意的是,这两件神器是需要花时间学,花更多时间去磨合的,虽然学会之后能大幅提高工作效率,但学习的过程是决计少不了。
  Emacs自带Fortran-Mode和F90-Mode,对fixed和free两种fortran书写格式都提供语法高亮,为fortran程序的编写和调试提供了非常周到的环境。而且还有大量的插件可供下载,如语法检查及自动补全,与编译器的整合等等,只要愿意花心思,完全可以武装到牙齿。我目前正在学习中,最近的两篇文章就是用Emacs写就的。
  关于Emacs的入门材料,网上有很多,但其实打开Emacs,按照她自带的中文Tutorial试一遍就知道个大概了。但要发挥Emacs的无比威力,得进一步深化学习;中文的实体书却不见售,我是在淘宝上买了本复印的《学习GNU Emacs 第二版》,这本书早就绝版,想买都买不到。
  下载同样可以到Ubuntu的软件中心搜索,最新版是23.3,Ubuntu收录的是23.1,区别不大。
  如果不想折腾,可以用自由桌面自带的文本编辑器,如Ubuntu上就自动有gedit,也支持语法高亮,一般人而言已经够用了。
3)GNU Make
  关于make这个工具,三言两语很难说得清,大家可以参考wiki。
  (,更推荐英文版wiki)
  在我理解中,make是一个很好的软件项目管理及维护的自动化工具,我们要进行的Fortran程序设计自然也在其中。她协助你将一系列繁琐的编译管理工作给一次性设计好,然后封装为单独的一个文本文件叫makefile,makefile文件描述代码文件之间的依赖关系,决定他们应该何时以什么编译器编译,如何协调不同的代码版本,等等等等。几乎所有的大型软件工程,都在用makefile来维护,任何一个IDE背后都有一个make。就如微软的VS,看似彻头彻尾的图形界面,独立的项目管理,其背后,实际也只是一个nmake程序 + makefile文件。所谓的Visual Studio,不过是把makefile文件里的语句给可视化了而已。
  make的功能??常非常强大,对于小程序来说,make不是必需,但只要你代码上了一万行,分了模块、分了文件,那么,你就只能选择make,除非你想承受没完没了的手工维护之苦。大规模的程序开发以make来维护,——这在学术界、工业界已经是惯例了。我接触过宇宙学上著名的Fortran程序:CosmoMC,她就是用make来维护的。
  make也有不少版本,我推荐的自然是linux下最常用的GNU make。不需安装,任何linux发行版必然自带,要学的只是该怎么写makefile文件。关于make的资料非常丰富,网上一搜就一大把;中文的教材方面,我用的是《GNU make项目管理 第三版》也是绝版书,在淘宝上有复印版可买到。
4)Complier
  linux下的Fortran编译器很丰富,而且几乎都是免费的。下面网址中的都列举得差不多了。另外还有IBM公司的xlfortran,口碑非常好,似乎是第一个完整实现fortran2003标准的编译器,但可惜只支持基于IBM自己的powerpc,其他平台得用IBM公司提供的模拟器。
  我自己用的是ifort,瀚海Fortran版上的朋友以及超算中心服务器上的用户也大多用ifort。我身边用得比较多的还有gfortran和g95,这两者都是开源的。尤其是gfortran,更是GNU Project里的成员。
  g95虽然开源,但只是作者一人在维护,不是非常推荐。其他的编译器我没试过,没发言权,不敢妄自评论。
  关于gfortran,因为我以前在实际使用中并不愉快,所以不敢多说。我在《 Ubuntu10.04_i386 下安装 ifort 11.1.072 》一文写到:“GNU Project 贡献了无数优秀的g字开头的软件、程序,如gcc,GNU/emacs等,但绝对不包括gfortran,比起ifort,gfortran的效率及容错性都不甚如意。”这是有失公允的。我更是没有在亲自试验的情况下,引用了科大论坛以前的某位朋友的观点:“gfortran和ifort编译出来程序的运行效率可以差个两三倍。“这就很不严谨了,在此真诚道歉。
  提到编译器,不得不说一说对古老的Fortran77的支持。由于F77时代积累了无数珍贵代码,及Fortran标准的要求,所有编译器都是号称向下兼容的。但实际一用起来就未必是这么一回事了。这里有一个概念,叫对劣质代码的容错性。
  以我实验室流传的程序为例,最初写的时候就不规范,用到了很多新标准所建议弃用的语法,以前用古老的f77、g77编译器倒没什么。后来一升级系统(由FC4升到ubuntu8.04),f77和g77都装不上了,只好用新版的编译器。我处于对GNU的无上推崇,首先选用的自然是gfortran,哪知一编译就一大堆警告和错误,仔细看看提示,发现要全部消除的话几乎得把程序重写!后来换了ifort,直接编译通过,运行良好。这本来只是我们的程序写得太烂,与编译器无关,但既然已成事实了,总得希望新版的编译器宽容一点不是?从此之后,我就一直用intel的编译器了……也说出了之前评价gfortran的那句话。
  说到这,大家都知道我要推荐的是什么编译器了。关于ifort的下载、安装和设置请参考我之前那篇文章,这里就不多说了。
  为了让大家对gfortran有个比较全面的理解,我想转贴“编程爱好者论坛“上dongyuanxun朋友的回复。我从他的回复里学到很多,在此深深感谢。
dongyuanxun:
  不过lz的观点有些偏颇。
  Windows下除了那些商业软件外,gfortran/g95也可以在windows下正常使用,这个不在话下。
  我没用过g95,下面只说一下gfortran。Windows/Linux下gfortran(4.5以上版本,4.4之下的版本不做评述)的性能和ivf相比差距不大。但由于gfortran集成了gnu家族的参数复杂,所以很多初学者不太会用。
  lz说的一编译就一大堆警告和错误,我猜想可能是和默认列长度有关,ivf默认支持很长,gfortran取消限制需要加入-ffree-line-length-0。当然还有其他的不同,在此不做赘述。我使用gfortran编译经典f77代码从来没出现什么问题。
  而lz说的gfortran和ifort编译出来程序的运行效率可以差个两三倍,就没有道理了。我曾经比较过,gfortran在除了matmul函数和三角函数远慢于ivf外,其他运算速度要远远高于ivf。
  而matmul和三角函数也有另外的处理方式。gfortran有个开关-fexternal-blas,这个可以把matmul函数解析到外部的blas库,如mkl的blas、比mkl还快的gotoblas、ATLAS,这样得到的目标代码速度要超过ivf的matmul的速度。对于三角函数,Linux下使用-mveclibabi=svml -lsvml -limf -lintlc 可以直接链接到mkl的svml库,或者使用-mveclibabi=acml -lacml_mv 链接到acml库,这样速度就和ivf相同了。Windows下比较麻烦,因为链接到intel的库要依赖vc的库,所以最好链接到svml的dll进行处理。另外的方法即是使用通用的SIMD技术,把三角函数重写(gcc),然后gfortran再去链接它。
  另外考虑到开源跨平台计算库,比如fftw、gotoblas、atlas,这些东西用gcc/gfortran很好编译,用vc/intel编译器基本编译不出来,虽然可以通过动态连接库dll来使得intel使用,还不如直接使用gcc/gfortran来的便捷。
  最后最重要的是免费开源,ivf在windows下收费,Linux下也只是对个人免费而已,商业开发需要授权。开源这个挺好的,编译器有时会不时的出现bug,intel的bug得报告后确认,还得等下个版本,还不一定修复,gfortran就不同了,可以去bugzilla上查阅bug,兴许就有解决的补丁,然后自己重新编译gfortran一下就行了。
  默认编译呢,确实差距很大的,这是因为ivf不加参数是/O1优化,而且fastmath自动开启(有时会产生错误结果,发现不对劲时要手动关闭),而 gfortran默认好像是-O0不优化(反正没有ivf优化级别高),不开启fastmath,所以默认参数表面上产生gfortran远远不如ivf 的假象。在此,引用一个说法,某人说过,intel这样做是想推销他的编译器而已(默认开关就很快)。
  关于make,科大论坛上的IceAge朋友推荐了cmake,我挺感兴趣,于是查了下。有空的话就学一学:
  “CMake是一个比make更高级的编译配置工具,它可以根据不同平台、不同的编译器,生成相应的Makefile或者vcproj项目。通过编写CMakeLists.txt,可以控制生成的Makefile,从而控制编译过程。CMake自动生成的Makefile不仅可以通过make命令构建项目生成目标文件,还支持安装(make install)、测试安装的程序是否能正确执行(make test,或者ctest)、生成当前平台的安装包(make package)、生成源码包(make package_source)、产生Dashboard显示数据并上传等高级功能,只要在CMakeLists.txt中简单配置,就可以完成很多复杂的功能,包括写测试用例。如果有嵌套目录,子目录下可以有自己的CMakeLists.txt。总之,CMake是一个非常强大的编译自动配置工具,支持各种平台,KDE也是用它编译的,感兴趣的可以试用一下。”
  IceAge还提到了IDB,我没理解错的话,应该是Intel DeBugger,另外还有GNU DeBugger,GDB。我自己在调试工具方面的理解和实践很浅薄,所以在上面没有说。这里特意提到,是想借IceAge的方案来弥补。他的方案是: Vim + cmake + IDB + ifort, 有兴趣的朋友可以仔细调研。这里引以下关于GDB的讨论:
  对Fortran最大的两点遗憾是 gdb对Fortran支持不好……
dongyuanxun:
  主要是动态数组gdb支持不好,所以要使用archergdb,但是archergdb不是紧跟gdb的trunk的,所以有些特性也发挥不出来,我曾经试图把archergdb的补丁分离合并到gdb里,编译未果,要改太多东西了。
  补充一下,gcc/gfortran的调试是个硬伤,不如intel编译器的调试器好,所以对个人的调试水平比较高。虽然可以使用archergdb来代替gdb,显示还是没有ivf的好。
  说了那么多,其实都只是一些皮毛性质的介绍。要学会fortran,只需也必须自己亲自花时间去钻研。而fortran语言也只是科研的一件工具,能用就行,科研本身才是最重要的,千万不要舍本逐末。我所写的这些,是根据我的情况、我的需求、我的经历来写的,仅供参考。如果我的这些文字能帮大家节省一些入门时间,那我就非常满足了。我这些文字,贻笑大方本不算什么,不过既然大家耐着性子看到这里,我也提个愿望:希望大家熟悉fortran之后也能如我这般做些力所能及的事情,帮一下后来者。不一定要在人烟稀少的瀚海星云Fortran版,别的什么地方都可以,哪怕只是在现实中教教后辈也是美事;最好对受益的人也提这样的一个愿望,这样一点点传播开去,世界就更美好了~
四、修改记录
 &&& 原版。
补充了另外一个IDE的简介,Code::Blocks;
发觉对gfortran的评述有失偏颇,故引用dongyuanxun回复,重新修改;
引用IceAge的回复,简略补充了自动编译设置工具cmake和调试工具IDB、GDB。
相关资讯 & & &
& (11/17/:14)
& (09/22/:33)
& (07/12/:16)
图片资讯 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款}

我要回帖

更多关于 fortran编译器下载 的文章

更多推荐

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

点击添加站长微信