CN110147248B - 利用amd gpu汇编指令加速的单精度矩阵乘优化方法和系统 - Google Patents

利用amd gpu汇编指令加速的单精度矩阵乘优化方法和系统 Download PDF

Info

Publication number
CN110147248B
CN110147248B CN201910317936.XA CN201910317936A CN110147248B CN 110147248 B CN110147248 B CN 110147248B CN 201910317936 A CN201910317936 A CN 201910317936A CN 110147248 B CN110147248 B CN 110147248B
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.)
Active
Application number
CN201910317936.XA
Other languages
English (en)
Other versions
CN110147248A (zh
Inventor
谭光明
郝海波
于献智
王朝尉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Institute of Computing Technology of CAS
Original Assignee
Institute of Computing Technology of CAS
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Institute of Computing Technology of CAS filed Critical Institute of Computing Technology of CAS
Priority to CN201910317936.XA priority Critical patent/CN110147248B/zh
Publication of CN110147248A publication Critical patent/CN110147248A/zh
Application granted granted Critical
Publication of CN110147248B publication Critical patent/CN110147248B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand 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

利用AMD GPU汇编指令加速的单精度矩阵乘优化方法和系统
技术领域
本发明涉及深度学习、高性能计算以及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 (8)

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’地址互换;
其中该步骤4包括共享内存bank冲突消除步骤,具体为在AMD GPU上利用s_waitcntvmcnt指令等待访存指令,分配线程的计算任务,安排一个thread block中的所有线程对该共享内存的一次访问限制在同一个bank中。
2.如权利要求1所述的利用AMD GPU汇编指令加速的单精度矩阵乘优化方法,其特征在于,该乘加融合指令包括v_mac计算指令、DS_READ指令和全局内存数据预取指令,该步骤4还包括将全局内存数据预取指令和v_mac,DS_READ指令交错放置。
3.如权利要求1所述的利用AMD GPU汇编指令加速的单精度矩阵乘优化方法,其特征在于,该步骤4还包括寄存器缓存机制,通过将该寄存器的操作数缓存,以供该乘加融合指令使用。
4.如权利要求3所述的利用AMD GPU汇编指令加速的单精度矩阵乘优化方法,其特征在于,选择TBUFFER_LOAD和DS_READ不同位宽的访存宽度,使用TBUFFER_LOAD_XYZW指令从全局内存读取数据,使用DS_READ_B128从该共享内存读取数据。
5.一种利用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’地址互换;
其中该模块4包括共享内存bank冲突消除模块,具体为在AMD GPU上利用s_waitcntvmcnt指令等待访存指令,分配线程的计算任务,安排一个thread block中的所有线程对该共享内存的一次访问限制在同一个bank中。
6.如权利要求5所述的利用AMD GPU汇编指令加速的单精度矩阵乘优化系统,其特征在于,该乘加融合指令包括v_mac计算指令、DS_READ指令和全局内存数据预取指令,该模块4还包括将全局内存数据预取指令和v_mac,DS_READ指令交错放置。
7.如权利要求6所述利用AMD GPU汇编指令加速的单精度矩阵乘优化系统,其特征在于,该模块4还包括寄存器缓存机制,通过将该寄存器的操作数缓存,以供该乘加融合指令使用。
8.如权利要求7所述的利用AMD GPU汇编指令加速的单精度矩阵乘优化系统,其特征在于,选择TBUFFER_LOAD和DS_READ不同位宽的访存宽度,使用TBUFFER_LOAD_XYZW指令从全局内存读取数据,使用DS_READ_B128从该共享内存读取数据。
CN201910317936.XA 2019-04-19 2019-04-19 利用amd gpu汇编指令加速的单精度矩阵乘优化方法和系统 Active CN110147248B (zh)

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 CN110147248A (zh) 2019-08-20
CN110147248B true 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)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117033298A (zh) * 2022-10-21 2023-11-10 上海天数智芯半导体有限公司 一种瓦片处理器、soc芯片以及电子设备

Citations (3)

* Cited by examiner, † Cited by third party
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
CN106681694A (zh) * 2016-12-30 2017-05-17 中国科学院计算技术研究所 基于NVIDIA Kepler GPU汇编指令的单精度矩阵乘优化方法与系统
CN106846235A (zh) * 2016-12-26 2017-06-13 中国科学院计算技术研究所 一种利用NVIDIA Kepler GPU汇编指令加速的卷积优化方法及系统

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102214160B (zh) * 2011-07-08 2013-04-17 中国科学技术大学 一种基于龙芯3a的单精度矩阵乘法优化方法
CN105491387B (zh) * 2015-12-04 2019-06-21 武汉斗鱼网络科技有限公司 一种基于Intel、AMD和Nvidia三平台的H264硬件编码系统
US10073815B2 (en) * 2016-05-31 2018-09-11 Palo Alto Research Cener Incorporated System and method for speeding up general matrix-matrix multiplication on the GPU

Patent Citations (3)

* Cited by examiner, † Cited by third party
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
CN106846235A (zh) * 2016-12-26 2017-06-13 中国科学院计算技术研究所 一种利用NVIDIA Kepler GPU汇编指令加速的卷积优化方法及系统
CN106681694A (zh) * 2016-12-30 2017-05-17 中国科学院计算技术研究所 基于NVIDIA Kepler GPU汇编指令的单精度矩阵乘优化方法与系统

Also Published As

Publication number Publication date
CN110147248A (zh) 2019-08-20

Similar Documents

Publication Publication Date Title
US7031994B2 (en) Matrix transposition in a computer system
US8250130B2 (en) Reducing bandwidth requirements for matrix multiplication
DE69233412T2 (de) Vorrichtung und Rechnerprogrammprodukt zur Ausführung von Verzweigungsbefehlen
US6175892B1 (en) Registers and methods for accessing registers for use in a single instruction multiple data system
KR101120398B1 (ko) 스레드 최적화된 멀티프로세서 구조
US20100115233A1 (en) Dynamically-selectable vector register partitioning
US20070226469A1 (en) Permutable address processor and method
US8438370B1 (en) Processing of loops with internal data dependencies using a parallel processor
CN103744639A (zh) 数据访问和置换单元
JPH09106342A (ja) 並べ換え装置
CN112506567B (zh) 数据读取方法和数据读取电路
CN111656339B (zh) 存储器装置及其控制方法
US11934824B2 (en) Methods for performing processing-in-memory operations, and related memory devices and systems
CN114579929B (zh) 加速器执行的方法和电子设备
Cui et al. Auto-tuning dense matrix multiplication for GPGPU with cache
KR20100101586A (ko) 데이터 처리에 있어서 레지스터 시프트 및 회전을 포함하는 방법 및 명령어 세트
US20150356054A1 (en) Data processor and method for data processing
US20230289186A1 (en) Register addressing information for data transfer instruction
Rawat et al. Effective resource management for enhancing performance of 2D and 3D stencils on GPUs
US9058301B2 (en) Efficient transfer of matrices for matrix based operations
CN110147248B (zh) 利用amd gpu汇编指令加速的单精度矩阵乘优化方法和系统
US8156310B2 (en) Method and apparatus for data stream alignment support
Higbie Tutorial: Supercomputer architecture
CN117271136A (zh) 数据处理方法、装置、设备和存储介质
CN113254359A (zh) 用于执行存储器内计算的方法和存储器模块

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