数据驱动并行计算的3层软件架构设计及应用
软件的三层架构

基于软件三层架构的研究报告引言三层结构是传统的客户/服务器结构的发展,代表了企业级应用的未来,典型的有Web下的应用。
多层结构和三层结构的含义是一样的,只是细节有所不同。
之所以会有双层、三层这些提法,是因为应用程序要解决三个层面的问题。
一、软件架构和分层(一)软件架构(software architecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。
软件架构是一个系统的草图。
软件架构描述的对象是直接构成系统的抽象组件。
各个组件之间的连接则明确和相对细致地描述组件之间的通讯。
在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。
在面向对象领域中,组件之间的连接通常用接口(计算机科学)来实现。
软件体系结构是构建计算机软件实践的基础。
与建筑师设定建筑项目的设计原则和目标,作为绘图员画图的基础一样,一个软件架构师或者系统架构师陈述软件构架以作为满足不同客户需求的实际系统设计方案的基础。
(二)分层分层是表示将功能进行有序的分组:应用程序专用功能位于上层,跨越应用程序领域的功能位于中层,而配置环境专用功能位于低层。
分层从逻辑上将子系统划分成许多集合,而层间关系的形成要遵循一定的规则。
通过分层,可以限制子系统间的依赖关系,使系统以更松散的方式耦合,从而更易于维护。
子系统的分组标准包含以下几条规则可见度。
各子系统只能与同一层及其下一层的子系统存在依赖关系。
(三)使用分层架构开发的必要性1、分层设计允许你分割功能进入不同区域。
换句话说层在设计是就是逻辑组件的分组。
例如,A层可以访问B层,但B层不能访问A 层。
2、用分层的方法,以提高应用程序的可维护性,并使其更容易扩展,以提高性能。
(四)设计分层的原则1、层意味着组建的逻辑分组。
例如,对用户界面,业务逻辑和数据访问组建应该使用不同的不同的层。
2、在一个层内组建应该聚合的。
如业务层组建仅应提供与业务逻辑相关的操作,而不是提供其他操作。
计算机科学中的计算机体系结构和并行计算

计算机科学中的计算机体系结构和并行计算计算机科学领域中的计算机体系结构和并行计算是两个重要的主题。
计算机体系结构涉及计算机硬件和软件组成的结构,而并行计算则关注多个任务同时进行的能力。
本文将介绍计算机体系结构和并行计算的基本概念、应用领域以及未来的发展趋势。
一、计算机体系结构计算机体系结构是指计算机硬件和软件之间的接口。
它定义了计算机的组成部分以及它们之间的交互方式。
计算机体系结构的主要组成部分包括中央处理器(CPU)、内存、输入输出设备等。
计算机体系结构可以分为单体系结构(SISD)、单指令多数据(SIMD)、多指令多数据(MIMD)等不同类型。
单体系结构是最简单的类型,它由一个处理器和一个内存组成。
它按部就班地执行指令,并逐个处理数据。
单指令多数据结构允许并行处理多个数据元素,这对于需要大量计算的任务非常有用。
而多指令多数据结构可以执行多个指令,并且可以操作多个数据集。
这种结构常用于超级计算机和并行计算领域。
二、并行计算并行计算是指多个任务同时进行的计算方式。
它通过将任务分解为多个子任务,并由多个处理器并行执行这些子任务。
并行计算具有高效、快速的特点,可以大大提高计算速度和处理能力。
并行计算广泛应用于科学计算、图像处理、数据挖掘等领域。
并行计算可以分为共享内存和分布式内存两种模式。
共享内存并行计算中,多个处理器共享同一个内存空间,它们可以直接相互访问和修改数据。
而分布式内存并行计算中,每个处理器都有自己的私有内存,并通过消息传递方式进行通信。
这两种模式各有优劣,根据具体应用和需求选择合适的方式。
三、计算机体系结构和并行计算的应用领域计算机体系结构和并行计算在许多领域都发挥着重要作用。
在科学计算中,计算机体系结构的设计和优化可以提高运算速度和精度,从而加快研究进程。
并行计算在天气预报、地震模拟、蛋白质折叠等复杂计算中得到广泛应用。
在人工智能领域,计算机体系结构和并行计算的进步为深度学习等任务提供了强大的计算支持。
并行计算机体系结构与应用

并行计算机体系结构与应用一、介绍并行计算机是一种基于多处理器系统的计算机,将一个大问题分成多个小问题,每个处理器同时解决一个小问题,然后将所有的结果合并起来得到最终结果。
并行计算机的主要特点是高性能和可扩展性。
在计算密集型应用中,它比传统的单处理器计算机有更好的性能表现。
在本文中,我们将介绍并行计算机体系结构和应用。
二、并行计算机体系结构并行计算机体系结构可以分为共享内存和分布式内存两种类型。
共享内存并行计算机中,所有处理器共享系统内存,每个处理器可以访问内存中的任何数据。
分布式内存并行计算机中,处理器之间没有共享内存,它们通过网络互连。
每个处理器只能访问它本地的内存。
1、共享内存并行计算机在共享内存并行计算机中,所有的处理器都共享一个物理内存。
当一个处理器需要访问内存的时候,它会向内存发出请求。
内存控制器会负责处理请求,并将数据保存在缓存中,如果其它处理器要访问相同的数据,那么它们可以从缓存中取出数据,这可以节省大量的访问时间。
共享内存并行计算机的优点是处理器之间可以共享数据,并且程序员不需要考虑数据的分配问题。
但是,这种体系结构也存在一些缺点,比如内存访问冲突和缺乏可靠性。
2、分布式内存并行计算机在分布式内存并行计算机中,每个处理器都有自己的物理内存,它们通过网络互连。
处理器之间的通信是通过发送和接收消息来完成的。
在分布式内存并行计算机中,处理器需要显式地将数据发送到其它处理器,这使得程序员需要考虑数据的分配问题。
然而,分布式内存并行计算机可以通过增加处理器的数量来提高性能,比共享内存并行计算机更具有扩展性。
三、并行计算机应用并行计算机的主要应用是在大型科学计算和工程领域。
以下是一些常见的应用领域:1、气象模拟气象模拟需要处理海量的数据,并且需要比较高的计算性能。
使用并行计算机可以加快气象模拟的速度,从而提高预报准确性。
2、生物信息学生物信息学需要处理大量的基因数据和蛋白质数据。
这些数据的处理需要快速和准确地分析和比较。
软件架构模式:掌握常见的软件架构模式和设计原则

软件架构模式:掌握常见的软件架构模式和设计原则软件架构是软件系统整体结构的框架,负责定义软件系统的各个组成部分之间的关系和交互方式。
在软件开发过程中,选择合适的软件架构模式可以提高软件系统的可维护性、扩展性和性能。
下面我们将介绍一些常见的软件架构模式和设计原则。
1.分层架构模式分层架构模式是将系统分为若干层次,每一层次有各自的功能和责任,各层之间通过明确的接口进行通信。
常见的分层架构包括三层架构和N层架构。
三层架构包括表示层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data Access Layer),分别负责显示用户界面、处理业务逻辑和与数据存储进行交互。
2. MVC模式MVC(Model-View-Controller)模式是一种将应用程序分为数据模型(Model)、视图(View)和控制器(Controller)三个部分的软件架构模式。
Model负责数据的管理和处理,View负责界面的展示,Controller负责处理用户的输入和决定视图和模型之间的交互。
3.微服务架构微服务架构是一种将一个大型软件系统拆分成多个小型、可独立部署的服务的架构模式。
每个微服务都可以独立开发、部署和运行,各个微服务之间通过API进行通信。
微服务架构可以提高系统的灵活性和可扩展性,有利于团队间的协作和部署的快速迭代。
4.事件驱动架构事件驱动架构是一种基于事件和消息传递的软件架构模式,系统中的各个组件相互之间通过事件的方式进行通信。
当一个组件的状态发生变化时,它会发布一个事件,其他组件可以订阅这个事件并做出相应的响应。
事件驱动架构可以降低系统组件之间的耦合度,提高系统的可扩展性和灵活性。
5.领域驱动设计(DDD)领域驱动设计是一种将软件设计与业务领域相结合的设计方法。
DDD将系统分为领域层、应用层和基础设施层,通过模型驱动的方式建模业务领域,并将业务规则和逻辑体现在软件设计中。
计算机的并行计算技术有哪些详解并行计算的架构与应用

