利用AMD GPU汇编指令加速的单精度矩阵乘优化方法和系统技术方案

技术编号:21913702 阅读:91 留言:0更新日期:2019-08-21 12:21
本发明专利技术涉及一种利用AMD GPU汇编指令加速的单精度矩阵乘优化方法和系统,包括:根据tile_length对原始矩阵进行分块,每个block处理〈tile_length,tile_length〉维度的输出矩阵C;在共享内存上创建4个暂存空间tileA,tileB,tileA’和tileB’;从GPU上的一级存储上的矩阵A读取tileA大小的矩阵到tileA,从矩阵B读取tileB大小的矩阵到tileB;每次从tileA加载一列到寄存器,从tileB加载一行到寄存器,做矩阵乘运算,读取该寄存器内容,并运用乘加融合指令做矩阵乘运算,在矩阵乘运算的同时,从该一级存储分别读取下一个tileA和tileB的一行到tileA’和tileB’;做完tileA和tileB的矩阵乘以后,将tileA和tileA’地址互换,将tileB和tileB’地址互换。

Single Precision Matrix Multiplication Optimization Method and System Accelerated by AMD GPU Assembly Instruction

【技术实现步骤摘要】
利用AMDGPU汇编指令加速的单精度矩阵乘优化方法和系统
本专利技术涉及深度学习、高性能计算以及GPGPU编程领域,并特别涉及一种可利用AMDGPU汇编指令加速的单精度矩阵乘优化方法和系统。
技术介绍
GPU图形处理器是一种专用于图像和视频处理的芯片。由于其芯片设计的特殊性——简化逻辑处理,增加计算单元,早期GPU只用来处理图形图像相关的应用编程。而随着GPU芯片的日益强大,GPU转向GPGPU发展,即其通用性得到了大量的提高。目前,GPU在嵌入式系统,智能终端,个人电脑,工作站等设备中得到了广泛的应用。RadeonInstinct系列GPU是AMD推出的,专门针对高性能计算和人工智能应用的芯片。相比普通的GPU,其浮点运算性能更高。例如RadeonInstinctMI25GPU,具有64个CU,每个CU上有64个SP单元,其峰值性能可以达到12288gflops,超过了大部分主流CPU芯片。SGEMM(单精度矩阵乘)是BLAS数值计算库的一个重要函数。在多核CPU上,MKL,ATLAS,和Openblas等数学库对SGEMM做了很细致的调优。最近,越来越多单精度矩阵乘在GPU实现。在GPU上,rocBLAS是AMD公司提供的在AMDGPU上的Blas高性能数学库。但是rocBLAS性能低,SGEMM函数一般根据输入的两个矩阵是否转置,调用不同的处理程序。T代表转置,N代表不转置。rocBLAS的NN,NT,TN,TT等各个子程序最高只能达到74.1%左右的性能,最低只有54.6%左右的性能。因此需要开发一个更高性能的SGEMM程序。现有技术(基于NVIDIAKeplerGPU汇编指令的单精度矩阵乘优化方法与系统)仅适用于NVIDIAKeplerGPU单精度稠密矩阵乘的优化,而不能对AMDGPU单精度稠密矩阵乘进行性能调优。因此急需一种适用于AMDGPU的单精度稠密矩阵乘进行性能调优方法。
技术实现思路
本专利技术的目的是解决上述现有技术中AMDGPU单精度稠密矩阵乘效率低问题,提出了一种利用GPU汇编指令来优化数值计算程序的方法。具体地说,本专利技术公开了一种利用AMDGPU汇编指令加速的单精度矩阵乘优化方法,包括:步骤1、根据tile_length对原始矩阵进行分块,每个block处理〈tile_length,tile_length〉维度的输出矩阵C;步骤2、在共享内存上创建4个暂存空间tileA,tileB,tileA’和tileB’;步骤3、从GPU上的一级存储上的矩阵A读取tileA大小的矩阵到tileA,从矩阵B读取tileB大小的矩阵到tileB;步骤4、每次从tileA加载一列到寄存器,从tileB加载一行到寄存器,做矩阵乘运算,读取该寄存器内容,并运用乘加融合指令做矩阵乘运算,在矩阵乘运算的同时,从该一级存储分别读取下一个tileA和tileB的一行到tileA’和tileB’;步骤5、做完tileA和tileB的矩阵乘以后,将tileA和tileA’地址互换,将tileB和tileB’地址互换。所述的利用AMDGPU汇编指令加速的单精度矩阵乘优化方法,其中该步骤4包括共享内存bank冲突消除步骤,具体为在AMDGPU上利用s_waitcntvmcnt指令等待访存指令,分配线程的计算任务,安排一个threadblock中的所有线程对该共享内存的一次访问限制在同一个bank中。所述的利用AMDGPU汇编指令加速的单精度矩阵乘优化方法,其中该乘加融合指令包括v_mac计算指令、DS_READ指令和全局内存数据预取指令,该步骤4还包括将全局内存数据预取指令和v_mac,DS_READ指令交错放置。所述可利用AMDGPU汇编指令加速的单精度矩阵乘优化方法,其中该步骤4还包括寄存器缓存机制,通过将该寄存器的操作数缓存,以供该乘加融合指令使用。所述的可利用AMDGPU汇编指令加速的单精度矩阵乘优化方法,其中选择TBUFFER_LOAD和DS_READ不同位宽的访存宽度,使用TBUFFER_LOAD_XYZW指令从全局内存读取数据,使用DS_READ_B128从该共享内存读取数据。本专利技术还公开了一种利用AMDGPU汇编指令加速的单精度矩阵乘优化系统,包括:模块1、根据tile_length对原始矩阵进行分块,每个block处理〈tile_length,tile_length〉维度的输出矩阵C;模块2、在共享内存上创建4个暂存空间tileA,tileB,tileA’和tileB’;模块3、从GPU上的一级存储上的矩阵A读取tileA大小的矩阵到tileA,从矩阵B读取tileB大小的矩阵到tileB;模块4、每次从tileA加载一列到寄存器,从tileB加载一行到寄存器,做矩阵乘运算,读取该寄存器内容,并运用乘加融合指令做矩阵乘运算,在矩阵乘运算的同时,从该一级存储分别读取下一个tileA和tileB的一行到tileA’和tileB’;模块5、做完tileA和tileB的矩阵乘以后,将tileA和tileA’地址互换,将tileB和tileB’地址互换。所述的利用AMDGPU汇编指令加速的单精度矩阵乘优化系统,其中该模块4包括共享内存bank冲突消除模块,具体为在AMDGPU上利用s_waitcntvmcnt指令等待访存指令,分配线程的计算任务,安排一个threadblock中的所有线程对该共享内存的一次访问限制在同一个bank中。所述的利用AMDGPU汇编指令加速的单精度矩阵乘优化系统,其中该乘加融合指令包括v_mac计算指令、DS_READ指令和全局内存数据预取指令,该模块4还包括将全局内存数据预取指令和v_mac,DS_READ指令交错放置。所述可利用AMDGPU汇编指令加速的单精度矩阵乘优化系统,其中该模块4还包括寄存器缓存机制,通过将该寄存器的操作数缓存,以供该乘加融合指令使用。所述的可利用AMDGPU汇编指令加速的单精度矩阵乘优化系统,其中选择TBUFFER_LOAD和DS_READ不同位宽的访存宽度,使用TBUFFER_LOAD_XYZW指令从全局内存读取数据,使用DS_READ_B128从该共享内存读取数据。本专利技术的技术进步包括:设计并实现了一种基于GPU汇编指令的矩阵乘算法,可以达到95%的峰值性能,超过目前最优的rocBLAS实现19%。附图说明图1为GPU双缓冲矩阵乘法算法示意图;图2为共享内存双缓冲计算流程图;图3为共享内存bank冲突示意图;图4为共享内存bank冲突消除示意图;图5为非v_mac指令重排示意图;图6为寄存器分块大小对性能的影响。具体实施方式为让本专利技术的上述特征和效果能阐述的更明确易懂,下文特举实施例,并配合说明书附图作详细说明如下。本专利技术所涉及的GPU双缓冲矩阵乘法算法如图1和图2所示:1.首先根据tile_lenght(矩阵子块长度)对原始矩阵进行分块,每个block(gpu线程块)处理<tile_length,tile_length>维度的输出矩阵C;2.在sharedmemory上开辟4个暂存空间tileA,tileB,tileA’和tileB’;3.从globalmemory(GPU上的一级存储)上的矩阵A读取tileA大小的矩阵到til本文档来自技高网
...

