一种基于图拓扑结构的数据并行处理方法

文档序号:6600990阅读:521来源:国知局
专利名称:一种基于图拓扑结构的数据并行处理方法
技术领域
本发明涉及并行计算技术领域,尤其涉及一种基于异构多核架构的通用并行数据 处理方法。
背景技术
随着当今科学技术的迅猛发展,高性能计算已经成为科学技术发展中具有战略重 要性的研究手段,它与传统的理论研究和实验室实验一起构成了现代科学技术和工程设计 中互相补充、互相关联的研究方法,被国际上称为21世纪科学研究的三大“支柱”。高性能 计算机的应用领域主要集中在科学研发、电信、金融、政府等,所以高性能计算机对于国家 的贡献当然是功不可没的,为了加快当今信息化建设的步伐,越来越多的领域应用到高性 能计算技术。高性能计算极大地加快了计算的速度,缩短了研制和生产周期。它的应用,大 大拓宽了研究能力,促进和推动了现代科学与工程技术的发展。加快发展高性能计算对于 提升我国科技自主创新能力、增强国家竞争力、保障国家安全、促进国民经济建设、建设创 新型国家具有十分重要的战略意义。在高性能计算领域的发展过程中,以RISC架构为主导的小型机曾经称霸高性能 计算市场,后来由于X86架构的发展,在价格上占有绝对优势的X86架构最终以集群的形式 取代了小型机。虽然通过创建分布式系统可以解决部分大型计算的问题,但是分布式系统 有通信开销大,故障率高;数据的存取结构复杂,开销大;数据的安全性和保密性较难控制 等弱点。随着计算机处理器,特别是GPU(Graphical Processing Unit)计算能力的飞速 提高和低廉的价格,高性能计算逐步进入桌面(低端)领域,使得每一名研究人员、科学家 以及工程师都有可能拥有自己的超级计算机,能够更快的解决问题,加快了科学发展的节 奏。现在的GPU包含了上百个处理单元,对单精度浮点运算可以获得1TFL0PS的性能,对双 精度浮点运算也可以获得超过80GFL0PS的性能,可以拥有4GB的显存,超过100GB/秒的带 宽。尽管GPU原本是一种专为图形计算而设计的处理器,然而特别适合做大规模并行计算 的GPU以强大的计算性能、较低的能耗、低廉的价格以及占地面积较小等特点迅速出现在 许多非图形应用的高性能计算领域。如今,许多重要的科学工程都正在尝试将GPU计算能 力添加到他们的代码里。软件工程师们正热烈期待着他们的工作能够通过GPU获得卓越的 性能。然而,目前的大多数应用程序直接移植到GPU上来并不会立即得到性能的提高, 甚至还会出现性能的下降。这主要是因为这些程序和结构并不是针对GPU架构的特点而设 计的,无法挖掘出GPU全部的计算能力。如何利用并行应用程序进行高效的数据处理通常 是一件复杂而耗时的工作。

