发明名称 面向GPU的细粒度并行应用映射方法
摘要 本发明公开了一种面向GPU的细粒度并行应用映射方法,目的是解决现有映射方法计算粒度随机确定导致GPU+CPU组成的异构系统效能低和不能充分利用应用程序特征的缺陷。技术方案是构建由GPU+CPU组成的异构系统,安装GPU运行环境并启动GPU进行初始化工作,CPU负责将应用映射输入集读入内存,启动API函数将应用映射输入集传输至GPU显存,对于多维数据,先将多维数组转化成二维数组,再将二维数组像素化,最后采用GPU+CPU异构计算系统实现面向n维数据结构输入集的细粒度像素级并行应用映射。采用本发明能充分利用应用程序特征,任务划分明确,并行粒度小,能最大化CPU+GPU异构计算系统的效能,性能加速比显著。
申请公布号 CN102799416A 申请公布日期 2012.11.28
申请号 CN201210244494.9 申请日期 2012.07.16
申请人 中国人民解放军国防科学技术大学 发明人 王志英;甘新标;沈立;黄立波;陆洪毅;朱琪;苏博;郑重;徐帆;魏雄
分类号 G06F9/38(2006.01)I;G06F15/80(2006.01)I 主分类号 G06F9/38(2006.01)I
代理机构 国防科技大学专利服务中心 43202 代理人 郭敏
主权项 1.一种面向GPU的细粒度并行应用映射方法,包括以下步骤:第一步,构建由GPU+CPU组成的异构系统,其中CPU与GPU的数据交互通过PCI-E通道来完成,GPU包括GPU显存和K个流多处理器SM处理单元,每个SM由m个流处理器、共享存储器、常量Cache和纹理Cache组成;K为正整数,m为正整数;第二步,安装GPU运行环境并启动GPU进行初始化工作;第三步,CPU负责将n维应用映射输入集P<sub>n</sub>[M<sub>1</sub>][M<sub>2</sub>]…[M<sub>n</sub>]读入内存,P<sub>n</sub>[M<sub>1</sub>][M<sub>2</sub>]...[M<sub>i</sub>]...[M<sub>n</sub>]是一个n维数组,n为正整数,数组的第一维的维度即该维包含元素的个数为M<sub>1</sub>,第二维的维度为M<sub>2</sub>,……,第i维的维度为M<sub>i</sub>……,第n维的维度为M<sub>n</sub>;当n≥2时,n≥i≥2;第四步,启动GPU数据传输应用编程接口API函数将内存的P<sub>n</sub>[M<sub>1</sub>][M<sub>2</sub>]...[M<sub>i</sub>]...[M<sub>n</sub>]传输至GPU显存;其特征在于还包括以下步骤:第五步,若n=1,转第七步;若n≥2,执行第六步;第六步,对P<sub>n</sub>[M<sub>1</sub>][M<sub>2</sub>]...[M<sub>i</sub>]...[M<sub>n</sub>]进行像素化,方法如下:6.1n维数组归一化,即将P<sub>n</sub>[M<sub>1</sub>][M<sub>2</sub>]...[M<sub>i</sub>]...[M<sub>n</sub>]转化为一个等价的二维数组,方法如下:6.1.1计算P<sub>n</sub>[M<sub>1</sub>][M<sub>2</sub>]...[M<sub>i</sub>]...[M<sub>n</sub>]包含的元素总数<img file="FDA00001890956300011.GIF" wi="298" he="115" /><img file="FDA00001890956300012.GIF" wi="123" he="115" />表示M<sub>1</sub>,M,<sub>2</sub>…,M<sub>n</sub>连乘;6.1.2将P<sub>n</sub>[M<sub>1</sub>][M<sub>2</sub>]...[M<sub>i</sub>]...[M<sub>n</sub>]的total个元素依次赋值给二维数组P<sub>2</sub>[M<sub>1</sub>][total/M<sub>1</sub>];6.2对二维数组P<sub>2</sub>[M<sub>1</sub>][total/M<sub>1</sub>]进行像素化,方法如下:用p[s][r]表示二维数组P<sub>2</sub>[M<sub>1</sub>][total/M<sub>1</sub>]第s列第r行的元素,其中0≤s≤M<sub>1</sub>-1并且0≤r≤(total/M<sub>1</sub>)-1;对于高度为M<sub>1</sub>,宽度为total/M<sub>1</sub>的图像I,用I(s,r)表示图像第s列第r行的像素:6.2.1初始化s=0,r=0;6.2.2若s<M<sub>1</sub>并且r&lt;total/M<sub>1</sub>,将二维数组第s列第r行的元素赋值给图像I第s列第r行的像素,即I(s,r)=p[s][r];6.2.3循环变量s加一,即s=s+1;6.2.4循环变量r加一,r=r+1;第七步,采用GPU+CPU异构计算系统实现面向n维数据结构输入集的细粒度像素级并行应用映射,具体方法如下:7.1计算图像I的像素总数pixel,若n=1,则pixel=M<sub>1</sub>,执行7.2;若n≥2,则pixel=M<sub>1</sub>×(total/M<sub>1</sub>),执行7.2;7.2计算异构系统包含处理器核心的总数core=m×K;7.3若pixel≤core,启动pixel个独立的GPU线程,将每一个像素分派给一个独立的GPU线程,一个流处理器运行一个独立的GPU线程,GPU线程运行完后转7.9;若pixel&gt;core,执行7.4;7.4通过查询GPU属性获取一个SM上可以同时运行的最大线程数t<sub>max</sub>,通常t<sub>max</sub>≥256;7.5定义<img file="FDA00001890956300021.GIF" wi="677" he="70" />显然t≥m,其中min{a,b}表示取a,b中的最小者;7.6将t个线程合并组成一个线程块,则线程块的总数为<img file="FDA00001890956300022.GIF" wi="376" he="62" />7.7若block≤K,选中block个SM,将每个线程块分派到一个流多处理器SM上,由于t≥m,SM的m个流处理器并行启动m个线程,执行完成后再启动下一轮m个线程,直至块内的所有线程执行完;若block&gt;K,执行7.9;7.8启动K个流多处理器SM运行K线程块,SM的m个流处理器并行启动m个线程,执行完成后再启动下一轮m个线程,直至块内的所有线程执行完;然后再启动下一轮K个流多处理器SM运行K线程块,直至block个线程块全部运行完成。7.9GPU将处理结果返回给CPU,GPU结束运行。
地址 410073 湖南省长沙市开福区德雅路109号