一种面向gpu的数据流处理方法

文档序号:6606792阅读:165来源:国知局
专利名称:一种面向gpu的数据流处理方法
技术领域
本发明涉及一种数据处理方法,具体涉及一种面向GPU(图形处理器,下文简称 GPU)的数据流处理方法。
背景技术
高性能计算发展水平是衡量一个国家综合国力与国际竞争力的重要指标,是一个 国家科技实力的综合体现。在航空航天、核武研制、石油勘探、气象预报、生命科学、海啸与 地震自然灾害预测等关键领域有着巨大应用需求。因此,世界各国都竞相将高性能计算作 为技术与经济争夺的战略制高点。目前,异构多核架构为解决高性能计算提供了契机,它 采用“主核心+协处理器”的分工机制,主核心负责操作系统以及一些逻辑性较强的事务处 理,而协处理器则负责数据密集型计算任务。但随着主、协处理器架构的使用,两架构之间 的通信也需要一定的开销,使得高性能计算问题再次遇到了瓶颈。由CPU和GPU组成的异构并行系统中,CPU是主核心,GPU是协处理器。在单独使 用CPU处理一个涉及高性能计算的应用问题时,只需直接处理准备好的数据,然而,CPU对 数据的计算方式是串行的,从而导致了该应用问题需要很长的处理时间。为此,引进协处理 器GPU,CPU负责把该应用问题的数据密集型计算任务分离出来移植给GPU进行,利用GPU 对数据的并行计算方式缩短计算任务的处理时间,进而缩短了整个应用问题所需要的处理 时间。但是,这个过程中需要CPU将初始数据传输到GPU,而GPU处理的结果也需要传输给 CPU,这就是前面所提到的架构之间的通信开销。一种有效的解决方法重叠通信与计算,将 初始数据划分为不同的数据流分批交给GPU进行处理,以此实现CPU与GPU之间的通信和 GPU计算的重叠。在当前技术中,可以使用CUDA (统一计算设备架构,下文简称CUDA)编程模型中的 流处理技术来实现CPU与GPU通信和GPU计算的重叠。所谓的流处理技术是指将初始数 据划分为若干个计算时没有相关性的数据块,将它们从属于不同的流进行分批执行,利用 CUDA函数特有的异步并行特性,从属于一个流的通信与计算是严格串行的,而从属于不同 的流的通信与计算是可以并行执行,如下述代码所示,从属于stream[l]的数据拷贝就可 以和从属于stream 的kernel计算同时执行,从而实现应用通信与计算的重叠,进而提 升应用整体性能。cudaMemcpyAsync (destinationO, sourceO, direction, stream
);cudaMempcyAsync (destinationl, sourcel, direction, stream[l]);kernel <dimGrid, dimBlock > (stream
);然而,该技术有着以下不足(1)很难有效地重叠通信与计算的时间第一,将初始数据分批执行时必然会产生一定的资源浪费,包括CPU和GPU之间的 通信带宽以及GPU计算能力两个方面;第二,调度流也需要一定的开销,一味地增加流的数 目只会产生负面效果;第三,将初始数据采用不同的划分方式划分所能重叠的通信与计算
3的时间也是不尽相同的。由于这些问题的存在,又没有一个明确的数据流处理方法作指导,单纯地基于流 处理技术很难有效地重叠通信与计算的时间。(2)由于没有明确的方向而导致大量的冗余工作使用不同数目的流可以产生不同的结果,如何能够更快速地得到最好的结果是至 关重要的,然而,CUDA编程模型中的流处理技术并没有提供一个明确的方向,导致了大量的 冗余工作。