发明内容
本发明提供了一种基于图拓扑结构的数据并行处理方法,以解决复杂的应用程序 在执行过程中可能出现的不可预测的动态不规则执行行为和不规则数据结构,其难以在当前硬件并行架构下有效执行的问题,同时使应用程序进行数据并行处理时能够最大限度地 有效使用硬件的计算资源和存储资源。所述的不可预测的动态不规则行为,是指许多算法的执行过程具有不确定性,例如,函数递归执行的每一次迭代过程都需要根据前一次迭代的结果进行动态的分析,每次 迭代可能产生新的任务,也可能就此终止,因此这种迭代的执行是不可预测的,无法在程序 执行前静态确定,而且为成千上万的活动线程提供递归空间需要非常巨大的存储空间,这 在现有的基于数据并行的编程模型中也很难有效的执行;另外,对于树、链表等不规则数据 结构来说,它们无法在编译期间确定数据的分配和存储,程序运行时又很难确定数据局部 性存储的布局,因此现有的编程模型很难有效的处理这种不规则数据结构。—种基于图拓扑结构的数据并行处理方法,执行在具有GPU和CPU处理器的计算机中(1)将进行数据处理的应用程序划分成若干执行行为;每个执行行为可以完成至少一个对数据的基本操作,例如数据的访问、数据的存 储等,或者计算指令;(2)根据执行行为对数据的基本操作类型以及计算指令类型,将所有的执行行为 划分成若干个任务,即将相似的执行行为划入同一个计算任务中;相似的执行行为,是指具有相同的计算操作或相似的存储操作,相似的存储 操作是指对数据的访问保持在存储区域的局部范围内,此步骤的划分可以满足硬件的 SIMD(Single Instruction, Multiple Data)执行特性和存储的局部访问特性。每个任务完成指定的计算任务,划分时尽可能的短小而功能单一,任务间根据具 体的情况可以并行执行,也可串行执行。(3)将应用程序需要处理的数据分为静态数据和动态数据,在可执行所述的应用 程序的计算机显存中划分存储空间(存储池),在该存储空间中分别为静态数据和动态数 据划分存储区域,即存储空间中一部分用于存储静态数据,其余的空间用于存储动态数据。其中静态数据是指在应用程序执行过程中不会改变的数据,而动态数据是指在应 用程序执行过程中产生的新数据。所有这些信息预先记录在一个配置文件里;(4)根据对数据的处理方式,将步骤(2)中任务分为计算型任务和逻辑判断型任 务,在GPU上运行计算型任务,在CPU上运行逻辑判断型任务。在步骤(4)中针对步骤(2)中的每一个计算型任务分别建立数据队列,将每一个 任务需要处理的数据以数据包的形式存放在相应的数据队列中;由于在一个任务里不可能访问到存储池中所有的静态数据,为了减少任务执行时 数据在存储区域范围内的移动次数,可以根据静态数据在存储空间内的位置分布,将数据 包分为若干子队列,同一子队列所对应的静态数据在存储空间内的位置相邻。此外,还可 以根据不同应用程序的具体特点使用其它分类原则进一步划分,以便于更有效地进行SIMD 操作和局部访存。一些应用程序可能需要顺序的处理数据包(如一些图形算法),因此我们 在每个数据队列上都作了标记,需要顺序处理的数据包我们将按照先进先出(FIFO)的顺 序处理,否则将会以乱序方式对数据包进行处理。终上所述,通过使用队列,我们可以将任务所需要的或者所产生的数据按照相似 性原则动态地组织起来,所述的相似性具体是指存储相似性、结构相似性和处理相似性,最终使任务可以按需获取数据,减少了昂贵的数据转移操作,特别适合需要频繁访问数据或 者需要访问海量数据的应用程序。(5)根据任务执行时任务生成的数据的流向,以及需要调用的数据所在的位置 (数据所处的数据队列),建立图拓扑结构,根据图拓扑结构执行应用程序。执行应用程序 时,不同的任务之间通过其相应的数据队列进行通讯和交换数据。通过使用这种图拓扑结构,具有递归等动态执行行为的计算任务遇到递归行为时 可以按照图拓扑结构中数据的流向将数据转移给可以执行该递归行为的计算任务,同时结 束该计算任务,避免了递归行为的出现,最终使并行执行的线程可以以相同的指令同时结 束,避免执行分支的出现,从而有效地使用了硬件的并行计算资源。本发明对具有动态特征执行行为和不规则数据结构的复杂算法做了专门的优化, 能够在程序运行时根据存储局部性原则和SIMD操作机制对数据进行动态管理,使程序能 够最大限度地有效使用硬件的计算资源和存储资源。利用本发明方法可以迅速而便捷的开 发出高性能的并行执行的应用程序,这无疑将会大大加快程序开发的进度和效率,节省研 发费用。
本发明的实施可以基于更成熟的异构多核架构,比如NVIDIA公司最新推出 的Fermi架构,或者Inter公司即将推出的Larrabee架构等,这些架构一般均具有超过 1TFLOPS的浮点运算能力,超过20的多核处理器,上百的硬件线程以及复杂的存储层次结 构。