计算机的并行计算技术有哪些详解并行计算的架构与应用在现代科技领域,计算机的并行计算技术被广泛应用于许多领域,提供了强大的计算能力和效率。
本文将详细解释并行计算的概念、架构和应用,以及介绍几种常见的并行计算技术。
一、并行计算的概念并行计算是指同时执行多个计算任务的过程,以提高计算机系统的速度和性能。
与传统的串行计算相比,通过并行计算,多个处理器可以同时处理不同的计算任务,从而大大缩短了计算时间。
二、并行计算的架构1. 对称多处理器(SMP)对称多处理器是一种常见的并行计算架构,它包含多个处理器核心(CPU),每个处理器核心都可以访问共享内存。
因此,每个处理器核心都具有相同的权限和能力,并且可以相互通信和协作。
2. 分布式内存计算机(DMC)分布式内存计算机是一种将多个计算机连接在一起,并通过网络进行通信的并行计算架构。
在分布式内存计算机中,每个计算机都有自己的本地内存,并且计算任务被划分为子任务,在多台计算机之间进行并行计算。
3. 向量处理器向量处理器是一种特殊的并行计算架构,其核心思想是通过同时执行多个数据元素来提高计算性能。
向量处理器具有广泛的数据并行能力,并且可以在单个指令中处理多个数据。
三、并行计算的应用1. 科学计算在科学研究领域,许多复杂的计算任务需要大量的计算资源和时间。
通过并行计算技术,科学家可以利用多个处理器来加速大规模的数值模拟、数据分析和计算实验,从而加快科学研究的进程。
2. 数据挖掘与机器学习数据挖掘和机器学习是分析和理解大规模数据集的重要领域。
并行计算技术可以加速数据挖掘算法和机器学习模型的训练和推断过程,减少模型训练时间,提高预测和分类准确性。
3. 图像和视频处理在图像和视频处理领域,许多算法需要处理大量的像素和帧。
通过并行计算技术,可以将图像和视频处理任务分成多个子任务,并在多个处理器上同时处理这些子任务,从而提高图像和视频处理的效率和实时性。
4. 数据库管理和并行查询在大规模数据库管理和查询中,通过并行计算技术可以将查询任务划分为多个子任务,并由多个处理器同时执行这些子任务。
软件开发中的三层架构技术分析

