CN110147248A - 利用amd gpu汇编指令加速的单精度矩阵乘优化方法和系统 - Google Patents
利用amd gpu汇编指令加速的单精度矩阵乘优化方法和系统 Download PDFInfo
- Publication number
- CN110147248A CN110147248A CN201910317936.XA CN201910317936A CN110147248A CN 110147248 A CN110147248 A CN 110147248A CN 201910317936 A CN201910317936 A CN 201910317936A CN 110147248 A CN110147248 A CN 110147248A
- Authority
- CN
- China
- Prior art keywords
- tileb
- tilea
- instruction
- matrix
- read
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 239000011159 matrix material Substances 0.000 title claims abstract description 113
- 238000005457 optimization Methods 0.000 title claims abstract description 33
- 238000000034 method Methods 0.000 title claims abstract description 22
- 230000004927 fusion Effects 0.000 claims abstract description 17
- 238000003860 storage Methods 0.000 claims abstract description 11
- 230000007246 mechanism Effects 0.000 claims description 5
- 230000004907 flux Effects 0.000 description 7
- 238000004364 calculation method Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 230000003139 buffering effect Effects 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 230000017105 transposition Effects 0.000 description 3
- 230000004888 barrier function Effects 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000003780 insertion Methods 0.000 description 2
- 230000037431 insertion Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 229940002865 4-way Drugs 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000004040 coloring Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/3013—Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3814—Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/383—Operand prefetching
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Complex Calculations (AREA)
Abstract
本发明涉及一种利用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’地址互换。
Description
技术领域
本发明涉及深度学习、高性能计算以及GPGPU编程领域,并特别涉及一种可利用AMD GPU汇编指令加速的单精度矩阵乘优化方法和系统。
背景技术
GPU图形处理器是一种专用于图像和视频处理的芯片。由于其芯片设计的特殊性——简化逻辑处理,增加计算单元,早期GPU只用来处理图形图像相关的应用编程。而随着GPU芯片的日益强大,GPU转向GPGPU发展,即其通用性得到了大量的提高。目前,GPU在嵌入式系统,智能终端,个人电脑,工作站等设备中得到了广泛的应用。Radeon Instinct系列GPU是AMD推出的,专门针对高性能计算和人工智能应用的芯片。相比普通的GPU,其浮点运算性能更高。例如Radeon Instinct MI25 GPU,具有64个CU,每个CU上有64个SP单元,其峰值性能可以达到12288gflops,超过了大部分主流CPU芯片。
SGEMM(单精度矩阵乘)是BLAS数值计算库的一个重要函数。在多核CPU上,MKL,ATLAS,和Openblas等数学库对SGEMM做了很细致的调优。最近,越来越多单精度矩阵乘在GPU实现。在GPU上,rocBLAS是AMD公司提供的在AMD GPU上的Blas高性能数学库。但是rocBLAS性能低,SGEMM函数一般根据输入的两个矩阵是否转置,调用不同的处理程序。T代表转置,N代表不转置。rocBLAS的NN,NT,TN,TT等各个子程序最高只能达到74.1%左右的性能,最低只有54.6%左右的性能。因此需要开发一个更高性能的SGEMM程序。
现有技术(基于NVIDIAKepler GPU汇编指令的单精度矩阵乘优化方法与系统)仅适用于NVIDIAKepler GPU单精度稠密矩阵乘的优化,而不能对AMD GPU单精度稠密矩阵乘进行性能调优。因此急需一种适用于AMD GPU的单精度稠密矩阵乘进行性能调优方法。
发明内容
本发明的目的是解决上述现有技术中AMD GPU单精度稠密矩阵乘效率低问题,提出了一种利用GPU汇编指令来优化数值计算程序的方法。
具体地说,本发明公开了一种利用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’地址互换。
所述的利用AMD GPU汇编指令加速的单精度矩阵乘优化方法,其中该步骤4包括共享内存bank冲突消除步骤,具体为在AMD GPU上利用s_waitcnt vmcnt指令等待访存指令,分配线程的计算任务,安排一个thread block中的所有线程对该共享内存的一次访问限制在同一个bank中。
所述的利用AMD GPU汇编指令加速的单精度矩阵乘优化方法,其中该乘加融合指令包括v_mac计算指令、DS_READ指令和全局内存数据预取指令,该步骤4还包括将全局内存数据预取指令和v_mac,DS_READ指令交错放置。
所述可利用AMD GPU汇编指令加速的单精度矩阵乘优化方法,其中该步骤4还包括寄存器缓存机制,通过将该寄存器的操作数缓存,以供该乘加融合指令使用。
所述的可利用AMD GPU汇编指令加速的单精度矩阵乘优化方法,其中选择TBUFFER_LOAD和DS_READ不同位宽的访存宽度,使用TBUFFER_LOAD_XYZW指令从全局内存读取数据,使用DS_READ_B128从该共享内存读取数据。
本发明还公开了一种利用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’地址互换。
所述的利用AMD GPU汇编指令加速的单精度矩阵乘优化系统,其中该模块4包括共享内存bank冲突消除模块,具体为在AMD GPU上利用s_waitcnt vmcnt指令等待访存指令,分配线程的计算任务,安排一个thread block中的所有线程对该共享内存的一次访问限制在同一个bank中。
所述的利用AMD GPU汇编指令加速的单精度矩阵乘优化系统,其中该乘加融合指令包括v_mac计算指令、DS_READ指令和全局内存数据预取指令,该模块4还包括将全局内存数据预取指令和v_mac,DS_READ指令交错放置。
所述可利用AMD GPU汇编指令加速的单精度矩阵乘优化系统,其中该模块4还包括寄存器缓存机制,通过将该寄存器的操作数缓存,以供该乘加融合指令使用。
所述的可利用AMD GPU汇编指令加速的单精度矩阵乘优化系统,其中选择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.从global memory(GPU上的一级存储)上的矩阵A读取tileA大小的矩阵到tileA,从矩阵B读取tileB大小的矩阵到tileB;
4.每次从tileA加载一列到寄存器,从tileB加载一行到寄存器,做矩阵乘运算;
5.在做运算的同时,从global memory读取下一个tileA和tileB的一行到tileA’和tileB’;
6.做完tileA和tileB的矩阵乘以后,将tileA和tileA’地址互换,将tileB和tileB’地址互换。
在优化的过程中,本发明主要需要考虑到矩阵分块、共享内存bank冲突避免、s_waitcnt等待访存指令、和向量指令的使用。
共享内存bank冲突消除:
图3中最上方部分表示bank编号,shared memory除去前两行的部分表示一个block中A矩阵在sharedmemory中的分布情况,同一列位于相同的bank。图3中sharedmemory前两行不同阴影标注的部分,表示每个线程要读取的数据,例如(0,xxx)表示tid.x==0,tid.y为0~7的线程要读取的8个元素。可以看出(0,xxx)线程和(4,xxx)线程都要读取bank0~bank7中的元素。由于bank0的读取要进行四次,因此可以看出bank0的读取有4-way bank冲突。其他bank可类似分析。可以得知对于所有的bank,此时的shared memory有4-waybank冲突。
产生shared memory bank冲突的原因是在一个threadblock(warp线程块,warp为同时执行相同指令的基本单位,为gpu中最小的执行单位,可以认为是simd中的寄存器宽度))中,所有线程对shared memory的访问跨越了2个bank,导致不同的线程访问同一个bank的不同entry(元素)这种情况发生。接下来,将展示如何通过分配线程的计算任务来消除shared memorybank冲突。消除sharedmemorybank冲突的方法是:安排一个(warp线程块)threadblock中的不同的线程对sharedmemory的访问分布在不同的bank中(都是为了避免访存冲突,一个是共享内存冲突,一个是寄存器冲突)。
对图4中同一行的线程读4个连续的bank,没有bank冲突;不同线程读相同的位置,会在同一行进行广播;图4中同一列的线程读4个连续的bank,没有bank冲突,会在同一列进行广播。因此,通过设计这种共享内存读的方式,可以完全消除bank冲突。
非v_mac指令重排:
矩阵乘法计算的乘加融合指令中,主要由两种指令组成,一是v_mac计算指令,另一种是访存指令,虽然矩阵乘法计算属于计算密集型,但是性能仍然受限于访存带宽,因此要将非计算指令进行重排。
通常编程人员尝试将不同类型的指令交错放置来使得一个CU上不同的功能部件可以均衡的利用起来,进而获得更高的指令通量。本文采用下面的指令重排方法。将全局内存数据预取指令和v_mac,DS_READ指令交错放置来获得更高的性能。图5展示了矩阵乘主循环中非v_mac指令的位置。
在每个8x8(这个块的计算时间正好等于4条128位读取操作时间)的循环的起始位置插入4条DS_READ_B128指令,这4条指令是为下一个8x8循环进行预取。在第0次展开的24和32的位置(8x8会进行循环展开,第一个8x8就是第零次展开,8x8展开就是64条指令,24和32就是其中的位置)(分别插入一条)插入两条全局内存读指令t_buffer_load_xyzw,这两条指令也是在进行数据预取。为了让全局内存读指令和共享内存写指令间隔的(尽可能远才能让通信和计算重叠)尽可能地远,在第6次展开的24和32位置插入共享内存写指令ds_write_b128。其中最为巧妙的是利用s_waitcnt vmcnt指令来精确地等待某一条全局内存读指令的完成。第6次展开的24位置s_waitcnt vmcnt(3)指令表示3条全局访存指令还未完成,即按顺序发射了4条访存指令,其中第1条访存指令结果已经返回,剩下3条指令结果还未返回,这样就是在等待第1条指令结果返回然后继续执行,否则就等待。其他指令的位置可类似分析。同时相比于OpenCL,手工编写汇编可以去除冗余指令,在OpenCL中只能使用barrier指令来进行等待,手工编写汇编可以去除barrier指令使用更为准确的s_waitcnt指令进行等待。
选择TBUFFER_LOAD和DS_READ的访存宽度:
同上,访存的优化非常重要。通过控制访存指令的种类或者大小来实现最大化利用带宽。
根据实验的测试结果,使用TBUFFER_LOAD_XYZW指令从全局内存读取数据带宽更高。本发明使用DS_READ_B128(这是一条指令,表示从shared memory读取128位)从共享内存读取数据,DS_READ_B128有比DS_READ_B32更高的带宽。对于AMD Fiji和Vega GPU,每个CU(计算单元核)每一个shader cycle(着色周期)的ds_read指令通量的峰值为32个32-bit。AMD GPU每个CU上每个SIMD(单指令多数据多核子设备)有16个LD/ST(load/store读取/存储)单元,使用DS_READ_B64就可以满足通量峰值,所以使用DS_READ_B128指令不会增加读数据的通量。此时,在DS_READ_B64和DS_READ_B128和v_mac混合指令通量相同的情况下,最好的情况是合理使用DS_READ_B128指令,使用DS_READ_B64的通量峰值将是ds_read_b32通量峰值的2倍。
从图6可以看出,随着寄存器分块大小增大,v_mac指令百分比在提高。在寄存器分块大小不变的情况下,ds_read_bxx指令的位数宽度越宽,v_mac指令百分比越高。如果采用的寄存器分块大小为6,则FFMA/DS_READ_B32=4:1,FFMA/DS_READ_B64=8:1,FFMA/DS_READ_B128=16:1。FFMA指令的百分比分别为80%,88.89%和94.12%。增大寄存器分块可以提高v_mac指令的百分比,在v_mac和ds_read混合指令通量不变的情况下,v_mac指令的百分比越高,v_mac指令的通量越高。
以下为与上述方法实施例对应的系统实施例,本实施方式可与上述实施方式互相配合实施。上述施方式中提到的相关技术细节在本实施方式中依然有效,为了减少重复,这里不再赘述。相应地,本实施方式中提到的相关技术细节也可应用在上述实施方式中。
本发明还公开了一种利用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’地址互换。
所述的利用AMD GPU汇编指令加速的单精度矩阵乘优化系统,其中该模块4包括共享内存bank冲突消除模块,具体为在AMD GPU上利用s_waitcnt vmcnt指令等待访存指令,分配线程的计算任务,安排一个thread block中的所有线程对该共享内存的一次访问限制在同一个bank中。
所述的利用AMD GPU汇编指令加速的单精度矩阵乘优化系统,其中该乘加融合指令包括v_mac计算指令、DS_READ指令和全局内存数据预取指令,该模块4还包括将全局内存数据预取指令和v_mac,DS_READ指令交错放置。
所述可利用AMD GPU汇编指令加速的单精度矩阵乘优化系统,其中该模块4还包括寄存器缓存机制,通过将该寄存器的操作数缓存,以供该乘加融合指令使用。
所述的可利用AMD GPU汇编指令加速的单精度矩阵乘优化系统,其中选择TBUFFER_LOAD和DS_READ不同位宽的访存宽度,使用TBUFFER_LOAD_XYZW指令从全局内存读取数据,使用DS_READ_B128从该共享内存读取数据。
通过结合附图对本发明具体实施例的描述与说明,本发明的其它方面及特征对本领域的技术人员而言是显而易见的。应当注意,这些实施例应被认为只是示例性的,并不用于对本发明进行限制。在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明做出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
Claims (10)
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’地址互换。
2.如权利要求1所述的利用AMD GPU汇编指令加速的单精度矩阵乘优化方法,其特征在于,该步骤4包括共享内存bank冲突消除步骤,具体为在AMD GPU上利用s_waitcntvmcnt指令等待访存指令,分配线程的计算任务,安排一个thread block中的所有线程对该共享内存的一次访问限制在同一个bank中。
3.如权利要求1所述的利用AMD GPU汇编指令加速的单精度矩阵乘优化方法,其特征在于,该乘加融合指令包括v_mac计算指令、DS_READ指令和全局内存数据预取指令,该步骤4还包括将全局内存数据预取指令和v_mac,DS_READ指令交错放置。
4.如权利要求1所述可利用AMD GPU汇编指令加速的单精度矩阵乘优化方法,其特征在于,该步骤4还包括寄存器缓存机制,通过将该寄存器的操作数缓存,以供该乘加融合指令使用。
5.如权利要求3所述的可利用AMD GPU汇编指令加速的单精度矩阵乘优化方法,其特征在于,选择TBUFFER_LOAD和DS_READ不同位宽的访存宽度,使用TBUFFER_LOAD_XYZW指令从全局内存读取数据,使用DS_READ_B128从该共享内存读取数据。
6.一种利用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’地址互换。
7.如权利要求6所述的利用AMD GPU汇编指令加速的单精度矩阵乘优化系统,其特征在于,该模块4包括共享内存bank冲突消除模块,具体为在AMD GPU上利用s_waitcntvmcnt指令等待访存指令,分配线程的计算任务,安排一个thread block中的所有线程对该共享内存的一次访问限制在同一个bank中。
8.如权利要求6所述的利用AMD GPU汇编指令加速的单精度矩阵乘优化系统,其特征在于,该乘加融合指令包括v_mac计算指令、DS_READ指令和全局内存数据预取指令,该模块4还包括将全局内存数据预取指令和v_mac,DS_READ指令交错放置。
9.如权利要求6所述可利用AMD GPU汇编指令加速的单精度矩阵乘优化系统,其特征在于,该模块4还包括寄存器缓存机制,通过将该寄存器的操作数缓存,以供该乘加融合指令使用。
10.如权利要求8所述的可利用AMD GPU汇编指令加速的单精度矩阵乘优化系统,其特征在于,选择TBUFFER_LOAD和DS_READ不同位宽的访存宽度,使用TBUFFER_LOAD_XYZW指令从全局内存读取数据,使用DS_READ_B128从该共享内存读取数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910317936.XA CN110147248B (zh) | 2019-04-19 | 2019-04-19 | 利用amd gpu汇编指令加速的单精度矩阵乘优化方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910317936.XA CN110147248B (zh) | 2019-04-19 | 2019-04-19 | 利用amd gpu汇编指令加速的单精度矩阵乘优化方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110147248A true CN110147248A (zh) | 2019-08-20 |
CN110147248B CN110147248B (zh) | 2021-06-29 |
Family
ID=67588489
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910317936.XA Active CN110147248B (zh) | 2019-04-19 | 2019-04-19 | 利用amd gpu汇编指令加速的单精度矩阵乘优化方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110147248B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117033298A (zh) * | 2022-10-21 | 2023-11-10 | 上海天数智芯半导体有限公司 | 一种瓦片处理器、soc芯片以及电子设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7836118B1 (en) * | 2006-06-16 | 2010-11-16 | Nvidia Corporation | Hardware/software-based mapping of CTAs to matrix tiles for efficient matrix multiplication |
CN102214160A (zh) * | 2011-07-08 | 2011-10-12 | 中国科学技术大学 | 一种基于龙芯3a的单精度矩阵乘法优化方法 |
CN105491387A (zh) * | 2015-12-04 | 2016-04-13 | 武汉斗鱼网络科技有限公司 | 一种基于Intel、AMD和Nvidia三平台的H264硬件编码系统 |
CN106681694A (zh) * | 2016-12-30 | 2017-05-17 | 中国科学院计算技术研究所 | 基于NVIDIA Kepler GPU汇编指令的单精度矩阵乘优化方法与系统 |
CN106846235A (zh) * | 2016-12-26 | 2017-06-13 | 中国科学院计算技术研究所 | 一种利用NVIDIA Kepler GPU汇编指令加速的卷积优化方法及系统 |
US20170344514A1 (en) * | 2016-05-31 | 2017-11-30 | Palo Alto Research Center Incorporated | System and method for speeding up general matrix-matrix multiplication on the gpu |
-
2019
- 2019-04-19 CN CN201910317936.XA patent/CN110147248B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7836118B1 (en) * | 2006-06-16 | 2010-11-16 | Nvidia Corporation | Hardware/software-based mapping of CTAs to matrix tiles for efficient matrix multiplication |
CN102214160A (zh) * | 2011-07-08 | 2011-10-12 | 中国科学技术大学 | 一种基于龙芯3a的单精度矩阵乘法优化方法 |
CN105491387A (zh) * | 2015-12-04 | 2016-04-13 | 武汉斗鱼网络科技有限公司 | 一种基于Intel、AMD和Nvidia三平台的H264硬件编码系统 |
US20170344514A1 (en) * | 2016-05-31 | 2017-11-30 | Palo Alto Research Center Incorporated | System and method for speeding up general matrix-matrix multiplication on the gpu |
CN106846235A (zh) * | 2016-12-26 | 2017-06-13 | 中国科学院计算技术研究所 | 一种利用NVIDIA Kepler GPU汇编指令加速的卷积优化方法及系统 |
CN106681694A (zh) * | 2016-12-30 | 2017-05-17 | 中国科学院计算技术研究所 | 基于NVIDIA Kepler GPU汇编指令的单精度矩阵乘优化方法与系统 |
Non-Patent Citations (1)
Title |
---|
殷建: "基于GPU的矩阵乘法优化研究", 《中国博士学位论文全文数据库》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117033298A (zh) * | 2022-10-21 | 2023-11-10 | 上海天数智芯半导体有限公司 | 一种瓦片处理器、soc芯片以及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN110147248B (zh) | 2021-06-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US12086097B2 (en) | Vector computational unit | |
US11797304B2 (en) | Instruction set architecture for a vector computational unit | |
EP4220380B1 (en) | Hardware accelerated machine learning | |
CN114168526A (zh) | 可重构并行处理 | |
CN103902507B (zh) | 一种面向可编程代数处理器的矩阵乘法计算装置及方法 | |
CN107229463A (zh) | 计算设备和相应计算方法 | |
US8438370B1 (en) | Processing of loops with internal data dependencies using a parallel processor | |
US9378003B1 (en) | Compiler directed cache coherence for many caches generated from high-level language source code | |
CN106681694A (zh) | 基于NVIDIA Kepler GPU汇编指令的单精度矩阵乘优化方法与系统 | |
CN105814538A (zh) | 用于仿真共享内存架构的支持浮点的流水线 | |
US11886347B2 (en) | Large-scale data processing computer architecture | |
US20080091924A1 (en) | Vector processor and system for vector processing | |
EP2352082A1 (en) | Data processing device | |
KR20230132580A (ko) | 트리거 조건에 따른 명령어 실행을 위한 회로 및 방법 | |
CN110147248A (zh) | 利用amd gpu汇编指令加速的单精度矩阵乘优化方法和系统 | |
US20170300330A1 (en) | Isa extensions for synchronous coalesced accesses | |
Choquette | Volta: Programmability and performance | |
Balfour | CUDA threads and atomics | |
US11853762B1 (en) | Single instruction multiple data execution with variable size logical registers | |
US8539207B1 (en) | Lattice-based computations on a parallel processor | |
JP2004503872A (ja) | 共同利用コンピュータシステム | |
KR20140081206A (ko) | 컴퓨터 시스템 | |
Kerbl et al. | CUDA and Applications to Task-based Programming. | |
Pikle et al. | Low occupancy high performance elemental products in assembly free FEM on GPU | |
Forsell et al. | Realizing multioperations and multiprefixes in Thick Control Flow processors |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |