《Fortran实用编程.ppt》由会员分享,可在线阅读,更多相关《Fortran实用编程.ppt(29页珍藏版)》请在三一办公上搜索。
1、,Fortran 实用编程,Fortran Coder 研讨团队,系列视频教程,关于 Fortran Coder,Fortran Coder 始于2006年,是一个以科学计算编程为主题的非盈利性研讨团体。大多数由各行业高等学府学生,研究人员及生产一线的工作人员组成。研讨内容涉及:Fortran77/90/95/2003/2008语法规范,各平台32位及64位编译器,IMSL,MKL,Lapack 等数学函数库,MPI,OpenMP,Coarray 并行及高性能计算,winteracter/DisLin/Matfor/GTKFortran 等绘图及界面库。,关于本套视频,本套视频以解决实际问题为
2、主要目的,旨在为您解答课本上较少涉及到的实际问题。通过本套视频,您会更容易了解:如何查找错误?如何解决错误?如何学习 Fortran2003 和 Fortran2008 语法?如何用最通俗易懂的写法解决实际问题?如何看懂别人的优秀代码并为自己所用?如何让自己的代码更优美、更普适?本套视频由 Fortran Coder 研讨团队录制,供所有 Fortran 程序员和学习者免费自由的观看,您可随意的传播它。但请保证视频完整性。我们将会不定期的更新本套视频,请持续关注我们的网站、QQ群!同时,如果您对 Fortran 相关有自己的见解,并愿意通过录制视频的方式与其他人分享,请联系我们!,第五讲,应用
3、篇 第 五 讲第三方函数库的使用讲解人:雪球讨论QQ群:2338021,目 录,函数库的通常组成,重要:任何函数库的使用方法,都不能完全照抄任何教程,包括本视频!,原因:函数库有两种发布方式:源码+工程方式;二进制方式函数库的二进制方式,又针对不同的操作系统,平台,编译器品牌和版本还可能有32位,64位的区别还可能有串行,并行,集群等不同版本函数库的源码+工程方式:针对不同操作,平台,编译器的编译方式不同加之,函数库自身的版本亦有不同。,函数库的通常组成,大多数函数库,包含(或部分包含)以下内容:,函数库的通常组成,要了解函数库使用的原理,而不是仅仅会操作所有函数库的使用,归纳起来,总是离不开
4、这么五个内容:,目 录,Linux命令行使用Lapack,Lapack 是一个开源的函数库,主要处理线性代数问题(各种线性问题的分解,特征值,奇异值,最小二乘等)由 Univ.of Tennessee;Univ.of California,Berkeley;Univ.of Colorado Denver;and NAG Ltd 开发贡献。可以在 http:/lib.org/lapack/查阅信息及下载,它提供 Fortran和 C 接口,在各种编译器和操作系统平台上都可以运行目前的版本是 它自身包含了 BLAS 这个基础线性代数函数库,而Intel 的 MKL 函数库又包含了它,并且对其进行了
5、底层优化,Linux命令行使用Lapack,下载解压缩编辑 make.inc 文件编辑 makefile 文件make 编译安装使用,Linux命令行使用Lapack,来看一个示范代码:,sgesv 用来求取一个 Ax=b 的线性方程组我们传入了 A 和 b 及其大小最终得到的结果覆盖了b注意:A也被覆盖了因此我们用aa保存原来的值最后,我们用 matmul 来检查计算是否正确。,Linux命令行使用Lapack,Lapack 在 linux 使用简单由于是 F77 格式的接口,没有用到 module,也就没有用到 include 包含文件使用过程中,只是用-L 增加了lib文件的路径-lla
6、pack-lrefblas 告知了lib文件的文件名(如果复制lib文件到/usr/lib 等目录,或添加到 LD_LIBRARY_PATH 环境变量中,则上面的第一步不需要每次都进行),gfortran test_lapack.f90-llapack-lrefblas,目 录,IVF+VS使用IMSL,IMSL 在 Compaq Visual Fortran 的专业版中捆绑销售,安装后自动进行了合理的配置。CVF中使用的IMSL是4.0版本,其用法简单,use IMSL 就能搞定一切。,现在主流的 IMSL 版本是7.0和6.0,主要支持 IVF。而IVF也只能使用5.0以上版本。它的使用方
7、法已经和 4.0 截然不同。但是,依然遵循前面说过的五个内容。,注意:IMSL 是闭源库,不提供源代码,而且有 CNL和FNL的区分,也有32位和64位的区分,同时,面向不同编译器的发行也是不同的。在购买/下载的时候要注意。,IVF+VS使用IMSL,我们附带了一个pdf文档它显示了 IMSL 的版本分别支持什么平台什么操作系统什么编译器什么位数很可惜的是,它几乎不支持开源的编译器,IVF+VS使用IMSL,关于32/64位数的注意:有一些 IVF64位编译器也同时提供了32位编译器(选择安装)此时,也可以同时安装32位和64位的 IMSL 库但是配置和使用时,要注意分别对待。,IVF+VS使
8、用IMSL,IMSL的安装非常简单,一路下一步就可以了,可以安装在任何目录。安装好之后,我们一定要移步到安装目录,看看安装目录里面都有什么东西:,这里 include 和 lib 比较重要我们需要首先告知编译器,这两个文件夹的位置,IVF+VS使用IMSL,然后,我们要把所需的模块告诉编译器告诉的方法是,use 某个模块。IMSL 从 5.0 开始,统一把函数放入 numerical_libraries 模块中,注意:某些版本的IMSL有bug在 use numerical_libraries 时会出错,IVF+VS使用IMSL,之后,编译就可以成功了。但是我们会遇到链接错误,我们还需要告诉编
9、译器,所需的函数在哪里提供?我们可以用IMSL提供的包含文件,也可以直接添加lib文件到工程里这些方法是等效的:,IVF+VS使用IMSL,之后,链接就可以成功了。如果你上一步使用的是 动态链接库 形式,那么可能还会遇到这种问题:,这种情况下,你还需要找到 imsl_dll.dll 的位置把这个路径添加到环境变量 path 中,IVF+VS使用IMSL,总结一下,IMSL 的五步走:一定要翻一遍安装目录!,目 录,IVF+VS使用MKL,MKL 是 Intel 公司出品的数学函数库,有C和Fortran接口并且MKL具有高度的汇编级优化,如果对执行效率有要求,应首选MKL,MKL 吸纳了一些开
10、源的函数库,同时也有 Intel 自身的贡献比如 Lapack,Blas,FFTW 等,都包含在 MKL 当中(并且为他们设计了 F95 接口),我们将会用前面linux下调用lapack的代码来示范。这段代码,可以完全不修改的情况下用ifort编译,并调用MKL链接(F77接口),IVF+VS使用MKL,对于 F77 接口,不需要指定includeIntel 安装时自动指定了 lib 的路径。因此,我们只要进行一个操作即可:,IVF+VS使用MKL,F90 接口相比 F77 接口,更简单,函数参数更少假定形状避免了传递数组(矩阵)大小可选参数避免了不关心的输出参数但是,它需要额外的配置:,I
11、VF+VS使用MKL,在某些情况下MKL 并不直接提供 include 下的 mod 文件而是提供一个“接口源代码”,需要用户自己去编译,得到 mod 文件,使用MKL以后,如果使用动态库的形式,也可能遇到找不到 DLL 的问题此时,我们建议用静态库形式发布。否则,应该同时发布 redistia32mkl 下的其他 DLL,总结,第三方函数库的使用,总结为 五步走:告知编译器include路径告知编译器lib路径告知编译器所需的module(include)编译错误:Error in opening the compiled module file.Check INCLUDE paths.IMSL告知编译器所需的lib文件无法解析的外部符号 _OPERATION_I_mp_SMI,该符号在函数 _MAIN_ 中被引用unresolved external symbol _OPERATION_I_mp_SMI告知操作系统运行时库的位置无法启动此程序,因为计算机中丢失 imsl_dll.dll,尝试重新安装此应用程序,具体要 use 哪个module?链接哪个 lib 文件?参考说明书,或 翻安装目录!不可照抄任何一个教程。,感谢收看!,Fortran Coder Group,还有疑问?请联系我们,下一讲:f90SQL调用数据库敬请关注&期待,