图1为分别使用CUDA及本发明模型对场景Burmy、Fairy、BART Kitchen进行绘制 时所需的计算花销与管理花销对比。
具体实施例方式选择一台配有一颗Intel Xeon 3. 7GHz 的 4 核 CPU,一颗 NvidiaGTX285 (1G 显存) 的PC来验证本发明的可行性。基于PTX指令集实现了一套基于上述方法实现的编程接口, 并按照本发明所提出的方法去重新设计和编写图形学中具有大量动态不规则性行为的光 线跟踪算法,并与使用Nvidia公司的CUDA编程模型编写的代码所得到的效果作对比,并做 了如下分析。将应用程序划分成若干计算任务,为了满足硬件的SIMD/SIMT操作和局部访存特 性,我们使具有相似执行行为或者相似访存行为的计算封装在一个计算任务内以进行有效 的处理,每个计算任务尽可能的短小而功能单一,计算任务间根据具体的情况可以并行执 行,也可串行执行。计算任务内部以数据并行方式计算,而计算任务间以任务并行方式异步 计算。每一个计算任务都设有一个状态,用以处理可能存在相互依赖关系的计算任务间的 执行。根据光线跟踪算法中计算任务的特点在应用程序执行管道中创建了 6个计算任 务,分别进行光线产生、遍历加速结构、面片相交、着色、阴影等计算任务,同时在数据任务 调度管道中进行光线排序和光线包的创建。这些任务均具有较好的并行执行能力,即较宽 的SIMD执行宽度,但是光线的递归特性使得SIMD有效使用率很可能随着递归的进行而剧烈下降。另外,我们在实现时使用延迟计算技术来进一步提高SIMD利用率,即如果着色任 务经计算后无法产生足够的光线而形成一个完整的光线包,相交计算将被延迟直到完整的 光线包已经形成;同样地,如果相交计算任务无法产生足够多的光线进行着色计算,着色计 算也将被延迟。将数据分为静态数据和动态数据,其中静态数据是指在应用程序执行过程中不会 改变的数据,而动态数据是指在应用程序执行过程中产生的不断变化的新数据。在初始化 时设置一个存储池,根据具体的应用程序为静态数据在显存中分配一定的空间,其余的空 间为动态数据所占有。所有这些信息记录在一个配置文件里。一些应用程序所需的静态数据大小可能超出了显存的大小,这样就可能在程序执 行过程中动态的调度静态数据,而每次导入的数据大小不一定跟上一次完全一致,这样就 可能在静态数据区域和动态数据区间产生碎片。为了避免碎片的产生而有效的使用显存, 我们可以在显存中采用双向分配的方法,在存储池的低地址端存放静态数据,而在存储池 的高地址端存放动态数据。为了解决复杂的应用程序在执行过程中可能出现的不可预测的动态不规则执行 行为,使用一种可以动态扩展的图拓扑结构作为应用程序的执行管道,其核心思想是计算 任务作为图结构中的结点,在程序运行前根据程序运行时可能出现的动态执行行为预先在 配置文件中建立计算任务间的图拓扑结构,具有可确定的规则执行行为的部分在静态编译 时确定。根据任务执行时任务生成的数据的流向,以及需要调用的数据所在的位置(数据 所处的数据队列),建立图拓扑结构,根据图拓扑结构执行应用程序。执行应用程序时,不同 的任务之间通过其相应的数据队列进行通讯和交换数据。正如前面所述,使用图结构表达这些计算任务之间的执行关系,每个计算任务都 有专门的数据队列供其使用,使用我们提供的入队原语操作不断重新组织数据队列中的数 据。由于光线跟踪算法中很多计算都消耗在了光线的遍历和相交操作上,为了尽量减少无 效的计算操作,根据加速结构的结构建立相应的图拓扑结构,使得计算可以局部在某一节 点处,而不必每次计算都从根节点从头进行。具有递归等动态执行行为的计算任务遇到递 归行为时可以按照图拓扑结构中数据的流向将数据转移给可以执行该递归行为的计算任 务,同时结束该计算任务,避免了递归行为的出现,最终使并行执行的线程可以以相同的指 令同时结束,避免执行分支的出现,从而有效地使用了硬件的并行计算资源。根据对数据的处理方式,将任务分为计算型任务和逻辑判断型任务,在GPU上运行计算型任务,在CPU上运行逻辑判断型任务。每一个计算任务都有一个相应的队列,里面 存放的是等待该计算任务处理的数据。数据以包的形式存放在队列中,包的大小根据多处 理器SIMD的执行宽度而定。数据队列用于进行异步通讯,动态地收集该计算任务执行中所 需要的数据,以满足硬件的局部相似性执行特性。尽管我们可以通过展开循环来解决程序 的一些递归执行问题,但是很多不规则的算法的递归次数是无法确定的,而图的循环特性 恰恰可以使计算任务间进行低开销的任意次数的反馈操作,无需预先确定,队列可以很好 的处理计算任务循环操作中动态产生的大量不规则存储的数据。计算任务只能通过其相应 的数据队列与其它计算任务进行通讯和交换数据。计算任务每次执行都可能会消耗一些数据,也可能会产生大量新的数据,进而使计算任务所对应的数据队列中的元素发生不规则变化;另外,一些数据可能需要在多个计 算任务间共享、重用。因此,为了满足局部相似性原则和SIMD操作特性,使计算尽量集中在 局部数据集中进行,有必要对这些数据重新组织,进行重新打包和分组,同时使数据根据图 的拓扑结构流向所对应的计算任务数据队列中,在数据队列中产生新的数据包等待计算任 务处理,从而保证计算可以继续在硬件上有效地进行。通过提供获取、交付、入队三种编程 原语,以方便计算任务间通过异步的方式高效地生产或者消费相应数据队列中的数据包, 控制数据的动态流动,加大编程的可操作性。获取操作可以指定数据队列中连续的一块数 据包区域,表明这些数据包即将被处理;交付操作表明这些数据包已经被处理,其它计算任 务可以使用它们;而入队操作则用来动态地将新生成的数据元素组织成包的形式。由于在一个计算任务里不可能访问到存储池中所有的静态数据,为了减少昂贵的 数据移动次数,我们根据所需的静态数据范围将数据队列中的数据包细分为若干子队列。 此外,还可以根据不同应用程序的特点使用其它分类原则进一步划分,以便于更有效地进 行SIMD操作和局部访存。一些应用程序可能需要顺序的处理数据包(如一些图形算法),因 此我们在每个数据队列上都作了标记,需要顺序处理的数据包我们将按照先进先出(FIFO) 的顺序处理,否则将会以乱序方式对数据包进行处理。终上所述,通过使用队列,我们可以 将计算任务所需要的或者所产生的数据按照相似性原则动态地组织起来,这里的相似性具 体是指存储相似性、结构相似性和处理相似性,最终使计算任务可以按需获取数据,减少了 昂贵的数据转移操作,特别适合需要频繁访问数据或者需要访问海量数据(out-of-core 数据)的应用程序。选择具有不同几何复杂度的测试场景,Burmy,Fairy,BART Kitchen作为测试模型 文件,绘制分辨率为1024*1024。图拓扑结构和相应的数据队列机制可以很容易地表达光 线跟踪算法中的动态不规则行为,不断收集相似性数据和组织局部性数据,并放入相应的 数据队列中,保证了计算任务可以一直在图拓扑结构中高效运行。分别使用了本发明方法 和CUDA编程模型对这个场景进行测试,结果如表1所示,可见本发明方法相比CUDA来说, 取得了更好的性能。表 1 分别使用CPU的SIMD指令、CUDA以及本方法在加速结构构造时间方面⑶的比较。为了进一步说明本发明方法能够有效处理算法中的动态不规则性行为,着重列出 了分别使用CPU的SIMD指令、CUDA以及本方法在加速结构构造时间方面的比较,如表1所 示。这里我们使用KD树作为构造结构,可见本发明方法相比SIMD方法获得了近10倍的性能提升,相比CUDA,也缩减了近一半的时间。 如上所述,本发明方法为了能够保证硬件计算资源的有效利用率,最大限度地合 理使用计算资源和存储资源,通过数据重组来控制数据按照相似性原则进行处理。这种方 法明显地提升了算法的性能,但也带来了一定的开销。为了验证这些开销的利弊程度,统计 了分别使用CUDA及本模型对场景Fairy进行绘制时所需的计算花销与管理花销。如图1 所示(图中条形左侧数值表示计算花销、右侧数值表示管理花销),尽管本发明方法所带来 的管理开销明显超过使用CUDA所产生的管理花费,但是从总体花销角度来说,正是由于本 发明方法复杂的数据与任务管理,使得硬件有效计算率更高,计算花费大大减少,从而使总 体花费的时间趋于减少。
权利要求
一种基于图拓扑结构的数据并行处理方法,其特征在于,执行在具有GPU和CPU处理器的计算机中(1)将进行数据处理的应用程序划分成若干执行行为;(2)根据执行行为对数据的基本操作类型,将所有的执行行为划分成若干个任务;(3)将应用程序需要处理的数据分为静态数据和动态数据,在可执行所述的应用程序的计算机显存中划分存储空间,在该存储空间中分别为静态数据和动态数据划分存储区域;(4)针对步骤(2)中的每一个任务分别建立队列,将每一个任务需要处理的数据以数据包的形式存放在相应的数据队列中;(5)根据任务执行时任务生成的数据的流向,以及需要调用的数据所在的位置,建立图拓扑结构,根据图拓扑结构执行应用程序,执行应用程序时,不同的任务之间通过其相应的数据队列进行通讯和交换数据。
2.根据权利要求1所述的数据并行处理方法,其特征在于,每个执行行为可以完成至 少一个对数据的基本操作或者计算操作。
3.根据权利要求1所述的数据并行处理方法,其特征在于,所述的静态数据是在应用 程序执行过程中不会改变的数据,所述的动态数据是在应用程序执行过程中产生的数据。
4.根据权利要求1所述的数据并行处理方法,其特征在于,步骤(4)中所述的数据队列 继续分为若干子队列,同一子队列所对应的静态数据在存储空间内的位置相邻。
全文摘要
本发明公开了一种基于图拓扑结构的数据并行处理方法,(1)将进行数据处理的应用程序划分成若干执行行为;(2)根据执行行为对数据的基本操作类型,将所有的执行行为划分成若干个任务;(3)将应用程序需要处理的数据分为静态数据和动态数据;(4)针对步骤(2)中的每一个任务分别建立队列,将每一个任务需要处理的数据以数据包的形式存放在相应的数据队列中;(5)根据任务执行时任务生成的数据的流向,以及需要调用的数据所在的位置,建立图拓扑结构并执行应用程。本发明使程序能够最大限度地有效使用硬件的计算资源和存储资源,可以迅速而便捷的开发出高性能的并行执行的应用程序,大大加快程序开发的进度和效率,节省研发费用。
文档编号G06F15/16GK101840329SQ201010150568
公开日2010年9月22日 申请日期2010年4月19日 优先权日2010年4月19日
发明者杨鑫, 许端清, 赵磊 申请人:浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1