软件开发中的三层架构技术分析计算机普及之初,软件的开发使用的都是二层架构技术,即只考虑2个端点:客户端和服务器端。
用户通过客户端界面所提供的数据,直接在客户端对数据进行计算和处理,然后通过服务器在数据库中对数据进行读取等操作,得出需要的最终结果,并将结果传输到客户端界面显示给用户。
在这种方式中,客户端直接和服务器对接,没有其他数据处理环节,有利于提高数据库数据读取的速度,但缺点是当计算机软件的任何一个部分发生更改,哪怕是最微小的变动,整个计算机软件都需要重新开发,限制了软件的通用性。
特别是对于大型软件开发,除不利于软件的修改,在软件的开发期也存在很大的困难,需要程序编程人员相互高度配合,而且也不利于工作的分配。
为了解决这种矛盾,就出现了计算机软件的三层架构技术,将原先单一的客户端和服务器端的模式,根据功能分别拆分成表示层、业务逻辑层、数据访问层和数据实体层。
采用“分而治之”的思想,把复杂的问题分成不同的部分,即不同的层,以便逐个解决问题,便于软件的设计、控制、资源分配和修改。
为了让大家更好地了解三层架构技术,本文从几个方面对软件开发中的三层架构技术进行介绍。
1三层架构技术中具体分工和各层功能介绍(1)表示层:主要是指适合用户与计算机的交互界面,目的是为了方便用户数据的输入和显示处理后的数据结果,这部分工作主要由界面的美工完成。
软件设计人员通过表示层界面收集用户输入的数据要求,并把这些数据转换成业务逻辑层可以操作的数据。
同时也把业务逻辑层传出的结果转换成客户想要的效果,通过文本、图片、动画、3D等格式显示在用户眼前。
表示层也可以被理解为输入和输出的操作平台,我们可以创建一个图书馆,然后把客户要求设计成固定的元素:图片、脚本、CSS、附件等进行统一管理。
(2)业务逻辑层:又称为领域层,是表示层和数据访问层的中间桥梁,实现业务之间的逻辑处理,主要是对经过表示层输入的数据进行验证、计算和业务规则等方面的处理。
如何构建并行计算框架

如何构建并行计算框架构建一个并行计算框架需要考虑多个方面,包括任务调度、并行计算模型和资源管理等。
以下是一个构建并行计算框架的简单步骤和关键要点:1.设计并行计算模型:-首先,需要明确并行计算的目标和需求。
确定需要处理的任务类型、数据规模和预期性能。
- 然后,选择合适的并行计算模型。
常见的并行计算模型包括分布式内存计算模型(如MapReduce),并行数据库计算模型和共享内存计算模型。
-根据任务类型和数据规模,选择合适的并行算法和数据结构。
考虑任务间的依赖关系,确定任务之间的调度顺序。
2.任务调度:-设计一个任务调度器,负责将任务分配给各个计算节点。
根据任务的优先级和调度策略,动态调整任务的分配和调度。
-考虑任务调度的负载均衡问题,尽量保证各个计算节点的负载均衡,提高系统的整体性能。
-使用基于优先级的调度算法,提高任务的执行效率。
3.并行计算:-在并行计算框架中,需要实现任务的并行执行。
可以使用线程池或任务队列等方式,将任务分配给多个工作线程并行处理。
-确保任务之间的数据访问互斥,避免并发冲突。
可以使用互斥锁、信号量等机制,保证对共享数据的访问线程安全。
4.数据管理:-并行计算框架需要管理大量的数据,包括输入数据和计算中间结果。
设计一个高效的数据管理策略,尽量减少数据的传输和复制。
-考虑数据分区和数据划分的问题。
根据数据的特点和计算任务的需求,将数据划分为适当的块,分配给不同的计算节点并行处理。
5.故障处理:-并行计算框架需要具备一定的容错能力。
设计一个故障检测和恢复机制,能够及时发现计算节点的故障,并将任务重新分配给其他可用节点处理。
-考虑任务中断和数据丢失的情况,设计相应的容错策略和数据恢复机制。
6.性能优化:-对于大规模并行计算框架,性能优化是非常重要的。
可以采用一些优化手段,提高并行计算的效率。
如任务并行度的调整、任务的粒度控制、数据局部性的优化等。
-使用性能分析工具进行性能测试和性能调优,定期检查系统的性能指标,寻找优化的空间。
并行计算平台架构设计研究

