找回密码
 注册
Simdroid-非首页
查看: 124|回复: 4

[3. Fortran] 加快FORTRAN计算速度的计算机软硬件条件

[复制链接]
发表于 2010-9-19 15:31:45 | 显示全部楼层 |阅读模式 来自 辽宁沈阳
本帖最后由 liutruman 于 2010-9-19 18:31 编辑

很多时候,我们编写程序忽略了计算机软硬件条件对程序计算性能的影响,下面将谈谈一些这方面的研究工作,与祝君共勉.
操作系统分析

为了比较操作系统对计算速度的影响,分别在Linux 下采用Intel Fortran 9.1编译器和在Windows下采用Intel Visual Fortran 9.0编译器编译生成有限元程序。由于这两个编译器都隶属于Intel公司的产品,因而在Windows下和Linux下运行的有限元结果是一致的,有利于比较操作系统对有限元计算速度的影响。由于单个有限元程序计算速度很快,特别是单元数量较少时,在获取程序运行时间时可能会出现偶然的误差。为了消除这种误差,采用循环执行有限元程序n次获得整体时间t,最后得到单个程序的平均计算时间t/n。采用有限元程序的计算时间比(Windows/Linux)来说明操作系统的选择对计算速度的影响,当单元个数较少时,在Linux下的计算速度要远远快于Windows下的程序执行速度,计算时间最多可以节省33%。当单元个数增加,节省的时间比例有所降低。然而,由于单元数增加,总体的计算时间增加,因而在减少的计算时间总量上,表现依然明显。


计算机软件和语言

采用科学计算语言FORTRAN 语言的95自由编码格式编写有限元程序,该格式改变了传统的固定编码形式,体现了很好的结构化和面向对象的程序设计特点。分别采用了CVF编译器和IVF编译器生成有限元程序,IVF编译器提供了对计算机新型CPU的众多优化功能,特别是对SSE3指令集的支持,因而IVF编译的有限元程序计算速度明显快于CVF编译的程序。测试结果表明,采用IVF9.0编译的有限元程序相对于CVF最多可以节省1030%的计算时间,而采用IVF10.0编译的有限元程序相对于CVF最多可以节省2040%的计算时间。优化结果为选择科学计算语言FORTRAN编写有限元程序,编译器为Intel Visual Fortran Compiler 10.0,选用Intel的处理器以采用编译器获得最佳的优化功能。


辅助硬件数量和质量

在计算机硬件对计算速度的影响上,计算机的硬件是提高应用程序计算速度和运行效率的最重要途径之一。在运行刚塑性有限元程序时,发现程序运行内存的使用不到50M,而CPU的利用率接近100%,这表明影响刚塑性有限元程序计算速度的主要硬件因素是CPU
计算机硬件使得有限元程序的计算速度成倍地提高,特别是CPU技术的发展。早期的Sgi工作站上程序的计算速度比现在的主流PC机低一个量级。用有限元程序对主流CPU的计算速度测试比较表明Intel的处理器由于其流水线长,在没有通过IVF编译器优化以前,计算速度不如AMD处理器。然而,当采用IVF优化Intel处理器各项新功能后,特别是对SSE3指令集的充分优化,程序的计算速度要快于在AMD处理器上的程序运行速度。因此,快速有限元的软硬件平台应为Intel公司的新型Intel Fortran编译器结合Intel的新型CPU,以充分优化CPU的各项新功能,提高程序的计算速度。

采用FORTRAN95格式的Module功能可以实现高效结构化和面向对象程序设计的新思路;对数组分配固定内存大小,对提高计算速度优势明显。此外,提高计算速度的方法有减少程序计算过程中和硬盘或者外部设备的数据交换、数组读写采用列优先原则以充分利用缓存、以及其他编程技巧(如避免重复计算、表达式的选择、整数和浮点数的选择、访问速度、利用Cache、减少程序代码的跳转、并行语句的使用、数组运算简化等);编译程序时,应采用releasefull optimization格式或者采用命令行编译生成经过优化的执行效率高的程序,以提高程序的计算速度。根据软硬件平台的优化结果,选择的有限元编程语言为FORTRAN,编译器为Intel Visual Fortran Compiler 10.0,计算机的硬件主要是CPU,建议选用Intel的处理器。操作系统为保持通用性仍然可以选择WINDOWS,考虑计算效率和安全性应选择Linux或者Unix