【技术保护点】
1.一种利用AMD GPU汇编指令加速的单精度矩阵乘优化方法,其特征在于,包括:步骤1、根据tile_length对原始矩阵进行分块,每个block处理〈tile_length,tile_length〉维度的输出矩阵C;步骤2、在共享内存上创建4个暂存空间tileA,tileB,tileA’和tileB’;步骤3、从GPU上的一级存储上的矩阵A读取tileA大小的矩阵到tileA,从矩阵B读取tileB大小的矩阵到tileB;步骤4、每次从tileA加载一列到寄存器,从tileB加载一行到寄存器,做矩阵乘运算,读取该寄存器内容,并运用乘加融合指令做矩阵乘运算,在矩阵乘运算的同时,从该一级存储分别读取下一个tileA和tileB的一行到tileA’和tileB’;步骤5、做完tileA和tileB的矩阵乘以后,将tileA和tileA’地址互换,将tileB和tileB’地址互换。

【技术特征摘要】
1.一种利用AMDGPU汇编指令加速的单精度矩阵乘优化方法,其特征在于,包括:步骤1、根据tile_length对原始矩阵进行分块,每个block处理〈tile_length,tile_length〉维度的输出矩阵C;步骤2、在共享内存上创建4个暂存空间tileA,tileB,tileA’和tileB’;步骤3、从GPU上的一级存储上的矩阵A读取tileA大小的矩阵到tileA,从矩阵B读取tileB大小的矩阵到tileB;步骤4、每次从tileA加载一列到寄存器,从tileB加载一行到寄存器,做矩阵乘运算,读取该寄存器内容,并运用乘加融合指令做矩阵乘运算,在矩阵乘运算的同时,从该一级存储分别读取下一个tileA和tileB的一行到tileA’和tileB’;步骤5、做完tileA和tileB的矩阵乘以后,将tileA和tileA’地址互换,将tileB和tileB’地址互换。2.如权利要求1所述的利用AMDGPU汇编指令加速的单精度矩阵乘优化方法,其特征在于,该步骤4包括共享内存bank冲突消除步骤,具体为在AMDGPU上利用s_waitcntvmcnt指令等待访存指令,分配线程的计算任务,安排一个threadblock中的所有线程对该共享内存的一次访问限制在同一个bank中。3.如权利要求1所述的利用AMDGPU汇编指令加速的单精度矩阵乘优化方法,其特征在于,该乘加融合指令包括v_mac计算指令、DS_READ指令和全局内存数据预取指令,该步骤4还包括将全局内存数据预取指令和v_mac,DS_READ指令交错放置。4.如权利要求1所述可利用AMDGPU汇编指令加速的单精度矩阵乘优化方法,其特征在于,该步骤4还包括寄存器缓存机制,通过将该寄存器的操作数缓存,以供该乘加融合指令使用。5.如权利要求3所述的可利用AMDGPU汇编指令加速的单精度矩阵乘优化方法,其特征在于,选择TBUFFER_LOAD和DS_READ不同位宽的访存宽度,使用TBUFFER_LOAD_XYZW指令从全局内存读取数据,使用DS_READ_B128从该共享内存读取数据。...

【专利技术属性】
技术研发人员:谭光明郝海波于献智王朝尉
申请(专利权)人:中国科学院计算技术研究所
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1