并行计算平台架构设计研究随着科学技术的飞速发展,计算机已经成为各行各业的必备工具。
与此同时,随着数据规模的不断扩大,单机计算的局限性也越来越明显。
因此,并行计算平台日益成为了计算机领域的热门话题。
在这篇文章中,我们将探讨并行计算平台架构设计的研究。
一、并行计算平台概述并行计算平台是指由多台计算机构成的一个计算集群,各个计算节点按照一定的算法和协议通信,共同完成某个特定的计算任务。
这样的计算平台常常用于科学计算、大规模数据处理等场合,能够显著提高计算速度和数据处理效率。
二、并行计算平台的网络结构一个并行计算平台的网络结构包括两个方面:计算节点之间的网络连接和计算节点与外界网络之间的连接。
对于计算节点之间的网络连接,常见的架构包括总线式结构、环形结构、星型结构和树形结构等。
其中,总线式结构最为简单,但是设备间通信的并发度较低,容易出现瓶颈;环形结构和星型结构则能够提高并发度,但是节点之间的可扩展性较差;树形结构则是当前较为流行的并行计算平台网络结构,具有高并发度、良好的可扩展性和算法简单等优点。
对于计算节点与外界网络之间的连接,常用的方式是采用交换机和路由器构建局域网和广域网。
交换机是一种连接各个计算节点的核心设备,而路由器则负责将计算节点连接到Internet上。
这样的网络连接方式能够保证数据传输速度和数据传输稳定性。
三、并行计算平台的存储结构并行计算平台的存储结构可以分为共享存储和分布式存储两种方式。
共享存储是指多台计算机连接到同一个物理存储设备上,并通过协议实现数据共享的一种方式。
这种方式能够提高存储设备的利用率,但是容易出现瓶颈。
而分布式存储则是将数据分散存储在不同的存储设备,各个节点之间通过协议协同工作,完成数据的读写。
这样的存储结构具有高可靠性、高扩展性和高性能等优点。
四、并行计算平台的软件架构并行计算平台的软件架构是指在硬件架构基础上,为平台提供计算、通信、存储等服务的软件系统。
这样的软件系统包括操作系统、网络协议、并行编程环境和应用程序等。
- 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.并行流水线算法.输入:本地影像子图D-(k)、本地结点的优先级向量α(k).输出:无.算法步骤:1)FOR(D-(k)中每个本地结点i)结点i的状态值=结点入度;IF(结点i状态值等于0)THEN按优先级从高到低,将结点i插入本地就绪队列;ENDIFENDFOR2)WHILE(存在未被计算的本地结点)2.1WHILE(有消息到达)/*接收数据*/2.1.1接收消息中的截弧〈i,j〉以及结点i的计算结果;2.1.2结点j状态值减1;2.1.3IF(结点j状态值为0) THEN按优先级从高到低,将结点j插入本地就绪队列;ENDIFENDWHILE2.2IF(本地就绪队列为空)GOTO 2.12.3/*结点计算*/2.3.1从本地就绪队列中取出第1个结点i;2.3.2执行结点i对应的计算;2.3.3将结点i从本地就绪队列中删除;2.4/*发送数据*/2.4.1FOR (结点i的每条截弧〈i,j〉)2.4.1.1打包结点i的计算结果,发送给结点j的属主;ENDFOR2.4.2FOR (结点i的每条本地弧〈i,j〉)2.4.2.1结点j状态值减12.4.2.2IF(结点j状态值为0) THEN按优先级从高到低,将结点j插入本地就绪队列;ENDIFENDFORENDWHILE分析算法1,除了步骤2.3.2的结点计算和步骤2.1.1、步骤2.4.1.1打包/解包的数据内容与应用相关外,其他所有均与应用无关.此外,有向图剖分和结点优先级策略极大影响并行性能,但它们不涉及数值计算,与应用无关.因此对于数据驱动科学计算来说,由有向图剖分-优先级策略-并行流水线构成的算法框架是统一通用的.不同应用只需定制流水线算法中的结点计算函数和打包/解包函数,即可复用该并行算法框架.于是,在统一形式的数据驱动并行计算框架下,数据流有向图并行算法和并行实现技术的研究可以独立于具体的有向数据依赖关系计算方法,而研究成果又可以应用到这些计算方法的具体并行计算中,从而既实现了并行算法和计算方法之间的解耦,又使得数据流有向图并行计算具有普适性.2 3层软件架构在统一形式的数据驱动并行计算框架指导下,本文遵循层次化思想,分3层设计并行应用软件的体系结构.如图2所示,这3层自底向上依次为有向图调度层、有向图建模层和数值计算层.给定数据流有向图模型,调度层实现有向图并行计算;给定网格,建模层实现计算方法的数据流有向图建模;数值层基于网格,实现应用个性的数值计算代码.Fig.2 Three-level software architecture for parallel data-driven computation.图2 数据驱动并行计算3层体系结构示意图调度层是并行计算的核心层.该层面向数据流有向图模型,关注统一形式数据驱动并行算法的实现.其研究内容包括有向图模型的图剖分算法、结点优先级策略和并行流水线算法以及它们在不同的计算机体系结构上的高效实现技术.例如,针对分布存储并行机如何设置结点优先级,减少CPU空闲等待时间;在共享存储并行机上如何实现cache-aware的结点调度等.建模层封装数据流有向图建模方法,并为数值层提供面向网格的串行计算接口.在建模时,面对数值层的实际应用,建模层提供基于网格的数据依赖关系描述接口,然后将依赖关系存储到有向图,并向下传递给调度层.并行计算时建模层从调度层接收结点,将其映射成网格单元后向上传递给数值层,最后由数值层基于单元完成计算.这里,建模层面向数值层给出的数据依赖关系描述接口和单元计算格式接口都是基于网格给出的.因此,建模层对数值层屏蔽了有向图、并行计算等概念,并用离散网格和串行计算概念取代,简化了数值层的编程复杂度.数值层封装与具体数学方法和物理方程相关的计算代码.在这一层,用户只需针对特定的计算方法,提供单元间有向依赖关系的计算代码,以及单元上的计算格式即可.例如,对于辐射/中子输运方程的SN方法,用户只需要实现扫描方向与网格边夹角的串行计算代码,以及在单元上采用SN格式更新辐射/中子通量的串行计算代码.简而言之,在以上分层结构中,调度层最具共性,封装并行的、基于有向图的并行算法;建模层屏蔽调度层,封装数据流有向图建模,并提供串行的、基于网格的用户接口;数值层负责个性的、与应用相关的串行计算代码.3 在JASMIN框架中的实现JASMIN框架由北京应用物理与计算数学研究所研制,该框架围绕科学计算中普遍采用的结构网格或多块非结构拼接的结构网格,屏蔽高性能并行计算和自适应计算的实现细节,支撑创新计算方法和高性能算法的研究,支撑数千到数万处理器核规模的并行应用程序的研制.JASMIN框架提供数据驱动并行计算功能,该功能基于如前所述的3层软件架构实现.具体如图3所示,调度层和建模层具有共性,由JASMIN框架实现;数值层与应用相关,由用户实现.在调度层中,有向图并行调度模块立足于抽象的数据流有向图模型,实现了统一形式的数据驱动并行算法;在建模层,扫描积分构件基于以Patch为单位的数据结构,封装有向图建模,屏蔽有向图并行计算,并面向数值层提供串行接口.在数值层,用户基于扫描积分构件的串行接口,可以快速编程实现数据驱动并行计算应用软件.JASMIN框架采用构件化思想和C++面向对象技术,实现了有向图并行调度模块和扫描积分构件模块.以下分别介绍这2个模块的设计与实现.Fig.3 Software design of JASMIN parallel data-driven computation module.图3 JASMIN框架数据驱动并行计算模块设计3.1 有向图并行调度模块有向图并行调度模块结构如图3最底层所示,主体由5个部分组成.其中,数据流有向图模型基类定义了模型的统一访问接口,是并行调度模块与上层模块的连接子;有向图剖分、优先级策略和并行流水线算法3个子模块是有向图并行调度模块的核心,分别集成多种有向图剖分算法、结点优先级策略和并行流水线算法;通信池用于存储通信的所有消息事件.数据流有向图模型由有向图、结点策略、弧通信事件3类对象组成.有向图对象存储模型包含的结点和弧,并对外提供统一的后继结点、结点入度等访问接口;结点策略定义结点对应的计算任务;通信事件定义弧对应的数据通信任务,并提供数据打包/解包等操作接口.这些对象的具体类型由上层模块实现,本模块只操作这些对象的基类.数据驱动模块目前已针对分布式存储并行机体系结构,实现了有向图剖分、优先级策略和并行流水线算法.通过有向图剖分后,有向图模型在处理器间分布存储,每个进程只保存本地结点以及与本地结点关联的所有弧,包括本地弧和截弧.这里,本地弧指始点和终点都在本进程的弧,截弧指始点或终点不在本进程的弧.特别地,截弧对应的通信事件会触发进程间的通信.优先级策略为每个本地结点设置一个优先值,目前已实现先进后出策略、先进先出策略和最短边界路径优先策略[8].执行数据驱动并行计算时,如图4所示,每个进程包含一个通信池和一个调度器.调度器以本地子图模型为输入,并在通信池的协助下实现算法1.调度器内部维护了一个结点状态数组和一个就绪队列.其中,结点状态数组为每个本地结点记录当前未处理的入弧数目;就绪队列用于保存当前所有可立即投入计算的本地结点,并且按优先级从高到低排列这些结点.结点状态数组中,每个结点每处理完1条入弧,状态值就自动减1;当状态值等于0时,该结点就可被投入就绪队列.Fig.4 Parallel scheduling of DAG.图4 有向图并行调度图完成算法1的步骤1后,每个本地结点的状态值为其入度,并且就绪队列包含所有入度为0的本地结点.然后,调度器进入步骤2,按如下步骤执行流水线操作:1)接收数据.调度器从本地通信池中接收新到的通信事件,解包获取弧〈i,j〉以及相应的数据;然后将该弧终点j的状态值减1;如果更新后的状态值为0,则将结点j按优先级插入就绪队列中.2)结点计算.当就绪队列非空时,调度器从队列中取出优先级最高的结点,然后调用相应的结点策略类对象,执行计算.3)发送数据.完成结点计算后,调度器遍历当前结点的出弧,执行相应的操作(见算法1步骤2.4).具体分截弧和内部弧2种情况.针对截弧,调度器将截弧所关联的通信事件对象置入通信池.针对内部弧,更新后继结点的状态值;如果状态值为0,则将该后继结点按优先级插入就绪队列中.循环执行以上步骤,直到所有本地结点计算完毕.上述循环中,进程将通信池中的通信事件组装为MPI消息,调用函数MPI_Isend,将消息发送给目的进程;同时,不断探测和接收MPI消息并将其解析为通信事件.当通信池接收到调度器发来的接收请求时,则调用通信事件的解包函数,将数据从内部缓冲区解包到用户空间.3.2 扫描积分构件模块扫描积分构件采用构件化思想,支持用户将应用个性的串行数值代码与构件内部的通用并行调度算法相组装,快速实现特定数据驱动数值方法的并行计算.扫描积分构件的内部核心功能是二维/三维单层单块或多块结构网格上有向数据依赖关系计算方法的数据流有向图建模,其数据结构的基础是网格片.网格片是JASMIN框架的核心数据结构,指一小片逻辑矩形的计算区域.在JASMIN框架中,网格层被分成多个网格片,分布存储到指定的处理器集合上.每个处理器拥有一个或多个网格片.以图5(a)为例,一个20×20的网格层被分成7个网格片.这7个网格片被分布存储到2个处理器上,其中网格片边框的不同颜色代表网格片属于的不同处理器.物理量随网格片分布存储,对每个物理量,JASMIN 框架为其在每个网格片上设置一个数据片,存储该物理量在网格片及周围影像区上的值.例如针对图5(a)右下角7×15的网格片,其带1层影像区的数据片定义域宽度为9×17.图5(b)虚框内的数字指示了影像区数据所在的源网格片.如6号网格片左侧影像区的数据从上到下分别来自第2,3和4号网格片.Fig.5 Data structure of JASMIN.图5 JASMIN数据结构在数据驱动计算中,上游影像区单元的数据被填充后内部单元才能开始计算.扫描构件内部创建了系列通信事件,负责影像单元所需数据的打包/解包操作.在数据驱动并行计算流程中,这些通信事件将被依次调用,自动完成影像区数据的填充,从而使得积分构件的用户无需关注数据通信.扫描积分构件模块的实现如图3所示.其中,扫描积分构件是模块的核心;网格片扫描策略类声明了积分构件的串行配置接口,是积分构件与数值模块之间的连接子;扫描有向图模型存储网格单元间的有向依赖关系,该类派生于有向图模型基类,是扫描积分构件与有向图并行调度模块之间的连接子.扫描积分构件的网格片扫描策略类提供了3个串行配置接口,满足应用的定制需求.具体包括:1)基于网格片的单元依赖关系计算函数;2)待传递变量注册接口;3)基于串行单元序列的数值计算函数.在建模阶段,扫描积分构件通过调用网格片积分策略类的依赖关系计算接口,从上层用户代码获得单元间依赖关系,并存储到扫描有向图模型中,然后传递给下层的有向图调度模块.在执行数据驱动并行计算时,积分扫描构件通过扫描有向图模型,将就绪结点映射成网格单元,并将之传递给网格片积分策略的计算函数接口,从而实现了下层有向图调度模块与上层用户代码的对接.扫描积分构件的构造函数和扫描计算成员函数分别封装了上述复杂的数据驱动建模过程和数据驱动并行计算过程,使之对用户是不可见的.从而,扫描积分构件有效屏蔽了有向图、并行计算等概念,代之以离散网格和串行计算的概念,简化了扫描计算方法的编程复杂度.4 基于框架的应用示例SnSweep示例程序演示如何基于JASMIN框架,针对具体应用,实现有向数据依赖关系计算方法的数值层.SnSweep示例程序采用SN隐式迎风格式和源迭代法,求解三维中子输运方程.完整代码见JASMIN安装包内的example/SnSweep目录.基于JASMIN框架,SnSweep程序分别面向网格片和网格层,实现类SnSweep和类SnSweep-LevelIntegrator.前者重载网格片策略类的虚函数,实现基于网格片的有向依赖关系的计算、通量计算格式,以及其他与源迭代相关的串行计算代码.后者调用扫描积分构件以及其他构件,自动实现网格层上源迭代算法的并行计算.图6给出了类SnSweepLevelIntegrator实现并行源迭代的相关代码.其中,网格层初始化函数initializeLevelData()调用扫描构件的成员函数findDataDependency(),完成单元间有向数据依赖关系的并行配置;网格层时间步进函数advanceLevel()调用扫描构件的成员函数sweepingOnLevel (),自动完成通量扫描的自动并行(图6行⑯).相较于文献[12-16]中大篇幅的通量扫描并行算法实现,本文基于框架的实现只需一条语句就可完成通量扫描并行编程,明显简化了应用层的编程难度.Fig.6 Implementation of class SnSweepLevelIntegrator.图6 类SnSweepLevelIntegrator的源迭代实现5 性能测试层次化设计与实现使得JASMIN框架可以支撑用户快速开发数据驱动并行应用程序.但这种设计与实现在执行效率上是否会引入开销,以及是否并行可扩展是个需要考核的问题.以下2个测试用于分析JASMIN框架数据驱动并行计算的执行效率.5.1 软件层次化构架开销测试采用均匀矩形网格30×30×30、16群、8个角方向的离散规模.在Intel i5 2540M上,串行运行10个时间步,SnSweep程序的时间开销为46.6s.如表1所示,其中92%开销在应用程序代码,8%在JASMIN框架.这说明当前基于面向对象技术和框架分层结构的实现是有效的.Table 1 Time Distribution of a Serial SnSweep Run表1 SnSweep程序的串行时间开销分布Code Elapsed Time/s Percentage/%Total 46.6 100 Application 43.1 92 JASMIN 3.5 85.2 模型测试测试模型的几何区域固定为[0,1]×[0,1]×[0,1],群数为2,采用S8 纵标离散(80个方向).固定单机的网格规模为20×20×400,网格总数随处理器数量的增加而成比例增加.网格在处理器间只沿x和y轴方向等分,z轴不分.每次测试执行10个时间步,并固定每步的源迭代次数.表2记录了在某国产高性能并行机上,处理器数从1~2 048扩展时,SnSweep程序的执行时间和并行效率.如表2所示,SnSweep程序可扩展到2 048个处理器,并行效率达63%.Table 2 Weak Scalability of SnSweep Application表2 SnSweep程序的弱可扩展并行效率160 000cells,2groups and S8discretization on each processorProcesses Elapsed Time/s Parallel Efficiency 1 475 1.00 64 540 0.88 256 578 0.82 1 024 602 0.79 2 048 759 0.635.3 实际应用测试表3和表4给出了2个分别基于单块变形结构网格和多块变形结构网格的实际应用程序的并行性能测试数据.前者为中子输运程序,后者为辐射输运程序.前者测试模型的网格总规模固定为9万个网格单元,能群采用16群离散,方向采用S8离散(48个方向).从表3可见,该应用程序可扩展到上千核.Table 3 Strong Scalability of Neutron-Transportation Application表3 中子输运程序的强可扩展并行效率90 000cells,16groups andS8discretizationProcesses Elapsed Time/s Parallel Efficiency 8 401.6 1.00 32 117.3 0.86 128 37.1 0.68 512 12.3 0.51 1 024 6.85 0.46。