发表于 2010-9-19 17:37:08 | 显示全部楼层 来自 福建厦门
Simdroid开发平台
都比较容易找到,建议取消出售。
回复 不支持

使用道具 举报

 楼主| 发表于 2010-9-19 18:59:24 | 显示全部楼层 来自 辽宁沈阳
本帖最后由 liutruman 于 2010-9-19 19:01 编辑

在编程语言和软件对计算速度的影响研究上,FORTRAN是科学计算中应用最为广泛的语言,因而被称为科学计算语言。几乎大型的有限元程序和商用有限元软件的原始代码都是采用FORTRAN语言编写。因而首选了FORTRAN语言来开发刚塑性有限元程序。FORTRAN语言从FORTRAN77的固定编码格式发展到FORTRAN90和95的自由编码格式,以及即将要推出的全新的FORTRAN2003,一直保留了其高效的科学计算能力。FORTRAN90和95格式增加了许多的新功能如并行编程、面向对象的程序设计和自由编码等,使这一语言更适合结构化程序设计和面向对象设计。
FORTRAN语言的发展向来注重对硬件的支持。针对新计算机硬件条件的发展,特别是CPU的更新换代,FORTRAN的开发工具—编译器也随之快速发展。传统上, Compaq Visual FORTRAN (CVF)被广泛用于编译生成FORTRAN应用程序。2005年6月,Intel公司强势推出了支持新的Intel处理器架构的Intel Visual Fortran (IVF) Compiler 9.0,随后又推出了新的版本9.1和10.0。IVF编译器使FORTRAN语言对新硬件的结合更加紧密,特别是提供了对当今主流Intel CPU的优化功能,进一步确定了其在科学计算领域的领导地位。
这里,采用FORTRAN95格式编写了刚塑性有限元程序,并且分别采用CVF6.6和IVF9.0译器编译生成Win32可执行文件,采用IVF9.0编译的有限元程序相对于CVF编译的,可以节省10%到30%的计算时间。采用IVF10.0编译时,程序的计算时间相对于CVF可以节省20%到40%,相对于IVF9.0也可以节省10%以上的计算时间。
IVF9.0相对于CVF编译器能够提高程序运行速度的主要原因在于其对Intel IA-32处理器、Intel EM64T及安腾2处理器的优化功能。如:支持Pentium 4 和Pentium M的第三代数据流单指令多数据扩展指令集(SSE3)、安腾2的软件管道、过程间优化(IPO)、档案导引优化(PGO)等,通过自动并行和OpenMP技术支持多线程开发。特别是IVF9.0提供了对第三代数据流单指令多数据扩展指令集SSE3 (Streaming SIMD Extension)的支持,而CVF只能支持到SSE2。SSE3指令是目前规模最小的指令集,它只有13条指令。它共划分为五个层,分别为数据传输命令、数据处理命令、特殊处理命令、优化命令、超线程性能增强五个部分。其中超线程性能增强是一种全新的指令集,它可以提升处理器超线程的处理能力,大大简化了超线程的数据处理过程,使处理器能够更加快速地进行并行数据处理。IVF 10.0编译器已经提供了对Intel Core duo 2的双核处理器优化功能,优化能力强于IVF9.0,因此编译的可执行应用程序计算速度最快。使用新型的编译器IVF提高有限元计算速度的有效途径。

