研究文章|开放获取
哈里Radhakrishnan,达米安i Rouson,卡拉莫里斯,Sameer Shende,达沃Kassinos, ”使用Coarrays遗留Fortran程序并行化:策略和案例研究”,科学的规划, 卷。2015年, 文章的ID904983年, 12 页面, 2015年。 https://doi.org/10.1155/2015/904983
使用Coarrays遗留Fortran程序并行化:策略和案例研究
文摘
本文总结的策略并行遗留Fortran 77项目使用的面向对象(OO)和coarray特性进入Fortran在2003年和2008年的标准,分别。面向对象编程(OOP)有助于建设一个可扩展的模型核查和性能测试套件驱动开发。Coarray并行编程促进快速进化从串行程序并行应用程序能够运行在多核处理器和许多核心共享和分布式内存加速器。我们描绘代码17现代化措施用于重构和并行化程序和研究结果的性能。我们最初的研究使用英特尔32-core共享内存服务器上的Fortran编译器。缩放行为很穷,使用τ和概要分析显示性能的瓶颈是由于一个集体,我们的实现顺序求和过程。我们能够提高可伸缩性和实现近线性加速取代与并行序列求和,二叉树的算法。我们还测试了克雷编译器,它提供了自己的集体求和过程。英特尔公司没有提供集体减排。与克雷,程序显示线性加速甚至在内存执行。 We anticipate similar results with other compilers once they support the new collective procedures proposed for Fortran 2015.
1。介绍
背景。遗留软件是旧软件,服务于一个有用的目的。在高性能计算(HPC),代码时便成了“老”不再有效地利用当前的硬件。随着多核处理器和许多核心加速器,可以合理标签任何串行代码为“遗留软件。“多年来证明其效用的软件,然而,通常赢得了用户的信任。
任何一个成功的现代化战略遗留代码必须尊重这种信任。介绍了两种策略的并行遗留Fortran代码,同时支持信任的结果:(1)一个测试驱动的方法,验证数值结果和性能相对于原始代码和(2)一个进化方法,离开原来的代码不变,同时提供一个清晰的路径执行多核和许多核心架构在共享和分布式内存。
现代化的文学遗产Fortran代码集中在可编程性等问题增加类型安全性和模块化,同时减少数据依存关系通过封装和信息隐藏。Achee和卡佛1)检查对象提取,包括识别候选对象通过分析数据流用Fortran 77代码。他们定义一个凝聚力指标,使用全局变量和参数。然后他们从源代码中提取方法。在1500行代码,例如,他们提取26候选对象。
诺顿和Decyk2),另一方面,关注包装遗留Fortran和更现代的接口。然后用现代化的内部接口对象/抽象层。他们轮廓一个循序渐进的过程,确保合规标准,消除不良特性,创建接口,增加了新功能,然后组织相关抽象成类和组件。不受欢迎的特性包括的例子常见的块,这可能促进全球数据共享和变量名和类型的混叠。用Fortran,给程序显式接口便于编译器检查参数类型,类型和等级。新功能介绍包括动态内存分配。
格里诺和价值3)调查工具,提高软件质量,帮助检测错误和强调贫困实践。他们报告的附录提供大量工具的总结八供应商非常广泛的功能。这些功能的示例包括内存泄漏检测,自动向量化和并行化,依赖分析,调用图生成和静态(编译时)以及动态(运行时)正确性检查。
每个上述研究探索如何更新代码Fortran 90/95标准。没有研究探讨后续标准和最不强调性能提升为主要目标。然而,最近的一项研究,应用自动化代码转换为准备可能的共享内存,loop-level并行与OpenMP [4]。我们知道没有发表的研究采用Fortran 2008 coarray并行编程重构一个串行Fortran 77应用程序。这种重构用于并行化是当前论文的中心目标。
案例研究:人口、难民和移民事务局。大多数商业软件模型在工程设备解决Reynolds-averaged湍流n - s(跑)的偏微分方程。推导这些方程包括分解流体速度场,,指的是一部分,波动的部分,: 用(1)到一个动量平衡然后平均超过一个的紊流流动产生了方程如下: 在哪里是流体的动力粘度;是流体的密度;是时间坐标;和是th和th笛卡尔的组件;和和是th和笛卡儿空间坐标的组件。
这个词在(2)被称为雷诺应力张量。它的存在提出了首席困难Reynolds-averaged湍流建模的核心;关闭了方程需要对雷诺应力之间的关系和其他术语出现在了方程,通常速度梯度表示湍流尺度和标量。在最常见的方法适用于预测湍流流动的统计数据在这个应用通过梯度流变形。传统的运行模式少工作对流动进行变形所以快速波动场响应完全没有时间变形的非线性相互作用与自身流体湍流的标志。粒子表示模型(人口、难民和移民事务局)(5,6)解决了这个缺点。给予足够的计算资源,人口、难民和移民事务局的软件实现可以准确预测波动的反应快速变形速度场。
专有的内部软件实现人口、难民和移民事务局最初由斯坦福大学研发和发展继续大学的塞浦路斯。人口、难民和移民事务局使用一组假想的粒子在单位半球表面。粒子分布在每个半球的八分仪乐队,如图1十乐队。粒子的总数是由 因此,计算时间尺度与平方乐队使用的数量。
每个粒子都有一组分配属性,描述一个理想化的流的特点。指定粒子属性包括向量,如速度和方向以及压力等标量。因此,每个粒子可以被认为是代表一个假想的动力学的一维(1 d)单组份(1 c)流。跟踪数量足够大的粒子,然后平均所有粒子的属性(如图2),也就是说,所有可能的流动,产生3 d的表示行为在实际的流体流动。
(一)时间= 0秒
(b)时间= 2秒
(c)时间= 4秒
(d)时间= 6秒
历史上,人口、难民和移民事务局的主要缺点是昂贵的执行时间,因为需要大量的粒子来准确地捕捉流的物理。并行处理可以显著降低这些成本。以前曾试图开发一个使用MPI并行实现人口、难民和移民事务局的被抛弃,因为开发、验证和确认的时间并没有证明其收益。Coarrays允许我们并行化以最小的侵袭性和面向对象的软件测试套件促进持续构建和测试周期,减少了开发时间。
2。方法
2.1。现代化战略
测试驱动的开发(TDD)的极限编程的1990年代,虽然基本概念日期早在1960年代美国宇航局的太空计划。TDD迭代迅速向软件解决方案首先编写测试,指定工作软件必须做什么然后写只有足够多的应用程序代码以通过测试。在当前背景下,TDD的目的是确保我们重构运动保留代表生产运行的预期结果。
表1列出了17个步骤用于重构和并行的串行实现人口、难民和移民事务局。他们被分解成组织重构过程的各个方面。开源ct框架,CMake的一部分是用于构建测试。因此,我们的第一步是构建一个CMake的基础设施,我们用于自动化的构建和测试和建立一个代码库版本控制和协调。
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
http://www.cmake.org/。 2http://git-scm.com/。 ftp://ftp.numerical.rl.ac.uk/pub/MandR/convert.f90。 4http://tau.uoregon.edu/。 |
||||||||||||||||||||||||||||||||||||||||||||||||||
接下来的六个步骤地址Fortran 77特性已经在最近宣布过时的标准或者已经弃用Fortran语言文学。我们没有更换继续语句与最后做语句,因为这些不影响代码的功能。
接下来的两步设置构建测试的关键基础设施。我们自动初始化代替键盘输入默认值。下一步是构建可扩展的基于这些默认值,测试部分中描述3。
接下来的三个步骤让编译器优化的机会。一个利用Fortran的数组的语法。两个利用Fortran的设施为显式地声明一个过程是“纯”,也就是说,无副作用,包括输入/输出,修改参数,停止执行,或修改外地状态。其他步骤地址类型安全性和内存管理。
数组的语法给编译器一个高级视图操作数组的编译器可以利用各种优化方法,包括向量化。沟通的能力功能纯度编译器还支持许多编译器优化,包括并行性。
最后的步骤直接解决并行性和优化。一铺一个循环提供更细粒度的数据分布。另一个利用co_sum内在集体过程预计将Fortran 2015的一部分,已经得到了克雷Fortran编译器的支持。(英特尔编译器,我们写自己的co_sum过程。)最后一步涉及使用调优性能分析和分析工具7]。
3所示。可扩展的面向对象的测试套件
在每一步,我们跑一套精度仿真测试验证的结果代表不偏离串行代码的结果超过50 ppm (ppm)。我们还进行了性能测试,以确保幅图片并行代码的运行时没有超过串行代码运行时的逾20%。(我们允许一些增加的期望显著加速会导致运行多个图像。)
精度测试检查张量的统计数据,计算使用人口、难民和移民事务局。为了建立一个统一的协议运行测试,我们定义了一个抽象的张量基类,如清单所示1。
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
基类提供了绑定比较张量的统计数据,向用户显示测试结果,异常处理。具体测试的形式三个子类,reynolds_stress,维度,circulicity,扩展张量类,从而继承责任实现compute_results和expected_results张量的延迟绑定。类图如图3。然后测试形式如果(。不。stess_tensor % verify_result) &(当)错误停止的考试␣失败了。”
stress_tensor在哪三个孩子里的一个类的实例如图3扩展张量;“时”是一个整数时间戳;错误停止停止所有图片和打印字符串到标准错误;和verify_result纯功能清单1上述两种延迟绑定调用比较计算结果和预期的结果。
4所示。Coarray并行化
现代高性能计算软件必须在多核处理器上执行或许多核心共享或分布式内存加速器。Fortran提供这种灵活性通过定义一个分区的全局地址空间(pga)没有引用如何映射coarray代码到一个特定的体系结构。Coarray Fortran是基于单个项目多个数据(SPMD)模型,并且每个复制的程序被称为一个图像8]。2008年Fortran编译器将这些图像映射到一个潜在的交通网络编译器的选择。例如,英特尔编译器使用MPI的交通网络,而克雷编译器使用一个专用的传输层。
coarray声明的形式真正的,可分配:::,:,:[:]
促进索引到变量沿着三个常规尺寸和一个“a”余维数一个(1 1 1)= (1,1,1)[2]
图2的第一个元素复制到第一个元素的图像执行这条线。能够省略coindex左边(lh)发挥了关键作用在重构串行代码以最小的工作;尽管我们增加了余维数现有变量的声明、后续访问这些变量仍然需要修改的图像通信除外。必要时,添加coindices促进集体的建设程序计算统计数据。
在遗留版本中,粒子属性的计算都是使用两个嵌套的循环,如清单所示2。
|
||||||||||||||||||||||||||||||||||
分布的粒子图像和执行计算在这些循环可以加快执行时间。这可以通过两种方式实现。
方法1直接与粒子,分裂他们尽可能均匀地在所有的图像,使图像边界发生的一个乐队。这个分布如图4(一)。为了实现这一分布,两个嵌套的循环是被一个循环粒子,和两个原始指标的循环计算从全球粒子数量,如清单所示3。然而在这种情况下,代码变得复杂和敏感的精度。
|
||||||||||||||||||||||||||
(一)分区的粒子的粒子来实现均匀分布
(b)分区的乐队达到近均匀分布的粒子
方法2与乐队,并将他们整个图像尽可能甚至使粒子分布。这个分区如图4 (b)。方法2,见清单4少,需要修改原始代码清单所示2但在负载平衡是次优的。
|
||||||||||||||||||||||||||||||||||||||||||
5。结果
5.1。源代码的影响
我们应用我们的策略两个串行人口、难民和移民事务局的软件实现。一个版本,生成的代码超过原来的10%:639行和580行没有测试套件。在第二个版本,代码扩展40%从903行到1260行,不包括新的输入/输出(I / O)部分中描述的代码和测试代码3。测试和I / O占用额外的569行代码。
5.2。易于使用:Coarrays和MPI
能力下降的coindex符号,部分将对此进行说明4,是一个很大的帮助在并行程序不作重大修改源代码。很多幕后的记账处理由编译器可以使并行化更抽象,也容易遵循。例如,清单5显示了MPI调用必要的收集当地的数组为全球阵列处理器。
|
||||||||||||||||||||||||||||||||||||||||||||||
相当于调用使用coarray语法是清单所示清单6。
|
||||||||||||||
减少代码的复杂性也减少了代码中的bug的机会。在遗留代码,数组和把粒子的状态信息。通过使用coarray语法和放弃coindex,我们能够重用的所有原始算法实现人口、难民和移民事务局的核心逻辑。这使它明显更容易确保重构没有改变模型的结果。主要变化是添加余维数和声明和更新他们在需要的时候,见清单6。
5.3。可伸缩性
我们打算让人口、难民和移民事务局作为另一种湍流模型用于常规流体设备的工程设计。在人口、难民和移民事务局的结果没有显著差异超过1024乐队(大约210万个粒子)用来表示流动状态这被选为我们的数据集的大小的上限。大多数工程师和设计师台式电脑上运行模拟。因此,上限是常见的大约是32至48芯两个或四个中央处理单元(cpu)加上额外的核心在一个或多个加速器。我们还看了并行实现的扩展性能的人口、难民和移民事务局使用克雷硬件和Fortran编译器有很好的支持内存coarray项目的执行。
图5显示了200年和400年获得的加速乐队与英特尔Fortran编译器使用中描述的两个粒度分布方案Coarray并行化部分。运行使用最多32核在埃西斯的“脂肪”节点(http://aciss-computing.uoregon.edu/)。每个节点有四个英特尔X7560 2.27 GHz 8核cpu和384 GB的DDR3内存。我们可以看到,加速很穷当处理器的数量增加。
我们用τ(7]分析并行运行了解瓶颈在执行期间。图6显示了运行时的τ情节份额占主导地位的过程使用不同数量的图像。图7的运行时显示不同的功能在不同的图像。列显示的高度个人核心运行时的不同的功能。没有显著差异列证明负载平衡的高度很好整个图像。我们主要实现通过使用CAF的单边通信协议如清单所示6和限制同步语句集体过程如清单所示7和8。看着图的运行时6,我们发现的主要瓶颈是两集体co_sum过程顺序和值在coarray的轮询coarray的每个图像的一部分。这个过程所需的时间。实现co_sum程序添加一个向量在所有图像显示在清单7。有一个等价的子程序为一个矩阵求和。
|
||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
设计一个最优co_sum算法是一个与平台相关的运动最好留给编译器。Fortran标准委员会正在co_sum内在过程,可能会成为Fortran 2015的一部分。但提高并行程序的性能,我们重写了集体co_sum程序使用二项树算法在时间。的优化版本co_sum版本清单所示8。
获得的加速和优化co_sum常规如图8。我们看到程序的扩展性能成为近线性优化co_sum例程的实现。我们也看到,扩展效率增加,当问题规模的增加而增加。这表明穷人比例在规模较小的问题是由于通信和同步9]。
τ概要分析运行使用不同数量的图像显示在图9。co_sum虽然是一个小的增加计算时间增加图像的数量,这是远远低于增加时间实现的版本。
为了充分理解co_sum例程的影响,我们也使用克雷基准测试程序编译器和硬件。克雷原生支持co_sum指令在编译器。克雷还使用自己的通信库在克雷硬件而不是建筑在MPI是由英特尔编译器完成的。我们可以看到在图10并行代码显示,好强大的扩展在克雷硬件128图像问题大小,我们测试了。
我们还看了看τ概要文件并行代码的克雷硬件,如图11。资料分析表明,主要时间都花在时间发展循环使用本机co_sum实现时的。
我们希望,内在co_sum例程的开发和实现Fortran 2015标准的一部分,英特尔编译器也会提高其强大的扩展性能与更多的图片。表2显示了不同运行的原始运行时使用128乐队的τ概要文件如图6,9,11。1到4的运行时图像很近但他们很快偏离我们增加图像的数量由于集体的影响过程。
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
表3显示了疲软的扩展程序的性能使用优化co_sum过程使用英特尔的编译器。粒子的数量,如图1尺度的广场乐队的数量。因此,当乐队的数量翻番,处理器的数目必须相同的执行时间翻了两番。的扩展效率更大的内存问题滴因为要求;适合的对象在堆中,必须根据需要换出,增加了执行时间。
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
6。结论和未来的工作
我们展示了一个战略并行使用Fortran 2008 coarrays遗留Fortran 77码。战略开始构建可扩展的测试使用Fortran的OOP特性。回归测试检查的准确性和性能。人口、难民和移民事务局的案例研究中,我们的策略扩大两个Fortran 77码了10%和40%,独家测试和I / O的基础设施。最重要的代码修改涉及展开两个嵌套循环分布粒子在图像。生成的并行代码甚至达到负载平衡但可怜的扩展。τ的主要瓶颈是顺序总结计划。
基于这些初步结果,我们重写了co_sum过程,加速都改善了。我们还基准测试中可用的本机co_sum实现克雷编译器。我们的结果表明,集体支持的本地程序显示最好的扩展性能即使使用分布式内存。我们希望未来的原生支持2015年集体用Fortran程序所有编译器将这些性能平台。
利益冲突
作者宣称没有利益冲突有关的出版。
确认
最初的代码重构了塞浦路斯大学与欧盟委员会资助居里夫人ToK-DEV格兰特(合同mtkd - ct - 2004 - 014199)。这部分工作由塞浦路斯也支持研究促进基金会的研究框架计划,技术发展和创新2009 - 2010(ΔEΣMH 2009 - 2010)在格兰特TΠE /ΠΛHPO / 0609(是)/ 11。这项工作使用国家能源研究科学计算中心的资源,这是由美国能源部科学办公室号合同下。DE-AC02-05CH11231。这项工作也使用硬件资源从埃西斯集群俄勒冈大学的主要研究收购仪器从美国国家科学基金会的资助,办公室的网络基础设施,“核磁共振- R2:收购一个应用科学计算仪器合成(埃西斯),”格兰特没有。“公盟”——0960354。本研究也支持通过桑迪亚国家实验室多道程序实验室由桑迪亚公司洛克希德马丁公司,国家核安全管理局de - ac04 - 94合同下al85000。桑迪亚的一部分贡献这项工作是由美国新墨西哥州小企业管理局和美国海军研究办公室。
引用
- b . l . Achee d·l·卡佛,“从旧的FORTRAN的代码,创建面向对象设计”系统和软件杂志》上,39卷,不。2、179 - 194年,1997页。视图:出版商的网站|谷歌学术搜索
- c·d·诺顿和v . k . Decyk现代化Fortran 77遗留代码。”NASA技术简介,27卷,不。9,72年,页2003。视图:谷歌学术搜索
- c·格里诺和d . j .价值”的转型遗留软件:一些工具和过程,“技术。众议员tr - 2004 - 012,中央委员会的实验室研究委员会、卢瑟福阿普尔顿实验室,2004年英国牛津郡。视图:谷歌学术搜索
- 迪奈蒂·g·m·门德斯”Fortran遗留软件:源代码更新和可能的parallelisation问题,“ACM SIGPLAN Fortran论坛没有,卷。31日。1,5-22,2012页。视图:出版商的网站|谷歌学术搜索
- s . c . Kassinos和w·c·雷诺兹,”一个粒子表示模型的变形均匀紊流,”年度研究简报,页31 - 61,湍流研究中心,斯坦福大学,斯坦福大学,加州,美国,1996年。视图:谷歌学术搜索
- s . c . Kassinos和大肠Akylas均匀湍流的“粒子的进步表示建模。从线性相互作用的粘弹性IPRM人口、难民和移民事务局版本,”新方法在建模多相湍流流动和色散,分形方法和合成动荡f . Nicolleau, c . Cambon人类。雷东多,j . Vassilicos m .散发出,a . Nowakowski Eds。18卷ERCOFTAC系列施普林格,页81 - 101年,多德雷赫特,荷兰,2012年。视图:出版商的网站|谷歌学术搜索|MathSciNet
- s . s . Shende和公元Malonyτ并行性能系统”,国际期刊的高性能计算应用程序,20卷,不。2、287 - 311年,2006页。视图:出版商的网站|谷歌学术搜索
- m··j·k·里德,m·科恩现代Fortran解释,牛津大学出版社,2011年。
- h . Radhakrishnan d . w . i Rouson k·莫里斯,s . Shende和s . c . Kassinos“测试驱动coarray遗留Fortran应用程序并行化,”学报第一国际研讨会软件工程高性能计算在计算科学与工程2013年11月,ACM 33-40页。。视图:出版商的网站|谷歌学术搜索
版权
版权©2015哈里Radhakrishnan et al。这是一个开放的分布式下文章知识共享归属许可,它允许无限制的使用、分配和复制在任何媒介,提供最初的工作是正确引用。