CN107168683A - 国产申威26010众核cpu上gemm稠密矩阵乘高性能实现方法 - Google Patents

国产申威26010众核cpu上gemm稠密矩阵乘高性能实现方法 Download PDF

Info

Publication number
CN107168683A
CN107168683A CN201710310445.3A CN201710310445A CN107168683A CN 107168683 A CN107168683 A CN 107168683A CN 201710310445 A CN201710310445 A CN 201710310445A CN 107168683 A CN107168683 A CN 107168683A
Authority
CN
China
Prior art keywords
core
submatrix
matrix
row
ldm
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
Application number
CN201710310445.3A
Other languages
English (en)
Other versions
CN107168683B (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 Software of CAS
Wuxi Jiangnan Computing Technology Institute
Original Assignee
Institute of Software of CAS
Wuxi Jiangnan Computing Technology Institute
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 Software of CAS, Wuxi Jiangnan Computing Technology Institute filed Critical Institute of Software of CAS
Priority to CN201710310445.3A priority Critical patent/CN107168683B/zh
Publication of CN107168683A publication Critical patent/CN107168683A/zh
Application granted granted Critical
Publication of CN107168683B publication Critical patent/CN107168683B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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
    • 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, 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, look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • 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, look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline, look ahead using instruction pipelines
    • G06F9/3869Implementation aspects, e.g. pipeline latches; pipeline synchronisation and clocking
    • 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, look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline, look ahead using a slave processor, e.g. coprocessor
    • G06F9/3879Concurrent instruction execution, e.g. pipeline, look ahead using a slave processor, e.g. coprocessor for non-native instruction execution, e.g. executing a command; for Java instruction set
    • G06F9/3881Arrangements for communication of instructions and data
    • 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, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]

Abstract

本发明公开了国产申威26010众核CPU上GEMM稠密矩阵乘高性能实现方法,针对国产申威众核处理器26010,并基于存储结构、访存、硬件流水线以及寄存器级通信机制等平台特性,优化矩阵分块与核间数据映射方法,设计了自顶向下的三级分块并行块矩阵乘算法,基于寄存器级通信机制设计从核计算资源数据共享方法,并利用主从核间异步DMA数据传输机制,设计了计算与访存重叠的双缓冲策略,在单个从核上,设计了循环展开策略与软件流水线排布方法,使用了高效的寄存器分块模式以及SIMD向量化乘加指令,实现函数优化。该高性能GEMM函数性能与单核开源BLAS数学库GotoBLAS相比,平均加速比为227.94,最高加速比为296.93。

Description

