技术领域
[0001] 本
发明涉及一种在CPU与GPU组成的异构平台上,CPU与GPU的体系结构差别很大,为充分的发挥两种处理器的
数据处理能
力,同一数据在CPU与GPU端分别采用不同格式存储,具体涉及一种在CPU与GPU组成的异构平台上,同一数据在CPU端和GPU端采用异构格式存储,当CPU对GPU端数据进行格式转换时,隐藏转换过程带来的额外开销的实现形式,属
计算机系统结构领域。技术背景
[0002] 当前很多
高性能计算机计算结点由多核CPU和GPU两种不同体系结构的处理器组成,因这两种处理器的体系结构差别较大,同一个数据结构数据的并行
算法在两种处理器上获得计算吞吐量差别很大;为了保证两种处理器均获得较高的计算吞吐量,可以分别采用不同的数据结构保存数据,但这会带来CPU执行格式转换的额外开销,从而导致算法在异构结点的总计算吞吐量下降;解决这个问题的途径是隐藏CPU执行格式转换带来的额外开销,达到提高算法在异构平台总计算吞吐量的目的。
[0003] 稀疏矩阵相关操作是许多高性能应用的核心算法,如转置的稀疏矩阵乘以稀疏矩阵与稠密向量的乘积算法在科学和工程中有广泛的应用,具体包括奇异值分解或图计算等。
[0004] 随着稀疏矩阵计算规模的增加,大部分稀疏矩阵相关操作由高性能计算机并行完成;这种情况下,稀疏矩阵的转置操作会带来较大的额外开销,对转置稀疏矩阵乘以稀疏矩阵与稠密向量的乘积算法,因为同时涉及到稀疏矩阵及转置的稀疏矩阵,如果同时保存这两个矩阵会浪费大量的存储空间;Aydin Buluc等研究提供压缩稀疏
块格式存储可以在多核CPU平台上在转置避免的情况下为并行实现稀疏矩阵与稠密向量相乘算法及转置的稀疏矩阵与稠密向量相乘算法均提供较高、一致的计算吞吐量;陶袁等研究采用扩展压缩稀疏块存储格式在GPU平台上实现稀疏矩阵与稠密向量相乘算法及转置避免的转置稀疏矩阵与稠密向量相乘算法均提供较高、一致的计算吞吐量。但由于同一数据的两种存储格式的差异,导致在CPU和GPU组成的异构平台上同时使用这两种格式数据会带来格式转换的额外开销,所以研究有效隐藏这种格式转换的额外开销的方法以保证转置的稀疏矩阵乘以稀疏矩阵与稠密向量的乘积在CPU与GPU组成的异构平台上获得较高的计算吞吐量具有重要的意义。
发明内容
[0005] 本发明的目的是提供一种基于CPU与GPU异构平台的异构格式存储实现方法,该方法是在CPU和GPU组成的异构平台上采用异构存储格式,从而隐藏CPU执行数据格式转换带来的额外开销的方法,达到提高算法在CPU与GPU组成的异构平台总的计算吞吐量的目的。
[0006] 本发明的技术方案是:
[0007] 在CPU与GPU组成的异构平台上对于两种不同体系结构的处理器采用异构格式存储的方式,避免从CPU端向GPU端采用一次传送所有的数据,而采用分段多次传送不同段数据,在传送每段数据及GPU执行计算的同时CPU执行数据格式转换,实现往GPU端上传数据及GPU计算与CPU执行格式转换并行,从而隐藏CPU执行格式转换的额外开销,具体实现形式包括以下步骤:
[0008] 步骤一:确定GPU计算的数据规模,检测CPU与GPU之间的通讯带宽;
[0009] 步骤二:计算数据分段传送的段数;
[0010] 步骤三:对第一段数据执行数据格式转换;
[0011] 步骤四:把转换后数据上传到GPU,GPU执行计算操作,CPU对下一段数据执行格式转换;
[0012] 步骤五:判断GPU计算的数据是否是最后数据段,如果是,算法执行完成;否则执行步骤四。
[0013] 步骤二所确定GPU计算数据分成多段是根据步骤一测量的实际数据规模和CPU与GPU之间实际通讯带宽,使该技术具有平台可移植性和数据的通用性。
[0014] 步骤三所述对第一段数据执行格式转换是在步骤四和步骤五的循环体之前提前对第一段数据进行格式转换,在于保证转换格式后的数据上传到GPU端及GPU计算与CPU对下一段数据格式转换并行。
[0015] 步骤四所述CPU转换完的数据上传到GPU端,GPU执行计算以及CPU对下一段数据执行格式转换等三个操作的数据
片段尺寸为程序执行过程中动态确定,这三个操作分别由不同的设备执行,所以这三个操作的并行性为自动完成,且GPU执行计算指GPU执行算法规定的操作。
[0016] 步骤五所述判断是否是最后数据段是根据程序执行过程的变量值判断循环是否执行。
[0017] 本发明具有以下优点和积极效果:
[0018] 发明是在CPU与GPU组成的异构平台上,同一个数据在CPU端与GPU端采用异构格式保存数据的情况下,隐藏CPU执行格式转换的额外开销的方法,该技术与
现有技术比,其主要优点是:
[0019] (1)、在CPU端与GPU端分别采用不同格式保存数据,使该算法在两种不同类型的处理器上均能获得较高的计算吞吐量;
[0020] (2)、当格式转换后数据上传到GPU端及GPU执行计算的同时,CPU并行执行数据格式转换,达到隐藏数据格式转换额外开销的目的。
附图说明
[0021] 图1是本发明CPU与GPU组成的异构平台采用异构格式,从而隐藏CPU执行格式转换额外开销的
流程图。
[0022] 图2是本发明CPU与GPU组成的异构平台采用异构格式,实现转置的稀疏矩阵乘以稀疏矩阵与稠密向量乘积算法的流程示意图。
具体实施方式
[0023] 为使本发明的目的、技术方案和优点表达得更清楚明白,下面结合附图及具体实例对本发明再作进一步详细说明。
[0024] 如图1所示:本发明是CPU与GPU组成的异构平台上针对不同类型处理器采用异构格式存储的情况下,隐藏CPU执行格式转换的额外开销的实现方法,其中CPU执行格式转换采用多线程并行实现,具体方法包括以下步骤:
[0025] 步骤一:确定GPU计算数据的规模并检测CPU与GPU之间的通讯带宽;
[0026] 其中,步骤一所述的主要功能包括检测GPU计算的数据规模及CPU与GPU之间的通讯带宽。为隐藏CPU执行数据格式转换的额外开销,把GPU计算的数据按大小分成多段,采用往GPU端上传转换后的数据及GPU计算与CPU对下一段数据格式转换并行执行;本步骤确定需要GPU计算数据的规模及CPU上传数据到GPU的通讯带宽。
[0027] 步骤二:计算GPU分段计算段数;
[0028] 其中,步骤二所述的主要功能是利用步骤一的测量结果计算数据分段的段数,如果需要GPU
加速的数据规模小于一定
阈值,则采用一次全部传送和执行,即不采用CPU执行多段数据格式转换与往GPU端多段上传数据和GPU计算并行执行的情况;
[0029] 步骤三:对第一段执行数据格式转换;
[0030] 其中,步骤三所述的主要功能是对GPU计算的第一段数据执行格式转换;无论对需要GPU加速的数据采用几段格式转换,第一段数据格式转换延迟无法与上传GPU端其他段数据的延迟隐藏;
[0031] 步骤四:把转换完的数据上传到GPU端,GPU执行计算,CPU对下一段数据执行格式转换;
[0032] 其中,步骤四所述的主要功能为把对完成格式转换的数据上传到GPU端、GPU执行计算操作以及CPU对下一段数据执行格式转换;这三个操作中上传数据到GPU端及GPU执行计算操作为串行操作,都是对当前的数据段操作,但与CPU对下一段数据执行格式转换操作是并行;
[0033] 步骤五.判断GPU当前计算的数据是否是最后数据段,如果是,算法执行完成;否则执行步骤四;
[0034] 其中,步骤五所述的主要功能为判断当前分段计算是否结束;
[0035] 本发明的主要思想是在CPU与GPU组成的异构平台上,针对不同体系结构的处理器采用异构格式存储数据的情况下,采用把整个数据分成多段由GPU分别执行,利用向GPU上传数据的过程、GPU计算数据与CPU执行格式转换并行,从而隐藏CPU执行数据格式转换的实现形式,为由CPU与GPU组成的异构平台获得更高的计算吞吐量实现形式提供技术支持。
[0036] 首先确定需要GPU计算数据的规模及CPU与GPU之间的通讯带宽,同时确定CPU与GPU之间分段计算的段数;之后根据确定的每段数据量并对第一段数据执行格式转换;再次把格式转换后的数据上传到GPU端,GPU执行计算,CPU对下一段数据执行格式转换;最后判断计算是否完成。
[0037] 下面以转置稀疏矩阵乘以稀疏矩阵与稠密向量乘积算法为实例进行说明,如图2所示,包括以下步骤:
[0038] 步骤一:确定稀疏矩阵的行数、列数及非零元素的个数,并检测CPU与GPU之间的通讯带宽;
[0039] 步骤二:根据步骤一测量的结果计算分段的段数;
[0040] 步骤三:根据前面的计算结果,对稀疏矩阵的第一段数据进行格式转换;
[0041] 步骤四:转换后的稀疏矩阵非零元素上传到GPU端,GPU执行稀疏矩阵与向量相乘或转置的稀疏矩阵与向量相乘,同时CPU对下一段稀疏矩阵的非零元素执行格式转换;
[0042] 步骤五:判断当前的数据是否是最后一段,如果是,本算法完成;否则执行步骤四。
[0043] 本实例中主要研究CPU与GPU组成的异构平台上异构格式的实现形式,该方法只与平台是否是CPU与GPU组成的异构平台有关,而与CPU及GPU的型号无关。
[0044] 最后所应说明的是:以上实例仅用以说明而非限制本发明的技术方案,尽管参照上述
实施例对本发明进行了详细说明,本领域的普通技术人员应当理解:依然可以对本发明进行
修改或者等同替换,而不脱离本发明的精神和范围的任何修改或局部替换,其均应涵盖在本发明的
权利要求范围当中。