一种基于多重并行的数据通用处理方法

文档序号:6600987阅读:125来源:国知局

专利名称::一种基于多重并行的数据通用处理方法
技术领域
:本发明涉及并行计算
技术领域
,尤其涉及一种基于异构多核架构的通用数据并行处理方法。
背景技术
:随着当今科学技术的迅猛发展,高性能计算已经成为科学技术发展中具有战略重要性的研究手段,它与传统的理论研究和实验室实验一起构成了现代科学技术和工程设计中互相补充、互相关联的研究方法,被国际上称为21世纪科学研究的三大“支柱”。高性能计算机的应用领域主要集中在科学研发、电信、金融、政府等,所以高性能计算机对于国家的贡献当然是功不可没的,为了加快当今信息化建设的步伐,越来越多的领域应用到高性能计算技术。高性能计算极大地加快了计算的速度,缩短了研制和生产周期。它的应用,大大拓宽了研究能力,促进和推动了现代科学与工程技术的发展。加快发展高性能计算对于提升我国科技自主创新能力、增强国家竞争力、保障国家安全、促进国民经济建设、建设创新型国家具有十分重要的战略意义。在高性能计算领域的发展过程中,以RISC架构为主导的小型机曾经称霸高性能计算市场,后来由于X86架构的发展,在价格上占有绝对优势的X86架构最终以集群的形式取代了小型机。虽然通过创建分布式系统可以解决部分大型计算的问题,但是分布式系统有通信开销大,故障率高;数据的存取结构复杂,开销大;数据的安全性和保密性较难控制等弱点。随着计算机处理器,特别是GPU(GraphicalProcessingUnit)计算能力的飞速提高和低廉的价格,高性能计算逐步进入桌面(低端)领域,使得每一名研究人员、科学家以及工程师都有可能拥有自己的超级计算机,能够更快的解决问题,加快了科学发展的节奏。现在的GPU包含了上百个处理单元,对单精度浮点运算可以获得1TFL0PS的性能,对双精度浮点运算也可以获得超过80GFL0PS的性能,可以拥有4GB的显存,超过100GB/秒的带宽。尽管GPU原本是一种专为图形计算而设计的处理器,然而特别适合做大规模并行计算的GPU以强大的计算性能、较低的能耗、低廉的价格以及占地面积较小等特点迅速出现在许多非图形应用的高性能计算领域。如今,许多重要的科学工程都正在尝试将GPU计算能力添加到他们的代码里。软件工程师们正热烈期待着他们的工作能够通过GPU获得卓越的性能。然而,目前的大多数应用程序直接移植到GPU上来并不会立即得到性能的提高,甚至还会出现性能的下降。这主要是因为这些程序和结构并不是针对GPU架构的特点而设计的,无法挖掘出GPU全部的计算能力。如何利用并行应用程序进行高效的数据处理通常是一件复杂而耗时的工作。
发明内容本发明提供了一种融合了数据并行、任务并行、管道并行的多重并行数据处理方法,可以使应用程序进行数据处理时能够最大限度地有效使用硬件的计算资源和存储资源。一种基于多重并行的数据通用处理方法,执行在具有GPU和CPU处理器的计算机中(1)将进行数据处理的应用程序划分成若干执行行为;每个执行行为可以完成至少一个对数据的基本操作,例如数据的访问、数据的存储等,或者计算指令;(2)根据执行行为对数据的基本操作类型以及计算指令类型,将所有的执行行为划分成若干个任务,即将相似的执行行为划入同一个计算任务中;相似的执行行为,是指具有相同的计算操作或相似的存储操作,相似的存储操作是指对数据的访问保持在存储区域的局部范围内。此步骤的划分可以满足硬件的SIMD(SingleInstruction,MultipleData)执行特性和存储的局部访问特性。每个任务完成指定的计算任务,划分时尽可能的短小而功能单一,任务间根据具体的情况可以并行执行,也可串行执行。(3)将应用程序需要处理的数据分为静态数据和动态数据,在可执行所述的应用程序的计算机显存中划分存储空间(存储池),在该存储空间中分别为静态数据和动态数据划分存储区域,即存储空间中一部分用于存储静态数据,其余的空间用于存储动态数据。其中静态数据是指在应用程序执行过程中不会改变的数据,而动态数据是指在应用程序执行过程中产生的新数据。所有这些信息预先记录在一个配置文件里;(4)根据对数据的处理方式,将步骤(2)中任务分为计算型任务和逻辑判断型任务,在GPU上运行计算型任务,在CPU上运行逻辑判断型任务,本发明采用基于管道并行、数据并行、任务并行的多重并行执行方式,完成应用程序的执行。管道是一种生产者一消费者执行模式,适合绝大多数应用程序的计算流程,而且管道通过数据重组可以有效地平衡工作负载,避免某一单元可能出现过多输出而使整个计算流程负载不均;数据并行执行模型正如当前主流的编程模型一样,如CUDA(ComputeUnifiedDeviceArchitecture),对大规模的整齐同构的数据集可以充分利用硬件SIMD特性,隐藏访存延迟;任务执行模型是一种可扩展的执行模式,可以明确地表示出程序执行过程中各单元的相互依赖关系以及动态的执行行为。为了充分发挥异构多核架构的特点,合理地使用硬件资源,本发明采用管道并行数据处理模式,将涉及大量计算的应用程序执行管道运行在GPU上,而涉及大量逻辑判断的数据任务调度管道运行在CPU上,两种管道异步并行执行,数据任务调度管道要比应用程序执行管道提前运行。通过这种管道并行执行模式,既可以保证计算的独立性和并行性,也可以避免使用原子、锁等昂贵的同步操作。在应用程序执行管道中,同一计算任务内部的执行行为以数据并行方式执行,而不同计算任务间的执行行为以任务并行的方式异步执行。由于一些程序可能产生不可预测的数据量而造成整个执行管道负载不均衡的情况。数据并行的执行模式很可能使一个任务产生大量新的数据,很难同时对这些数据进行存储并使用它们,大量新的数据也可能迅速消耗掉有限的显存,而且由于这些数据的产生是随机的不可预测的,也增加了对数据管理的难度。因此,执行步骤(4)之前,判断所要执行的任务将产生的新数据的大小是否超出了当前存储池的剩余空间;一旦经判断超出了存储池的剩余空间,我们将对该任务需要处理的数据进行分组,使数据分批进行处理。这种方法将会大大降低一些涉及到海量数据的算法给系统存储和带宽造成的负担,使显存中的数据都是正在计算的线程所需要的数据,从而进一步加强了线程的并行计算效率,提高了对硬件的有效使用能力。由于在任务运行时,有可能出现不可预测的新任务,因此本发明采用基于优先级的动态调度,同时根据所调度的任务管理相应的数据转移。对每一个任务(包括步骤(2)中的任务以及在任务运行时出现的新任务)都设置一个优先级状态,当新任务出现时,根据所有任务的优先级状态选择优先级高的任务依次运行。衡量任务的优先级主要基于其所需数据在存储层次的位置、所需处理器的类型以及所需数据集的大小。以数据驱动的方式进行任务调度,根据已空闲处理器的类型和当前存储池中静态数据所对应的任务进行调度。具体来说,按优先级由高到低的顺序结合以下几条原则(1)任务的执行不需要静态数据;(2)所需数据在cache里;(3)优先处理具备充分相似性数据的任务,或者产生的数据可以协助其它任务提高执行的优先级,或者多个任务的执行具有相似性。(4)所需数据在GPU显存;(5)所需数据在CPU内存;(6)所需数据正在由硬盘传输到内存;(7)所需数据集太小而无法充分利用硬件计算能力。本发明方法的实施基于更成熟的异构多核架构,比如NVIDIA公司最新推出的Fermi架构,或者Inter公司即将推出的Larrabee架构等,这些架构一般均具有超过1TFLOPS的浮点运算能力,超过20的多核处理器,上百的硬件线程以及复杂的存储层次结构。本发明数据处理方法针对具有动态特征执行行为和不规则数据结构的复杂算法做了专门的优化,能够在数据处理时根据存储局部性原则和SIMD操作机制对数据进行动态管理使应用程序进行数据处理时能够最大限度地有效使用硬件的计算资源和存储资源。利用本发明方法可以迅速而便捷的开发出高性能的并行执行的应用程序,这无疑将会大大加快程序开发的进度和效率,节省研发费用。图1为CUDA及本发明模型随着场景复杂度递增所表现出的性能分析。具体实施例方式选择一台配有一颗IntelXeon3.7GHz的4核CPU,一颗NvidiaGTX285(1G显存)的PC来验证本发明的可行性。基于PTX指令集实现了一套基于上述方法实现的编程接口,并按照本发明所提出的方法去重新设计和编写图形学中具有大量动态不规则性行为的光线跟踪算法,并与使用Nvidia公司的CUDA编程模型编写的代码所得到的效果作对比,并做了如下分析。将应用程序划分成若干计算任务,为了满足硬件的SIMD/SIMT操作和局部访存特性,我们使具有相似执行行为或者相似访存行为的计算封装在一个计算任务内以进行有效的处理,每个计算任务尽可能的短小而功能单一,计算任务间根据具体的情况可以并行执行,也可串行执行。计算任务内部以数据并行方式计算,而计算任务间以任务并行方式异步计算。每一个计算任务都设有一个状态,用以处理可能存在相互依赖关系的计算任务间的执行。根据光线跟踪算法中计算任务的特点在应用程序执行管道中创建了6个计算任务,分别进行光线产生、遍历加速结构、面片相交、着色、阴影等计算任务,同时在数据任务调度管道中进行光线排序和光线包的创建。这些任务均具有较好的并行执行能力,即较宽的SIMD执行宽度,但是光线的递归特性使得SIMD有效使用率很可能随着递归的进行而剧烈下降。另外,我们在实现时使用延迟计算技术来进一步提高SIMD利用率,即如果着色任务经计算后无法产生足够的光线而形成一个完整的光线包,相交计算将被延迟直到完整的光线包已经形成;同样地,如果相交计算任务无法产生足够多的光线进行着色计算,着色计算也将被延迟。将数据分为静态数据和动态数据,其中静态数据是指在应用程序执行过程中不会改变的数据,而动态数据是指在应用程序执行过程中产生的不断变化的新数据。在初始化时设置一个存储池,根据具体的应用程序为静态数据在显存中分配一定的空间,其余的空间为动态数据所占有。所有这些信息记录在一个配置文件里。—些应用程序所需的静态数据大小可能超出了显存的大小,这样就可能在程序执行过程中动态的调度静态数据,而每次导入的数据大小不一定跟上一次完全一致,这样就可能在静态数据区域和动态数据区间产生碎片。为了避免碎片的产生而有效的使用显存,我们可以在显存中采用双向分配的方法,在存储池的低地址端存放静态数据,而在存储池的高地址端存放动态数据。如上所述,为了充分发挥异构多核架构的特点,合理地使用硬件资源,本发明设计了应用程序执行管道与数据任务调度管道相结合的管道并行执行模式,将涉及大量计算的应用程序执行管道运行在GPU上,而涉及大量逻辑判断的数据任务调度管道运行在CPU上,两种管道异步并行执行,数据任务调度管道要比应用程序执行管道提前运行。通过这种管道并行执行模式,我们既可以保证计算的独立性和并行性,也可以避免使用原子、锁等昂贵的同步操作。在实现时,本发明基于以下三点原则设计数据任务调度管道①应尽可能地保持对静态数据的访问处在硬件存储层次中速度最快的一层(即cache、sharedmemory等),同时尽量延迟对数据的访问直到这种访问不可避免。②优先处理具备充分相似性数据的任务,或者产生的数据可以协助其它任务提高执行的优先级,或者多个任务的执行具有相似性。③以数据驱动的方式进行任务调度,根据已空闲处理器的类型和当前存储池中静态数据所对应的任务进行调度。1)本发明设计了数据分析器来动态控制数据的使用,以解决一些程序可能产生不可预测的数据量而造成整个执行管道负载不均衡的情况。数据并行的执行模式很可能使一个计算任务产生大量新的数据,很难同时对这些数据进行存储并使用它们,大量新的数据也可能迅速消耗掉有限的显存,而且由于这些数据的产生是随机的不可预测的,也增加了对数据管理的难度。因此,本发明设置一个数据分析器,计算任务每一次执行之前,都要判断所将产生的新数据的大小是否超出了当前的剩余显存(具体的评估方法根据相应的应用而定);一旦经判断超出了剩余的显存容量,我们将对输入数据进行分组,使数据分批进行处理。我们的这种方法将会大大降低一些涉及到海量数据的算法给系统存储和带宽造成的负担,使显存中的数据都是正在计算的线程所需要的数据,从而进一步加强了线程的并行计算效率,提高了对硬件的有效使用能力。为每个计算任务都设立了一个数据缓存区,用于管理计算任务每次产生或者消耗的数据。由于在一些复杂算法中数据的产生和消耗是动态不规则的,为了满足局部相似性原则和SIMD操作特性,使计算尽量集中在局部数据集中进行,有必要对这些数据重新组织,保证计算可以继续在硬件上有效地进行。当前硬件强大的带宽能力以及CPU强大的逻辑处理能力使得数据动态重组操作是十分可行的。2)设计了任务调度器来对不可预测的任务执行序列进行基于优先级的动态调度,同时根据所调度的任务管理相应的数据转移。我们采用按需调度的方法,当某一个处理器可用时,①设置一个信号量,锁住调度器;②扫描整个待执行任务序列,选择优先级最高的任务,并作标记;③对调度器解锁。优先级的确定是我们这个调度器的核心部分。针对混合处理资源的特点,我们衡量任务的优先级主要基于其所需数据在存储层次的位置、所需处理器的类型以及所需数据集的大小。具体来说,按优先级由高到低的顺序结合以下几条原则(1)任务的执行不需要静态数据;(2)所需数据在cache里;(3)优先处理具备充分相似性数据的任务,或者产生的数据可以协助其它任务提高执行的优先级,或者多个任务的执行具有相似性。(4)所需数据在GPU显存;(5)所需数据在CPU内存;(6)所需数据正在由硬盘传输到内存;(7)所需数据集太小而无法充分利用硬件计算能力。选择具有不同几何复杂度的测试场景,Burmy,Fairy,BARTKitchen作为测试模型文件,Fairy为动态场景并带有两次反射计算,绘制分辨率为1024*1024。我们分别使用了本发明方法和CUDA编程模型对这个场景进行测试,结果如表1所示,可见本发明方法相比CUDA来说,取得了更好的性能。管道并行机制通过合理地使用硬件计算资源和存储资源,根据处理核的平衡负载进行了基于优先级的任务调度。表1<table>tableseeoriginaldocumentpage7</column></row><table>表1分别使用CUDA及本模型对场景Bunny,Fairy,BARTKitchen在1024*1024分辨率下每秒的绘制帧数。为了验证本发明方法对硬件的并行使用能力,测试了标量处理器的利用率,其直接反映了我们对数据和任务的调度和组织方法能否最大限度地开发算法在硬件上的并行执行能力。注意,我们没有使用ALU的使用情况作为我们的测试标准,因为有些时候即便线程槽已被占用,但ALU也可能因为访存延迟或者SIMD的低利用率而未被完全使用。如表2所示,相比CUDA编程模型,本发明方法能够更加有效地使用GPU的计算资源。表2<table>tableseeoriginaldocumentpage8</column></row><table>表2CUDA及本模型的GPU利用率比较。为了说明本发明方法能够针对不同复杂度的场景动态地组织数据和调度任务而不会出现负载不均衡的情况,图1可见CUDA编程模型当场景复杂度极度增加时会出现明显的负载不均横而使处理资源利用不佳的情况,最终导致性能的下降,而本发明方法则一直维持着较为稳定的性能。权利要求一种基于多重并行的数据通用处理方法,其特征在于,在具有GPU和CPU处理器的计算机中(1)将进行数据处理的应用程序划分成若干执行行为;(2)根据执行行为对数据或者计算的相似性,将所有的执行行为划分成若干个任务;(3)将应用程序需要处理的数据分为静态数据和动态数据,在可执行所述的应用程序的计算机显存中划分存储空间,在该存储空间中分别为静态数据和动态数据划分存储区域;(4)分别在GPU和CPU上建立执行管道,根据对数据的处理方式,将步骤(2)中任务分为计算型任务和逻辑判断型任务,在GPU上运行计算型任务,在CPU上运行逻辑判断型任务,直至完成应用程序的执行,其中在GPU管道中,任务内部以数据并行的方式运行,任务之间以任务并行的方式运行。2.根据权利要求1所述的数据通用处理方法,其特征在于,每个执行行为可以完成至少一个对数据的基本操作或者计算操作。3.根据权利要求1所述的数据并行处理方法,其特征在于,所述的静态数据是在应用程序执行过程中不会改变的数据,所述的动态数据是在应用程序执行过程中产生的数据。4.根据权利要求1所述的数据并行处理方法,其特征在于,分别在GPU和CPU上建立执行管道,根据对数据的处理方式,将任务分为计算型任务和逻辑判断型任务,在GPU上运行计算型任务,在CPU上运行逻辑判断型任务,两种管道并行执行。5.根据权利要求1所述的数据并行处理方法,其特征在于,步骤(4)中,同一任务内部的执行行为以数据并行方式运行,而不同任务间执行行为以并行方式异步运行。6.根据权利要求1所述的数据并行处理方法,其特征在于,对每一个任务都设置一个优先级状态,当新任务出现时,根据所有任务的优先级状态选择优先级高的任务依次运行。全文摘要本发明公开了一种基于多重并行的数据通用处理方法,包括(1)将进行数据处理的应用程序划分成若干执行行为;(2)根据执行行为对数据的基本操作类型,将所有的执行行为划分成若干个任务;(3)将应用程序需要处理的数据分为静态数据和动态数据;(4)在GPU上运行计算型任务,在CPU上运行逻辑判断型任务,直至完成应用程序的执行。本发明数据处理方法针对具有动态特征执行行为和不规则数据结构的复杂算法做了专门的优化,能够在数据处理时根据存储局部性原则和SIMD操作机制对数据进行动态管理使应用程序进行数据处理时能够最大限度地有效使用硬件的计算资源和存储资源。文档编号G06F9/38GK101833438SQ201010150549公开日2010年9月15日申请日期2010年4月19日优先权日2010年4月19日发明者杨鑫,许端清,赵磊申请人:浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1