数据驱动并行计算的3层软件架构设计及应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据驱动并行计算的3层软件架构设计及应用
张爱清;莫则尧;杨章
【摘要】数据驱动并行计算是科学与工程计算中普遍存在的一类计算,其执行通常依赖于数据流有向图.在实际应用中,结点调度、数据通信和数值计算紧耦合并发执行,较难解耦编程,这给应用软件的协同研制和代码复用带来困难.借助于统一形式的数据流有向图并行算法框架,分无环有向图调度、无环有向图建模和数值计算3个层次,设计了软件体系结构,实现于并行自适应结构网格应用支撑软件(J parallel adaptive structured mesh applications infrastructure,JASMIN)框架的通量扫描积分构件中,有力地支持了结点调度、数据通信和数值计算的解耦编程.研究成果成功应用于科学计算中典型的中子输运计算,典型的代码开销测试和2 048个处理器核的并行性能测试表明,软件架构及其构件化实现是有效的.
【期刊名称】《计算机研究与发展》
【年(卷),期】2014(051)011
【总页数】9页(P2538-2546)
【关键词】数据驱动;并行计算;无环有向图;JASMIN框架;软件体系结构;解耦【作者】张爱清;莫则尧;杨章
【作者单位】北京应用物理与计算数学研究所北京 100094;计算物理重点实验室北京100094;
【正文语种】中文
【中图分类】TP311
在基于网格离散的科学与工程计算中,数据驱动计算普遍存在.在该类计算中,网格单元之间存在计算次序的严格约束,即网格单元的计算依赖于部分相邻网格单元的最新计算结果,也就是说,网格单元需要在部分相邻网格单元的最新计算结果的驱动下才能开始计算,并利用本单元的最新计算结果依序驱动相邻网格单元的计算.例如,流体力学计算中求解对流占优方程的隐式迎风格式、顺流松弛方法[1-3]和惯性约束聚变数值模拟中求解多群粒子输运方程的离散纵标方法[4-5]均属此类计算.网格单元间这种计算次序的严格约束称为有向数据依赖关系,具有有向数据依赖关系的计算称为数据驱动计算.
对一维网格情形,数据驱动计算一般只能串行执行;对高维网格情形,数据驱动计算通常具有并行度,只是它们隐藏在数据驱动的执行流程中,其挖掘需要设计和实现足够细粒度的并行算法,无法采用常用的大同步并行计算模型(BSP)[6-7].为此,通常需要采用数据流有向图对数据驱动计算进行精确建模,从而将数据驱动并行计算等价地转换为数据流有向图并行计算.在有向图中,结点表示网格单元,其权重代表该网格单元的计算时间开销;弧代表单元间的数据依赖关系,弧的权重代表数据通信时间开销(如果弧的两个结点被分配到不同处理器核).基于这种认识,文献[8]分有向图剖分、结点优先级策略和并行流水线算法3个部分,提出了统一形式的数据流有向图并行算法框架,涵盖了当前常用的并行算法的设计和分析.文献[9-11]结合实际应用,提出了系列的挖掘并行度的启示性算法.尽管如此,数据流有向图并行算法的编程实现仍然捆绑于实际应用.实际应用不同,编程实现的方法也不同;即使实际应用相同,不同的应用软件其编程实现的方法也不同.例如,二维非结构网格中子输运程序[12]、二维非协调网格辐射输运程
序[13]和三维结构网格Sweep3D测试程序[14]分别在不同的应用背景和不
同类型的网格上,编程实现了离散纵标方法的并行计算;Brown等人[15]和
Zuo等人[16]分别针对代数多重网格的光滑子和热传导方程的ADI格式,实现了多组独立的三对角方程组的可扩展并行求解;Bosilca等人[17]针对稠密矩阵LU分解实现了有向图并行计算;Meng等人[18]针对结构网格并行自适应计算提出了重叠通信与计算的有向图调度算法框架.这些应用软件或软件模块对数据流有向图的编程实现方法均不同.这样,数据驱动并行计算的代码无法在不同应用软件之间复用,更无法由多人协同研制,这对面向日趋复杂的计算机体系结构的复杂应用软件的研制和可持续发展而言,是一个亟待解决的难题.究其本质原因,存在于2个方面:1)数据依赖关系通常隐藏在实际应用的计算方法中,缺少统一形式的有向图建模;2)结点间的调度、结点间的数据通信和结点内的数值计算紧耦合并发执行,缺少抽象接口对其进行面向编程的解耦.
本文立足于文献[8]提出的统一形式的数据流有向图并行算法框架,针对无环有向图,提出数据驱动并行计算的3层软件架构:有向图调度层、有向图建模层和数值计算层.其中,有向图调度层针对数据流有向图,实现统一形式的并行算法;有向图建模层创建有向图,存储网格单元间的有向依赖关系,并定义接口函数,支持应用定制单元上的计算;数值计算层基于有向图调度层提供的接口函数,编程实现应用个性的数值计算代码.这样,在3个不同的层次,多人协同,可以研制不同的软件模块,分别实现有向图结点的并行调度、有向图的创建和存储、有向图结点的数值计算;同时,有向图结点的调度和有向图的创建和存储可以在不同应用中得到复用.
目前,本文提出的3层体系结构已经实现于并行自适应结构网格应用支撑软件(J parallel adaptive structured mesh applications infrastructure,JASMIN)框架[19-20]的通量扫描积分构件中.基于该构件,用户只需编写应用个性的串行代码、实现有向图结点的数值计算、定制有向图的弧就可以研制数据驱动计算软件模块.从而,应用程序的研制难度得到极大的简化.实际应用于科学计算中典型
的中子输运计算、典型的积分构件代码开销和2 048个处理器上的并行性能测试
表明,以上软件体系结构的设计和构件化编程实现是有效的.
1 统一形式的数据流有向图并行计算框架
文献[8]指出,对于基于网格的有向数据依赖关系计算方法,通常可以将计算划分成一系列基于网格单元的计算任务,这些任务以及任务间的有向依赖关系通常可用无环有向图精确刻画,构成数据流有向图模型.模型中结点对应网格单元计算任务,弧代表单元任务间的有向数据依赖关系.以粒子输运问题的离散纵标法(SN)扫描计算方法为例,在图1(a)所示网格上,沿给定箭头方向进行扫描计算时,
单元间的有向依赖关系可用图1(b)精确刻画.图1(b)中结点与图1(a)单
元一一对应;图1(b)中每条弧代表一对相邻单元间计算任务的依赖关系,例如
单元3依赖于单元1、单元5依赖于单元2等.于是,所有单元对应的结点构成
模型的结点集,所有相邻单元间的依赖关系构成模型中的弧集.这种从有向数据依赖关系计算方法抽象出数据流有向图模型的过程称为有向图建模.
Fig.1 Data-driven computation model of transportation-sweeping applications.图1 输运扫描的数据驱动计算模型
通过有向图建模,基于网格的数据驱动科学应用并行计算等价地转换成基于有向图的数据流并行计算.给定数据流有向图和P个处理器,并行计算由3个步骤构成:1)有向图剖分.将描述计算模型的有向图剖分为P个互不重叠的子图,并分配给各个处理器.每个处理器拥有唯一的子图,负责该子图中所有结点的计算以及子图之间的数据通信.2)结点优先级策略.每个结点分配一个本地优先级.在一个处理器内部,当多个本地结点同时就绪时,优先级最高的结点将被最先计算.3)并行流水线算法.给定有向图剖分和结点优先级,并行流水线算法遵循有向数据依赖关系,完成数据驱动并行计算.其中,并行流水线算法是核心.
算法1.并行流水线算法.