发明内容
针对CUDA编程模型中的流处理技术存在的缺陷,本发明的目的在于,提供一种面 向GPU实现通信与计算重叠时方便、有效的数据流处理方法。为达到以上目的,本发明是采用如下技术方案予以实现的一种面向GPU的数据流处理方法,其特征在于,包括下述步骤(1)使用CPU和GPU组成的异构并行系统执行如下操作将待处理的初始数据从 主机内存拷贝到GPU,GPU对数据进行计算,计算结果从GPU拷贝回主机内存,运行时间分别 为拷入时间Ti、计算时间Tc、拷回时间To,其中Tc > Ti+To ;(2)根据步骤⑴中所得到的拷入时间Ti、计算时间Tc、拷回时间To计算如下比 例a = Tc/Ti, b = Tc/To ;根据该比例将原初始数据向左右两侧划分,采用数据流的规模 向两侧逐渐减小的方式,设一共划分为n个数据流,n > 3,第i个数据流的规模最大,n个 数据流大小的比例为1 a a2 …: (a^/b) (a^/b2)...(广/1^),从而 使得前i_l个数据流中各数据流的计算时间刚好可以隐藏其后一个数据流的拷入时间, 而后n-i个数据流中各数据流的计算时间刚好可以隐藏其前一个数据流的拷回时间;(3)向左侧划分数据直至出现下面的情况之一为止第1个数据流的传输不能充 分利用系统的传输资源,或者第1个数据流的计算不能充分利用系统的计算资源;向右侧 划分数据直至出现下面的情况之一为止第n个数据流的传输不能充分利用系统的传输资 源,或者第n个数据流的计算不能充分利用系统的计算资源;其中所述的不能充分利用系统的传输资源是指,CPU和GPU间数据的传输依赖于 PCIE总线,数据的传输所利用的总线带宽如果没有达到PCIE总线可以实际提供的最高带 宽,即为数据流的传输不能充分利用系统的传输资源;所述的不能充分利用系统的计算资 源是指,GPU片内拥有着数以百计的计算核心,数据的计算如果没有把这些计算核心全部利 用起来,即为数据流的计算不能充分利用系统的计算资源。本发明针对使用通信与计算重叠的方法处理CPU和GPU之间通信开销的问题,提 出了一种面向GPU的数据流处理方法,该方法基于CUDA编程模型中的流处理技术,通过将 待处理的数据在CPU和GPU组成的异构并行系统中运行一次所收集的运行时间信息,确定 出原初始数据在划分为n个数据流时各数据流之间大小的比例关系,根据该比例关系将数 据划分,分批交给GPU执行,以更有效地重叠通信与计算的时间。使用该方法解决了 CUDA 编程模型中流处理技术的局限性,在考虑了尽量减小系统资源浪费的基础上,一方面可以 有效地重叠通信与计算的时间,另一方面根据所总结出的各数据流之间的比例关系划分数 据节省了大量的冗余工作,同时可以非常快速地得到一个好的重叠效果。