另外,由于IVF9.0对CPU的优化方式,特别是指令集的优化方式发生了变化,也即指令的传送方式发生了变化,因而它开发的应用程序和CVF开发的应用程序其计算结果存在微小的浮点计算差别。但是,差别主要发生在系统变量数目较多时,且最大误差小于5%。产生浮点误差的主要原因在于,当两个大数进行减或者除操作获得一个特别小的数时,由于得到的准确有效位数不够,而在后面添加的有效数不一定是零,而是相应内存或者CPU寄存器里在相应位置的二进制码。在大型程序的计算过程中,这种误差可能会累积。
IVF编译器提供了对计算机新型CPU的众多优化功能,特别是对SSE3指令集的支持,因而IVF编译的有限元程序计算速度明显快于CVF编译的程序。因此,IVF编译器是快速有限元程序的最佳编译软件。
硬件质量
在计算机硬件对计算速度的影响上,计算机的硬件是提高应用程序计算速度和运行效率的最重要途径之一。在运行刚塑性有限元程序时,发现程序运行内存的使用不到50M,而CPU的利用率接近100%,这表明影响刚塑性有限元程序计算速度的主要硬件因素是CPU。增加CPU的主频对提高计算速度是非常明显的,这也是早期的CPU厂家,特别是Intel在努力增加主频以提高计算速度的原因。此外,Intel的处理器还有8级指令获取/解码的流水线,所以实际上Northwood核心有28级流水线,而Proscott有39级流水线。缩短了流水线长度,提高了计算速度。
传统上,CPU生产厂家可以通过增加流水线长度来增加CPU的主频,然而,显然增加系统主频已经不是加快计算速度的主要手段了。Intel的酷睿2架构就改进了流水线设计,支持每个内核使用高效的14级流水线;支持EM64T扩展技术,SSE3指令集以及Vanderpool虚拟化技术;双核心架构,每个核心各建32KB一级指令缓存与32KB一级数据缓存,两个核心共享2MB或4MB二级缓存;每个核心建四组指令解码器和五个执行单元,可同时处理96条指令;支持微指令融合与宏指令融合机制;改良后的指令/数据预取机制、内存数据相依性预测功能。新Core2处理器架构大量提高了指令的执行效率,从而提高计算性能。

采用FORTRAN77格式编写的程序,且采用CVF编译可执行程序,因而并没有充分发挥新型CPU构架的优势。为了更好地发挥CPU的特长,采用了IVF9.0和FORTRAN95重新编写和编译生成了有限元程序。选用了Intel新型的Core duo 2处理器,其对提高计算速度的优势相当明显。IVF对PC的优化能力很强,主要是因为PC采用了Intel的Pentium 4处理器,该处理器提供了SSE3指令扩展集。而IVF对于PC的处理器是AMD的并没有体现出优化能力的优势,该处理器还不支持SSE3指令扩展集。
计算机硬件使得有限元程序的计算速度成倍地提高,特别是CPU技术的发展。早期的Sgi工作站上程序的计算速度比现在的主流PC机低一个量级。用有限元程序对主流CPU的计算速度测试比较表明Intel的处理器由于其流水线长,在没有通过IVF编译器优化以前,计算速度不如AMD处理器。然而,当采用IVF优化Intel处理器各项新功能后,特别是对SSE3指令集的充分优化,程序的计算速度要快于在AMD处理器上的程序运行速度。

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2010-9-20 21:55:49 | 显示全部楼层 来自 辽宁沈阳
程序设计方面,在求解塑性变形功率时,必须先求出各个单元高斯点在轧制方向和厚度方向上的正应变及剪切应变,再由其求出x、y方向上总的应变分量和工程剪切应变,然后将其代入高斯点等效应变速度和单元等效变形速度公式中求出塑性变形功率。而在求解接触面摩擦变形功率时,根据正切摩擦模型求出接触面上单元高斯点的相对滑动速度后才能求得摩擦变形功率。由于总能量泛函是关于未知数序列矢量的函数,所以在使用变分原理求泛函时必须先求得其驻值或最小值。在Hession_Total函数模块中分别计算了塑性变形功率的一阶偏导数(梯度)、二级偏导数(Hession矩阵),接触表面摩擦变形功率的一阶、二阶偏导数,外加张力功率的一阶、二阶偏导数,最后对所得的Hession矩阵压缩至一维数组中,以减少存储量。尽管如此,该模块中前后的循环次数仍高达数千次,使得该子程序成为有限元模拟程序中最耗时间的地方。子程序的循环次数均与单元数目有关,循环的次数是所取单元数的数倍甚至数十倍,所以单元数目越多,子程序中消耗的时间就越多,尤其是在Hession矩阵的计算和集成过程中,可以考虑采用并行算法提高求解速度。
回复 不支持

使用道具 举报

发表于 2010-9-21 10:30:45 | 显示全部楼层 来自 美国
长篇大论,不着重点,像是Intel的广告文章。
很久以前,SGI的工作站上的Fortran77就可以做并行计算了。
说Fortran95比Fortran77快的时候,最好把前提也说清楚。
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-11-1 08:06 , Processed in 0.039901 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表