国产申威26010众核CPU上GEMM稠密矩阵乘高性能实现方法
技术领域
本发明涉及基础线性代数库BLAS(Basic Linear Algebra Subprograms)level3函数稠密矩阵乘运算GEMM(General matrix-matrix multiplication)的高性能实现方法,尤指基于国产申威众核平台体系结构的高性能GEMM实现及优化方法。
背景技术
稠密矩阵乘运算作为底层和基础矩阵运算操作,广泛应用于科学和工程计算领域,因此对其性能要求极高。BLAS是一种基础线性代数子程序库,主要包含向量和矩阵的基本操作,是最基础和最重要的数学库之一,目前大多矩阵运算相关的软件都会调用BLAS库,且世界超级计算机TOP500排名基准软件LINPACK底层便以BLAS为支撑。BLAS目前已成为线性代数领域的一个标准API库,GEMM是BLAS数学库标准中关于矩阵运算的重要基础函数,其执行的操作为如下所示通用矩阵乘法:
C=alpha*op(A)*op(B)+beta*C (1)
其中alpha、beta为标量因子,A,B,C为操作矩阵,其中C作为输入矩阵,公式右侧更新后的值覆盖原矩阵作为输出矩阵,op(.)算子实现矩阵转置或非转置形式,且包含单精度、双精度、复数单精度和复数双精度四种类型。GEMM具有计算密集以及访存模式规则的特征,能较好地适用于目前具有多级存储结构体系以及超高并行计算能力的高性能计算机,但同时GEMM性能严重依赖于能否有效地利用机器硬件特性,即如何合理将数据排布在存储结构中,利用高效的访存模式,提高数据重用率,通过计算隐藏访存来提升性能,同时能够挖掘矩阵运算的并行性,充分利用高性能计算机的并行计算资源,是GEMM高性能实现的极大挑战。
针对GEMM的优化工作,国内外已经有相当多的研究成果,GOTO等人(Goto K,GeijnR A.Anatomy of high-performance matrix multiplication[J].ACM Transactions onMathematical Software(TOMS),2008,34(3):12.)基于三层嵌套循环块矩阵乘算法,充分分析矩阵乘运算性能与多层次cache以及TLB的关系,构建性能分析模型,并提出如何基于该模型选择最优算法。伴随着GPU加速器的快速发展,GEMM在GPU上的优化工作近年来也成为研究热点,重点体现在如何更高效地利用GPU存储体系结构及其访存特征,合理地选择块GEMM算法分块大小和高效的访存模式以增加数据的重复利用和高效利用机器带宽等,来提升GEMM性能。另外,近年来,GEMM的自动代码生成工作也逐渐成熟,Li Y等人(Li Y,Dongarra J,Tomov S.A Note on Auto-tuning GEMM for GPUs[C]//InternationalConference on Computational Science.2009:884--892)实现了GEMM在GPU平台的高效代码生成。
国产申威26010众核平台是一款由中国自主研发的主从异构CPU平台,由4个核组和系统接口组成,每个核组主要包括1个主核和1个从核阵列,其中一个从核阵列包含64个从核。主核采用64位RISC结构通用处理单元,主核和从核都支持256位向量浮点指令扩展;每个从核包含32个寄存器以及64KB用户可控的LDM(Local Device Memory,局部存储器),且直接访问本地LDM延迟极小,且从核硬件流水线支持访存指令和浮点运算指令的同时发射;从核阵列的64个从核排列成8行、8列的mesh结构,从核阵列内部交互可使用寄存器级通信,以一个向量长度为单位,各从核可在其行或列上进行数据广播或数据接收;提供主从核间DMA异步数据传输机制,实现数据从主内存读取至从核LDM或从从核LDM写回至主内存中,且DMA包含多种数据传输模式,其中常用的有单从核模式与行模式,不同的数据传输模式对应不同的数据分布方式。申威众核处理器26010软硬件参数如表1所示。
表1:申威众核处理器26010软硬件参数
类型 参数
处理器CPU SW26010,主频1.45GHZ
内存容量 32GB
操作系统 Red Hat Enterprise Linux Server release 6.6
编译器及链接器 sw5cc 5.421-sw-485以及sw5f90 5.421-sw-485
编程语言及环境 C、C++、Fortran、MPI、OpenMP
申威众核处理器26010具有强大的计算能力,被应用于目前排名世界第一的超级计算机“神威·太湖之光”上,有越来越多的重要科学计算软件部署在该平台上,GEMM函数作为BLAS level3函数中的最重要函数之一,其在申威众核平台上的实际计算性能对于严重依赖其的上层应用至关重要。由于SW26010是一款由中国新自主研制的异构平台,支持主从核间高效的DMA数据传输通道,从核间支持寄存器通信机制,且每个从核支持特殊的流水线机制,使用了定制SIMD扩展指令,支持256位向量浮点计算,尤其增加了乘加聚合指令,使得现有的开源BLAS库(如GotoBLAS)不能很好的发挥平台计算特性,计算性能极低,因此急需设计实现一种基于该众核平台的高性能GEMM算法,以发挥申威众核处理器强大的计算能力,且满足上层应用对申威众核平台上高性能GEMM的迫切需求。
发明内容
本发明解决的问题是:基于目前已有的开源BLAS数学库没有针对申威众核处理器26010特定优化过,不能充分发挥众核计算能力,性能较低的情况,本发明提出了国产申威26010众核CPU上GEMM稠密矩阵乘高性能实现方法,该方法基于申威众核处理器26010单核组上存储结构、访存方式、硬件流水线以及寄存器级通信机制等平台特性,使用包括数据存储格式、向量化、计算访存重叠、循环展开与软件流水线等多种技术,应用并改进块矩阵乘算法,高效优化函数性能。
本发明高性能实现方案包括如下方面:申威26010众核平台存储结构体系自底向上包含主内存,从核LDM,寄存器三级存储结构,受限于各级存储结构存储空间的大小,设计三级分块并行矩阵乘算法,以将数据传输到从核上利用从核阵列强大的计算资源进行计算,其中从核阵列包含组织成8行8列mesh结构的64个从核。设C为待更新矩阵,A,B为运算矩阵,其维度分别为m*n,m*k,k*n,在主内存级分别将矩阵C,A,B划分成大小为bm*bn的子矩阵BCij,1≤i≤m/bm,1≤j≤n/bn,bm*bk的子矩阵BAil,1≤i≤m/bm,1≤l≤n/bn和bk*bn的子矩阵BBlj,1≤l≤k/bk,1≤j≤n/bn,在从核LDM分别将子矩阵BCij,BAil,BBlj平均划分成64份大小为pm*pn的子矩阵PCuv,1≤u≤8,1≤v≤8,pm*pk的子矩阵PAuw,1≤u≤8,1≤w≤8和pk*pn的子矩阵PBwv,1≤w≤8,1≤v≤8,在寄存器级,将子矩阵PCuv划分成大小为rm*rn的子矩阵进行更新。
三级分块并行矩阵乘算法步骤如下:
第一步,采用n-k-m三层嵌套循环算法,控制矩阵C以子矩阵BCij为单位,串行更新;
第二步,更新子矩阵BCij时,利用主从核间异步DMA数据传输机制,通过计算与访存重叠的双缓冲策略,将计算所需的子矩阵BCij,BAil和BBlj从主内存传输到从核阵列的LDM中,且进行数据传输时,将子矩阵BCij,BAil和BBlj进一步划分的子矩阵PCuv,PAuw和PBwv,分别映射到64个从核上,每个从核得到相应的子矩阵PCuv,PAuw和PBwv
第三步,更新子矩阵BCij时,利用已传输到从核阵列上的子矩阵BAil和BBlj,在64个从核上,并行计算核心操作BAil*BBlj,每个从核负责映射到本地LDM的子矩阵PCuv的更新,且在并行计算时,通过寄存器通信机制实现从核阵列间的数据共享;
第四步,每个从核更新子矩阵PCuv时,主要执行运算PAuw*PBwv,对此核心操作,设计循环展开策略与软件流水线排布方法,在最内层循环使用高效的寄存器分块模式,以rm*rn的C子矩阵为单位进行更新,并256位SIMD向量化以及乘加指令,实现函数优化;
第五步,将已经更新的子矩阵BCij,通过DMA方式从从核LDM中写回主内存中。
所述第一步,n-k-m三层嵌套循环算法,将矩阵B作为缓存矩阵,即上传到从核阵列中的B矩阵元素将缓存在从核LDM中直到不再使用。
所述第二步,DMA传输方式包含行模式和单从核模式两种,可根据矩阵地址对齐方式自动选择传输效率较高的行模式传输矩阵元素,否则选择单从核模式;
所述第二步,双缓冲策略具体为,从主存预取用于下次计算A矩阵元素、C矩阵元素到从核LDM,以及从LDM写回上次循环计算过的C矩阵元素,且此数据传输过程与本次块矩阵乘计算过程并行执行,计算过程执行时间略大于数据传输过程所需时间。
所述第二步,子矩阵BCij,BAil和BBlj再划分以及子矩阵与从核阵列映射方法具体为,将子矩阵BCij,BAil和BBlj分别沿列方向平均切分成8列子矩阵,大小分别为bm*pn,bm*pk和bk*pn,并分别映射到8行从核上,即第i(1≤i≤8)列子矩阵映射到第i(1≤i≤8)行从核上,且每列子矩阵映射到对应行从核时,将每列子矩阵沿行方向平均切分为8份,并映射到该行的8个从核上,每个从核得到对应的PCuv,PAuw和PBwv
所述第三步,核心操作BAil*BBlj的并行计算以及寄存器通信共享数据过程,具体如下:
(1)BAil*BBlj子矩阵乘共迭代计算8次,每次迭代核心操作为BAil的第i(1≤i≤8)列子矩阵(大小为bm*pk)与BBlj的第i行子矩阵(大小为bk*pn)相乘,迭代计算过程中每个从核负责存储在本地LDM中PCuv的更新;
(2)每个BAil列子矩阵包含8个子矩阵PAuw,每个BBlj行子矩阵包含8个子矩阵PBwv,因此,每次迭代,列子矩阵与行子矩阵相乘可以转换成64个子矩阵乘运算PAuw*PBwv,并分配给64个从核并行计算,每个从核执行对应的子矩阵乘运算PAuw*PBwv
(3)每个从核执行运算PAuw*PBwv所需的PAuw子矩阵元素和PBwv子矩阵元素来自其本地LDM或者通过寄存器通信方式从其它从核获取,第i(1≤i≤8)次循环,位于8*8阵列中第p(1≤p≤8)行第q(1≤q≤8)列的从核,需要从第i行第q列的从核获取A矩阵元素,从第p行第i列的从核获取B矩阵元素。更具体地,第i行从核,通过列广播的方式广播其本地LDM的A矩阵元素,并接收B矩阵元素,第i列从核,通过行广播的方式广播其本地LDM的B矩阵元素,并接收A矩阵元素,其中第i行,第i列的从核只广播数据,并不接收数据,不在第i行或者第i列的从核接收矩阵A元素和矩阵B元素,不广播数据;
(4)每次将迭代计算的结果叠加到本地LDM中存储的PCuv中。图2所示为第0次迭代和第1次迭参与运算的A列子矩阵和对应的B行子矩阵,迭代结果进行叠加。
所述第四步,优化方法中寄存器分块和指令流水线排布具体需满足如下条件:
(1)寄存器分块,rm个寄存器用于存储A矩阵元素,rn个寄存器用于存储B矩阵元素,rm*rn个寄存器用于存储累加和C矩阵元素,受限于每个从核拥有32个寄存器,因此则需满足rm+rn+rm*rn≤32;
(2)指令流水线,根据硬件流水线特征重排最内层循环指令,尽可能避免计算指令与访存指令的依赖关系,将没有依赖关系的计算指令与访存指令同时发射。
所述三级分块并行矩阵乘算法分块大小bm,bk,bn,pm,pk,pn选取依赖于从核LDM空间的大小,即对应申请的存储空间不能超过申威众核处理器从核LDM大小,且分块大小之间满足关系bm=8pm,bk=8pk和bn=8pn。
本发明与现有技术相比的有益效果在于:本发明基于SW26010众核处理器的存储结构、访存、硬件流水线以及寄存器级通信机制等平台特性,使用包括数据存储格式、向量化、计算访存重叠、循环展开与软件流水线等多种技术,并设计了并行块矩阵乘算法以及寄存器通信数据共享方法,解决了目前开源数学库GEMM不能充分利用从核计算能力的问题,大幅提升了GEMM函数性能。该高性能GEMM函数性能可以达到平台峰值的90%以上,与单核开源GotoBLAS数学库相比,平均加速比为227.94,最高加速比为296.93。
附图说明
图1是GEMM发明高性能方案基本流程图;
图2是块矩阵乘过程第0次迭代和第1次迭代计算示意图;
图3是以4行4列从核阵列为例描述矩阵元素与从核阵列的映射图;
图4是申威众核平台26010与GotoBLAS库GEMM四种精度实现的性能对比图。
具体实施方式
下面结合附图和实施例对本发明进行详细说明。
如图1所示,具体实现采用“interface接口层-scheduling任务调度层-kernel汇编计算层”的三级代码框架,描述如下:
(1)interface接口层函数:该层为函数接口,对输入参数进行检查,判断如果出现不合法参数时返回错误码;另外,根据输入矩阵A,B的精度和转置情况,调用对应的scheduling任务调度层函数;
(2)scheduling任务调度层函数:由interface接口层函数调用,并调用kernel汇编计算层函数。通过n-k-m三层循环控制矩阵C更新顺序,串行地对C子矩阵更新,共M*N个C子矩阵,其中M=m/bm,N=n/bn。对于矩阵A,B,C依据并行方案所述在数据对齐以及保证计算顺序正确的情况下通过DMA行模式读取,否则通过DMA单从核模式读取,并将根据高性能方案所述将子矩阵映射到64个从核上;对于每个C子矩阵的更新任务,平均地分配给64个从核并行执行;并且A和C子矩阵的DMA数据传输过程与kernel汇编计算任务基于双缓冲策略异步执行;
(3)kernel汇编计算层函数:由scheduling任务调度层函数调用。kernel汇编计算层函数,主要用于更新存储在本地LDM的pm*pn大小的C矩阵元素,需循环更新8次;此kernel汇编计算层函数主要实现并行方案中所述寄存器通信过程,以及pm*pk大小的A子矩阵与pk*pn的矩阵B子矩阵相乘过程,并基于高性能方案所述采用寄存器分块、设计指令流水线、向量化以及乘加指令进行优化;
(4)采用寄存器分块进行优化,需保证rm+rn+rm*rn≤32,以本发明中DGEMM(GEMM双精度实现)中为例,选取rm=4,rn=4;
(5)根据硬件流水线设计指令流水线,主要遵从如下规则:通过指令重排,尽可能避免计算指令与访存指令的依赖关系,将没有依赖关系的计算指令与访存指令同时发射;
(6)对于pm、pn、pk值的选取,以DGEMM为例,本实现选取pm=16,pk=64和pn=32。
测试平台为申威众核平台26010,表2统计了数据规模分别为1024、2048、4096和8192时,申威众核26010GEMM性能和GotoBLAS GEMM性能,对比图如图3所示,实验包含了1024、2048、4096、8192四种矩阵规模,实数单精、实数双精、复数单精、复数双精共16组测试用例,平均加速比为227.94,最高加速比为296.93。
表2
提供以上实施例仅仅是为了描述本发明的目的,而并非要限制本发明的范围。本发明的范围由所附权利要求限定。不脱离本发明的精神和原理而做出的各种等同替换和修改,均应涵盖在本发明的范围之内。

Claims (8)

1.国产申威26010众核CPU上GEMM稠密矩阵乘高性能实现方法,其特征在于:申威26010众核平台存储结构体系自底向上包含主内存,从核LDM,寄存器三级存储结构,受限于各级存储结构存储空间的大小,设计三级分块并行矩阵乘算法,以将数据传输到从核上利用从核阵列强大的计算资源进行计算,其中从核阵列包含组织成8行8列mesh结构的64个从核,设C为待更新矩阵,A,B为运算矩阵,C、A、B维度分别为m*n,m*k,k*n,在主内存分别将矩阵C、A、B划分成大小为bm*bn的子矩阵BCij,1≤i≤m/bm,1≤j≤n/bn,bm*bk的子矩阵BAil,1≤i≤m/bm,1≤l≤n/bn和bk*bn的子矩阵BBlj,1≤l≤k/bk,1≤j≤n/bn,在从核LDM分别将子矩阵BCij,BAil,BBlj平均划分成64份大小为pm*pn的子矩阵PCuv,1≤u≤8,1≤v≤8,pm*pk的子矩阵PAuw,1≤u≤8,1≤w≤8和pk*pn的子矩阵PBwv,1≤w≤8,1≤v≤8,将数据从LDM传输到寄存器进行运算时,将子矩阵PCuv划分成大小为rm*rn的子矩阵进行更新;
所述三级分块并行矩阵乘算法具体步骤如下:
第一步,采用n-k-m三层嵌套循环算法,控制矩阵C以子矩阵BCij为单位,串行更新;
第二步,更新子矩阵BCij时,利用主从核间异步DMA数据传输机制,通过计算与访存重叠的双缓冲策略,将计算所需的子矩阵BCij,BAil和BBlj从主内存传输到从核LDM中,且进行数据传输时,将子矩阵BCij,BAil和BBlj进一步划分的子矩阵PCuv,PAuw和PBwv,分别映射到64个从核上,每个从核得到相应的子矩阵PCuv,PAuw和PBwv
第三步,更新子矩阵BCij时,利用已传输到从核阵列上的子矩阵BAil和BBlj,在64个从核上,并行计算核心操作BAil*BBlj,每个从核负责映射到本地LDM子矩阵PCuv的更新,且在并行计算时,通过寄存器通信机制实现从核阵列间的数据共享;
第四步,每个从核更新子矩阵PCuv时,主要执行运算PAuw*PBwv,对此核心操作,设计循环展开策略与软件流水线排布方法,在最内层循环使用高效的寄存器分块模式,以rm*rn的C子矩阵为单位进行更新,并256位SIMD向量化以及乘加指令,实现函数优化;
第五步,将已经更新的子矩阵BCij,通过DMA方式从从核LDM中写回主内存中。
2.根据权利要求1所述的国产申威26010众核CPU上GEMM稠密矩阵乘高性能实现方法,其特征在于:所述第一步,n-k-m三层嵌套循环算法中,将矩阵B作为缓存矩阵,即上传到从核阵列中的B矩阵元素将缓存在从核LDM中直到不再使用。
3.根据权利要求1所述的国产申威26010众核CPU上GEMM稠密矩阵乘高性能实现方法,其特征在于:所述第二步,DMA传输方式包含行模式和单从核模式两种,可根据矩阵地址对齐方式自动选择传输效率较高的行模式传输矩阵元素,否则选择单从核模式。
4.根据权利要求1所述的国产申威26010众核CPU上GEMM稠密矩阵乘高性能实现方法,其特征在于:所述第二步,双缓冲策略具体为,从主存预取用于下次计算A矩阵元素、C矩阵元素到从核LDM,以及从LDM写回上次循环计算过的C矩阵元素,且此数据传输过程与本次块矩阵乘计算过程并行执行,计算过程执行时间略大于数据传输过程所需时间。
5.根据权利要求1所述的国产申威26010众核CPU上GEMM稠密矩阵乘高性能实现方法,其特征在于:所述第二步,子矩阵BCij,BAil和BBlj再划分以及子矩阵与从核阵列映射方法具体为,将子矩阵BCij,BAil和BBlj分别沿列方向平均切分成8列子矩阵,大小分别为bm*pn,bm*pk和bk*pn,并分别映射到8行从核上,即第i列子矩阵映射到第i行从核上,1≤i≤8,且每列子矩阵映射到对应行从核时,将每列子矩阵沿行方向平均切分为8份,并映射到该行的8个从核上,每个从核得到对应的PCuv,PAuw和PBwv
6.根据权利要求1所述的国产申威26010众核CPU上GEMM稠密矩阵乘高性能实现方法,其特征在于:所述第三步,核心操作BAil*BBlj的并行计算以及寄存器通信共享数据过程,具体如下:
(1)BAil*BBlj子矩阵乘共迭代计算8次,每次迭代核心操作为BAil的第i列子矩阵,大小为bm*pk与BBlj的第i行子矩阵,大小为bk*pn相乘,1≤i≤8,迭代计算过程中每个从核负责存储在本地LDM中PCuv的更新;
(2)每个BAil列子矩阵包含8个子矩阵PAuw,每个BBlj行子矩阵包含8个子矩阵PBwv,因此,每次迭代,列子矩阵与行子矩阵相乘可以转换成64个子矩阵乘运算PAuw*PBwv,并分配给64个从核并行计算,每个从核执行对应的子矩阵乘运算PAuw*PBwv
(3)每个从核执行运算PAuw*PBwv所需的PAuw子矩阵元素和PBwv子矩阵元素来自其LDM或者通过寄存器通信方式从其它从核获取,第i次循环,位于8*8阵列中第p行第q列的从核,1≤p≤8,1≤q≤8,需要从第i行第q列的从核获取A矩阵元素,从第p行第i列的从核获取B矩阵元素,更具体地,第i行从核,通过列广播的方式广播其本地LDM的A矩阵元素,并接收B矩阵元素,第i列从核,通过行广播的方式广播其本地LDM的B矩阵元素,并接收A矩阵元素,其中第i行,第i列的从核只广播数据,并不接收数据,不在第i行或者第i列的从核接收矩阵A元素和矩阵B元素,不广播数据;
(4)每次将迭代计算的结果叠加到本地LDM中存储的PCuv中。
7.根据权利要求1所述的国产申威26010众核CPU上GEMM稠密矩阵乘高性能实现方法,其特征在于:所述第四步,优化方法中寄存器分块和指令流水线排布具体需满足如下条件:
(1)寄存器分块,rm个寄存器用于存储A矩阵元素,rn个寄存器用于存储B矩阵元素,rm*rn个寄存器用于存储累加和C矩阵元素,受限于每个从核拥有32个寄存器,则需满足rm+rn+rm*rn≤32;
(2)指令流水线,根据硬件流水线特征重排最内层循环指令,尽可能避免计算指令与访存指令的依赖关系,将没有依赖关系的计算指令与访存指令同时发射。
8.根据权利要求1所述的国产申威26010众核CPU上GEMM稠密矩阵乘高性能实现方法,其特征在于:所述bm,bk,bn,pm,pk,pn选取依赖于从核LDM空间的大小,即对应申请的存储空间不能超过申威众核处理器从核LDM大小,且满足关系bm=8pm,bk=8pk和bn=8pn。
CN201710310445.3A 2017-05-05 2017-05-05 申威26010众核cpu上gemm稠密矩阵乘高性能实现方法 Active CN107168683B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710310445.3A CN107168683B (zh) 2017-05-05 2017-05-05 申威26010众核cpu上gemm稠密矩阵乘高性能实现方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710310445.3A CN107168683B (zh) 2017-05-05 2017-05-05 申威26010众核cpu上gemm稠密矩阵乘高性能实现方法

Publications (2)

Publication Number Publication Date
CN107168683A true CN107168683A (zh) 2017-09-15
CN107168683B CN107168683B (zh) 2020-06-09

Family

ID=59813133

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710310445.3A Active CN107168683B (zh) 2017-05-05 2017-05-05 申威26010众核cpu上gemm稠密矩阵乘高性能实现方法

Country Status (1)

Country Link
CN (1) CN107168683B (zh)

Cited By (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108446253A (zh) * 2018-03-28 2018-08-24 北京航空航天大学 一种针对神威体系架构的稀疏矩阵向量乘的并行计算方法
CN109002659A (zh) * 2018-09-07 2018-12-14 西安交通大学 一种基于超级计算机的流体机械仿真程序优化方法
CN109445850A (zh) * 2018-09-19 2019-03-08 成都申威科技有限责任公司 一种基于申威26010处理器的矩阵转置方法及系统
CN109491791A (zh) * 2018-11-09 2019-03-19 华东师范大学 基于申威众核处理器的nsga-ii的主从增强式运行方法及装置
CN109739678A (zh) * 2019-01-10 2019-05-10 国家超级计算无锡中心 基于寄存器间通信的减少冗余读取方法
CN109766208A (zh) * 2019-01-10 2019-05-17 国家超级计算无锡中心 基于寄存器间通信的非对齐内存访问加速方法
CN110516194A (zh) * 2018-08-15 2019-11-29 北京航空航天大学 基于异构众核处理器的格点量子色动力学并行加速方法
CN110704362A (zh) * 2019-09-12 2020-01-17 无锡江南计算技术研究所 一种处理器阵列局部存储混合管理技术
CN110806900A (zh) * 2019-04-30 2020-02-18 海光信息技术有限公司 一种访存指令处理方法及处理器
CN111125950A (zh) * 2019-12-13 2020-05-08 北京科技大学 一种核反应堆热工水力模拟软件cfd并行处理方法
CN111461311A (zh) * 2020-03-26 2020-07-28 中国科学技术大学 基于众核处理器的卷积神经网络运算加速方法及装置
CN111667061A (zh) * 2020-04-17 2020-09-15 中国海洋大学 一种基于目标众核的深度学习框架移植与优化方法及系统
WO2020252763A1 (en) * 2019-06-21 2020-12-24 Intel Corporation Adaptive pipeline selection for accelerating memory copy operations
CN112148361A (zh) * 2020-08-27 2020-12-29 中国海洋大学 一种用于处理器加密算法移植的方法及系统
CN112181894A (zh) * 2019-07-04 2021-01-05 山东省计算中心(国家超级计算济南中心) 一种基于申威众核处理器的核组内分组自适应调整运行方法
CN112306678A (zh) * 2020-10-22 2021-02-02 中国海洋大学 一种基于异构众核处理器的算法并行处理方法及系统
CN112433853A (zh) * 2020-11-30 2021-03-02 西安交通大学 一种面向超级计算机数据并行应用的异构感知数据划分方法
CN112817898A (zh) * 2021-02-08 2021-05-18 清华大学 数据传输方法、处理器、芯片及电子设备
CN113641956A (zh) * 2021-08-05 2021-11-12 中国科学院软件研究所 面向SW26010-Pro处理器的1、2级BLAS函数库的高性能实现方法
CN113704691A (zh) * 2021-08-26 2021-11-26 中国科学院软件研究所 一种申威众核处理器的小规模对称矩阵并行三对角化方法
CN113835984A (zh) * 2021-09-27 2021-12-24 山东省计算中心(国家超级计算济南中心) 一种基于国产超算微架构的众核应用性能评估方法
CN113987414A (zh) * 2021-11-03 2022-01-28 中国人民解放军国防科技大学 基于ARMv8多核处理器的小型和不规则矩阵乘优化方法
TWI767303B (zh) * 2019-08-22 2022-06-11 美商谷歌有限責任公司 在神經網路中傳播延遲減少之電腦實施方法
CN116088773A (zh) * 2023-04-11 2023-05-09 南京砺算科技有限公司 一种基于隐式gemm卷积的数据加载方法、装置、设备及介质
CN117632530A (zh) * 2024-01-25 2024-03-01 山东省计算中心(国家超级计算济南中心) 基于新一代申威众核处理器的从核数量调整并行加速方法
CN117632530B (zh) * 2024-01-25 2024-05-03 山东省计算中心(国家超级计算济南中心) 基于新一代申威众核处理器的从核数量调整并行加速方法

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1971537A (zh) * 2005-11-25 2007-05-30 杭州中天微系统有限公司 一种矩阵数据存取方法及其矩阵数据存储装置
CN101089840A (zh) * 2007-07-12 2007-12-19 浙江大学 基于多fpga的矩阵乘法并行计算系统
US20110107060A1 (en) * 2009-11-04 2011-05-05 International Business Machines Corporation Transposing array data on simd multi-core processor architectures
CN105808309A (zh) * 2016-03-08 2016-07-27 中国科学院软件研究所 一种基于申威平台的基础线性代数库blas三级函数gemm的高性能实现方法
CN106445471A (zh) * 2016-10-13 2017-02-22 北京百度网讯科技有限公司 处理器和用于在处理器上执行矩阵乘运算的方法
US20170103311A1 (en) * 2015-10-08 2017-04-13 Via Alliance Semiconductor Co., Ltd. Neural network unit that performs convolutions using collective shift register among array of neural processing units

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1971537A (zh) * 2005-11-25 2007-05-30 杭州中天微系统有限公司 一种矩阵数据存取方法及其矩阵数据存储装置
CN101089840A (zh) * 2007-07-12 2007-12-19 浙江大学 基于多fpga的矩阵乘法并行计算系统
US20110107060A1 (en) * 2009-11-04 2011-05-05 International Business Machines Corporation Transposing array data on simd multi-core processor architectures
US20170103311A1 (en) * 2015-10-08 2017-04-13 Via Alliance Semiconductor Co., Ltd. Neural network unit that performs convolutions using collective shift register among array of neural processing units
CN105808309A (zh) * 2016-03-08 2016-07-27 中国科学院软件研究所 一种基于申威平台的基础线性代数库blas三级函数gemm的高性能实现方法
CN106445471A (zh) * 2016-10-13 2017-02-22 北京百度网讯科技有限公司 处理器和用于在处理器上执行矩阵乘运算的方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
范灵俊 等: "众核处理器高效片上访存机制研究", 《计算机学会第十五届计算机工程与工艺年会暨第一届微处理器技术论坛》 *
郑方 等: "面向高性能计算的众核处理器结构级高能效技术", 《计算机学报》 *

Cited By (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108446253A (zh) * 2018-03-28 2018-08-24 北京航空航天大学 一种针对神威体系架构的稀疏矩阵向量乘的并行计算方法
CN108446253B (zh) * 2018-03-28 2021-07-23 北京航空航天大学 一种针对神威体系架构的稀疏矩阵向量乘的并行计算方法
CN110516194A (zh) * 2018-08-15 2019-11-29 北京航空航天大学 基于异构众核处理器的格点量子色动力学并行加速方法
CN110516194B (zh) * 2018-08-15 2021-03-09 北京航空航天大学 基于异构众核处理器的格点量子色动力学并行加速方法
CN109002659A (zh) * 2018-09-07 2018-12-14 西安交通大学 一种基于超级计算机的流体机械仿真程序优化方法
CN109002659B (zh) * 2018-09-07 2020-08-28 西安交通大学 一种基于超级计算机的流体机械仿真程序优化方法
CN109445850A (zh) * 2018-09-19 2019-03-08 成都申威科技有限责任公司 一种基于申威26010处理器的矩阵转置方法及系统
CN109491791A (zh) * 2018-11-09 2019-03-19 华东师范大学 基于申威众核处理器的nsga-ii的主从增强式运行方法及装置
CN109739678A (zh) * 2019-01-10 2019-05-10 国家超级计算无锡中心 基于寄存器间通信的减少冗余读取方法
CN109766208A (zh) * 2019-01-10 2019-05-17 国家超级计算无锡中心 基于寄存器间通信的非对齐内存访问加速方法
CN110806900A (zh) * 2019-04-30 2020-02-18 海光信息技术有限公司 一种访存指令处理方法及处理器
WO2020252763A1 (en) * 2019-06-21 2020-12-24 Intel Corporation Adaptive pipeline selection for accelerating memory copy operations
CN112181894B (zh) * 2019-07-04 2022-05-31 山东省计算中心(国家超级计算济南中心) 一种基于申威众核处理器的核组内分组自适应调整运行方法
CN112181894A (zh) * 2019-07-04 2021-01-05 山东省计算中心(国家超级计算济南中心) 一种基于申威众核处理器的核组内分组自适应调整运行方法
TWI817490B (zh) * 2019-08-22 2023-10-01 美商谷歌有限責任公司 在神經網路中傳播延遲減少之電腦實施方法
TWI767303B (zh) * 2019-08-22 2022-06-11 美商谷歌有限責任公司 在神經網路中傳播延遲減少之電腦實施方法
CN110704362A (zh) * 2019-09-12 2020-01-17 无锡江南计算技术研究所 一种处理器阵列局部存储混合管理技术
CN110704362B (zh) * 2019-09-12 2021-03-12 无锡江南计算技术研究所 一种处理器阵列局部存储混合管理方法
CN111125950A (zh) * 2019-12-13 2020-05-08 北京科技大学 一种核反应堆热工水力模拟软件cfd并行处理方法
CN111125950B (zh) * 2019-12-13 2021-11-12 北京科技大学 一种核反应堆热工水力模拟软件cfd并行处理方法
CN111461311A (zh) * 2020-03-26 2020-07-28 中国科学技术大学 基于众核处理器的卷积神经网络运算加速方法及装置
CN111667061A (zh) * 2020-04-17 2020-09-15 中国海洋大学 一种基于目标众核的深度学习框架移植与优化方法及系统
CN111667061B (zh) * 2020-04-17 2023-04-18 中国海洋大学 一种基于目标众核的深度学习框架移植与优化方法及系统
CN112148361A (zh) * 2020-08-27 2020-12-29 中国海洋大学 一种用于处理器加密算法移植的方法及系统
CN112306678A (zh) * 2020-10-22 2021-02-02 中国海洋大学 一种基于异构众核处理器的算法并行处理方法及系统
CN112306678B (zh) * 2020-10-22 2022-10-04 中国海洋大学 一种基于异构众核处理器的算法并行处理方法及系统
CN112433853A (zh) * 2020-11-30 2021-03-02 西安交通大学 一种面向超级计算机数据并行应用的异构感知数据划分方法
CN112433853B (zh) * 2020-11-30 2023-04-28 西安交通大学 一种面向超级计算机数据并行应用的异构感知数据划分方法
CN112817898A (zh) * 2021-02-08 2021-05-18 清华大学 数据传输方法、处理器、芯片及电子设备
CN113641956B (zh) * 2021-08-05 2023-05-30 中国科学院软件研究所 面向SW26010-Pro处理器的1、2级BLAS函数库的高性能实现方法
CN113641956A (zh) * 2021-08-05 2021-11-12 中国科学院软件研究所 面向SW26010-Pro处理器的1、2级BLAS函数库的高性能实现方法
CN113704691B (zh) * 2021-08-26 2023-04-25 中国科学院软件研究所 一种申威众核处理器的小规模对称矩阵并行三对角化方法
CN113704691A (zh) * 2021-08-26 2021-11-26 中国科学院软件研究所 一种申威众核处理器的小规模对称矩阵并行三对角化方法
CN113835984A (zh) * 2021-09-27 2021-12-24 山东省计算中心(国家超级计算济南中心) 一种基于国产超算微架构的众核应用性能评估方法
CN113835984B (zh) * 2021-09-27 2023-08-08 山东省计算中心(国家超级计算济南中心) 一种基于国产超算微架构的众核应用性能评估方法
CN113987414A (zh) * 2021-11-03 2022-01-28 中国人民解放军国防科技大学 基于ARMv8多核处理器的小型和不规则矩阵乘优化方法
CN116088773A (zh) * 2023-04-11 2023-05-09 南京砺算科技有限公司 一种基于隐式gemm卷积的数据加载方法、装置、设备及介质
CN117632530A (zh) * 2024-01-25 2024-03-01 山东省计算中心(国家超级计算济南中心) 基于新一代申威众核处理器的从核数量调整并行加速方法
CN117632530B (zh) * 2024-01-25 2024-05-03 山东省计算中心(国家超级计算济南中心) 基于新一代申威众核处理器的从核数量调整并行加速方法

Also Published As

Publication number Publication date
CN107168683B (zh) 2020-06-09

Similar Documents

Publication Publication Date Title
CN107168683A (zh) 国产申威26010众核cpu上gemm稠密矩阵乘高性能实现方法
Fang et al. swdnn: A library for accelerating deep learning applications on sunway taihulight
Kamil et al. An auto-tuning framework for parallel multicore stencil computations
CN105808309B (zh) 一种基于申威平台的基础线性代数库blas三级函数gemm的高性能实现方法
Yin et al. Memory-aware loop mapping on coarse-grained reconfigurable architectures
CN109002659B (zh) 一种基于超级计算机的流体机械仿真程序优化方法
Jiang et al. Towards highly efficient DGEMM on the emerging SW26010 many-core processor
CN103336758A (zh) 一种稀疏矩阵的存储方法CSRL及基于该方法的SpMV实现方法
Zou et al. Optimization schemes and performance evaluation of Smith–Waterman algorithm on CPU, GPU and FPGA
Chen et al. Efficient tensor core-based gpu kernels for structured sparsity under reduced precision
Rojek et al. Adaptation of fluid model EULAG to graphics processing unit architecture
CN107908477A (zh) 一种用于射电天文数据的数据处理方法及装置
Choi et al. Practical acceleration of direct whole-core calculation employing graphics processing units
Wyrzykowski et al. Towards efficient decomposition and parallelization of MPDATA on hybrid CPU-GPU cluster
Dursun et al. In-Core Optimization of High-Order Stencil Computations.
Tang et al. Optimizing and auto-tuning iterative stencil loops for GPUs with the in-plane method
Paulin et al. RNN-based radio resource management on multicore RISC-V accelerator architectures
CN102722472A (zh) 一种复数矩阵的优化方法
Alachiotis et al. A data locality methodology for matrix–matrix multiplication algorithm
Gorobets Parallel technology for numerical modeling of fluid dynamics problems by high-accuracy algorithms
Walden et al. Memory Optimizations for Sparse Linear Algebra on GPU Hardware
Rojek et al. Parallelization of 3D MPDATA algorithm using many graphics processors
Li et al. A fine-grained prefetching scheme for DGEMM kernels on GPU with auto-tuning compatibility
Liu et al. The implementation and optimization of parallel linpack on multi-core vector accelerator
Faber et al. Efficient parallel execution of genetic algorithms on Epiphany manycore processor

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