图1为不使用流处理应用问题时的时空2为本发明中使用三个流处理应用问题时的时空3为本发明中使用η个流处理应用问题时的时空图
具体实施例方式以下结合附图及具体实施例对本发明作进一步的详细描述。一种面向GPU的数据流处理方法,其特征在于,包括下述步骤(1)使用CPU和GPU组成的异构并行系统将应用问题(利用计算机处理一个实 际问题)中数据密集型计算模块完整运行一次,即将待处理的初始数据从主机内存拷贝到 GPU(Copyin),GPU对数据进行计算(kernel),计算结果从GPU拷贝回主机内存(copyout), 运行时间分别为拷入时间Ti、计算时间Tc、拷回时间To,如图1所示。(该方法针对于计算 机时间大于通信时间的问题,即Tc > Ti+To);(2)根据步骤(1)中所得到的拷入时间Ti、计算时间Tc、拷回时间To计算如下比 例a = Tc/Ti, b = Tc/To ;如图2所示,可先将初始数据划分为三个数据流,则三个数据流大小的比例为 1 a(a/b),从而使得第一个数据流的计算时间Tcl刚好可以隐藏第二个数据流的拷入时 间Ti2,即Tcl = Τ 2 ;第三个数据流的计算时间Tc3刚好可以隐藏第二个数据流的拷回时 间 To2,即 Tc3 = To2 ;为更多地使用计算时间隐藏通信时间,数据的具体划分方法如下,如图3所示, 设一共划分为η个数据流,η ^ 3,第i个数据流的规模最大,η个数据流大小的比例为 1 a a2 - (a^Vb) (a^Vb2)...(广7『力,从而使得前 i_l 个数据 流中各数据流的计算时间刚好可以隐藏其后一个数据流的拷入时间;而后n-i个数据流中 各数据流的计算时间刚好可以隐藏其前一个数据流的拷回时间。(3)向左侧划分数据直至出现下面的情况之一为止第1个数据流的传输不能充 分利用系统的传输资源,或者第1个数据流的计算不能充分利用系统的计算资源;向右侧 划分数据直至出现下面的情况之一为止第η个数据流的传输不能充分利用系统的传输资 源,或者第η个数据流的计算不能充分利用系统的计算资源;其中所述的不能充分利用系统的传输资源是指,CPU和GPU间数据的传输依赖于 PCIE总线,数据的传输所利用的总线带宽如果没有达到PCIE总线可以实际提供的最高带 宽,即为数据流的传输不能充分利用系统的传输资源;所述的不能充分利用系统的计算资 源是指,GPU片内拥有着数以百计的计算核心,数据的计算如果没有把这些计算核心全部利 用起来,即为数据流的计算不能充分利用系统的计算资源。本发明选取常用的矩阵相乘C = AXB为例,选择矩阵A、B和C都是维度为4096 的方阵进行测试,方阵的元素均为单精度浮点数。给出使用发明中所提出的面向GPU的数 据流处理方法在CPU和GPU组成的异构并行系统中计算矩阵相乘的一个具体实施过程(1)将矩阵相乘运行一次,得到其各部分操作的运行时间,如下表所示,其中、Α和 坫分别代表矩阵A和B从CPU拷贝到GPU所需要的时间,t。代表GPU计算矩阵A和B相乘所需要的时间,t。C代表计算结果C从设备显存拷贝回主机内存的时间。
表1矩阵相乘运行时间
权利要求
一种面向GPU的数据流处理方法,其特征在于,包括下述步骤(1)使用CPU和GPU组成的异构并行系统执行如下操作将待处理的初始数据从主机内存拷贝到GPU,GPU对数据进行计算,计算结果从GPU拷贝回主机内存,运行时间分别为拷入时间Ti、计算时间Tc、拷回时间To,其中Tc>Ti+To;(2)根据步骤(1)中所得到的拷入时间Ti、计算时间Tc、拷回时间To计算如下比例a=Tc/Ti,b=Tc/To;根据该比例将原初始数据向左右两侧划分,采用数据流的规模向两侧逐渐减小的方式,设一共划分为n个数据流,n≥3,第i个数据流的规模最大,则n个数据流大小的比例为1∶a∶a2∶…∶ai 1∶(ai 1/b)∶(ai 1/b2)∶…∶(ai 1/bn i),从而使得前i 1个数据流中各数据流的计算时间刚好可以隐藏其后一个数据流的拷入时间,而后n i个数据流中各数据流的计算时间刚好可以隐藏其前一个数据流的拷回时间;(3)向左侧划分数据直至出现下面的情况之一为止第1个数据流的传输不能充分利用系统的传输资源,或者第1个数据流的计算不能充分利用系统的计算资源;向右侧划分数据直至出现下面的情况之一为止第n个数据流的传输不能充分利用系统的传输资源,或者第n个数据流的计算不能充分利用系统的计算资源;其中所述的不能充分利用系统的传输资源是指,CPU和GPU间数据的传输依赖于PCIE总线,数据的传输所利用的总线带宽如果没有达到PCIE总线可以实际提供的最高带宽,即为数据流的传输不能充分利用系统的传输资源;所述的不能充分利用系统的计算资源是指,GPU片内拥有着数以百计的计算核心,数据的计算如果没有把这些计算核心全部利用起来,即为数据流的计算不能充分利用系统的计算资源。
全文摘要
本发明公开了一种面向GPU的数据流处理方法,首先,在CPU和GPU组成的异构并行系统中运行待处理的数据密集型计算模块,得到拷入时间Ti、计算时间Tc、拷回时间To;然后,根据三部分运行时间计算如下比例关系a=Tc/Ti,b=Tc/To;最后,根据所总结出的将初始数据在划分为n个流时各数据流之间大小的比例1∶a∶a2∶…∶ai-1∶ai-1/b∶ai-1/b2∶…∶ai-1/bn-i,结合初始数据的总量确定各数据流的大小,将它们分批交给GPU去执行。本发明在尽量避免系统资源浪费的基础上,更有效地重叠了通信与计算的时间,进而更大程度地缩短整个应用问题的处理时间。
文档编号G06F9/50GK101976207SQ20101024014
公开日2011年2月16日 申请日期2010年7月29日 优先权日2010年7月29日
发明者冯景华, 刘袁, 刘超, 张保, 张兴军, 曹海军, 李丹, 李亮, 白秀秀, 董小社 申请人:西安交通大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1