本发明涉及高性能计算领域,具体涉及一种基于异构众核处理器的带状矩阵向量乘方法和装置。
背景技术:
1、目前,带状矩阵向量乘法(sparse matrix vector multiplication,spmv)作为基本线性代数子程序库(blas)的关键程序,已被广泛应用于科学模拟、数据分析、深度学习等领域。由于spmv的广泛应用,在各种高性能架构中加速spmv的研究,如多核cpu,gpgpu和mic的研究一直在不断出现。带状矩阵通常采取压缩存储格式,常见的存储格式有:坐标格式coo(coordinate)、压缩行存储格式csr(compressed sparse row)、ell格式(ellpack)、切片的ell格式sell(sliced ell)等。
2、由于能源效率和功率限制,低功耗的嵌入式架构正在被引入异构的高性能计算领域,如数字信号处理器(dsp)。基于cpu-dsp架构的异构高性能处理器,正逐渐被提出。
3、如果一个矩阵的非零元素沿主对角线及其相邻的对角线分布,则称为带状矩阵。带状矩阵是一种常见的矩阵类型,有着广泛的应用。通过使用reverse cuthill mckee(rcm)排序,可以将现有的许多稀疏矩阵转换成带状矩阵,所以充分利用dsp特殊架构针对带状矩阵的带状矩阵向量乘运算进行加速是研究的一个重点。现有的spmv计算方法并不适用于加速带状矩阵,这是由于通常带状矩阵自身的非零元分布不规则,传统的spmv计算方法通常会造成较大的访存延迟,导致较大的开销。
技术实现思路
1、本发明所要解决的技术问题在于,提供一种基于异构众核处理器的带状矩阵向量乘方法和装置,解决现有的带状矩阵向量乘中所存在的计算开销大问题。
2、为了解决上述技术问题,本发明实施例第一方面公开了一种基于异构众核处理器的带状矩阵向量乘方法,所述方法基于异构众核处理器的一个加速域来实现,所述异构众核处理器,包括一个通用计算域、若干个加速域和若干个ddr内存;所述通用计算域包括若干个通用cpu核,所述一个加速域,包括若干个dsp核和片上全局共享内存gsm,所述一个dsp核,包括一个控制核、一个am内存和若干个加速核;所述ddr内存、gsm和am内存,三者之间支持dma数据传输;所述方法包括:
3、s1,获取需要进行乘法运算的带状矩阵和向量;
4、s2,将所获取的带状矩阵进行格式转化,将所述向量和格式转化后的带状矩阵存入所述异构众核处理器的内存中;
5、s3,对所述异构众核处理器的内存中带状矩阵和向量进行相乘运算,得到相乘结果。
6、所述将所获取的带状矩阵和向量进行格式转化,将格式转化后的带状矩阵和向量存入所述异构众核处理器的内存中,包括:
7、s21,将所获取的带状矩阵转化为sell格式带状矩阵a,得到对应的sell格式带状矩阵a信息;
8、s22,将所述向量和所述sell格式带状矩阵a信息,存入所述异构众核处理器的ddr内存中;所述sell格式带状矩阵a信息,包括所述带状矩阵的非零元值、非零元列索引和基本行块信息;所述带状矩阵a,其维度为m×n;所述向量x,其维度为n;所述sell格式带状矩阵a,包括若干个基本行块;所述基本行块信息,包括非零元值、非零元列索引和行块索引。
9、所述对所述异构众核处理器的内存中带状矩阵和向量进行相乘运算,得到相乘结果,包括:
10、s31,确定带状矩阵行块数目n1;对带状矩阵a和向量x进行划分处理,得到矩阵行块集合和向量片段集合;所述矩阵行块集合,包括n1个行块和对应的行块序号;所述向量片段集合,包括n1个向量片段和对应的片段序号;
11、s32,初始化当前计算行块序号i=1;
12、s33,确定序号i的行块为当前计算行块;利用dma点对点传输方法,将所述当前计算行块和对应的向量x的片段,从所述异构众核处理器的ddr内存加载到所述加速域的片上全局共享内存gsm中;
13、s34,确定所述加速域所包含dsp核的数目corenum,为矩阵行块划分数corenum1;根据矩阵行块划分数corenum1,将当前计算行块按行方向均匀划分为corenum1个子行块,把每个子行块,依次分配给各个dsp核进行并行处理;确定子行块包含的基本行块个数beta;
14、s35,每个dsp核根据所处理的子行块的基本行块的非零元列索引,将所述非零元列索引对应的向量x的片段的元素,由片上全局共享内存gsm加载到所述dsp核的am内存上;
15、s36,对每个dsp核,利用dma点对点传输方法,将其所处理的子行块的基本行块的非零元值,由片上全局共享内存gsm加载到所述dsp核的am内存上。
16、s37,每个dsp核在其am内存上,对其所分配的子行块与对应向量x的片段值进行向量乘运算,得到所述子行块的第一运算结果y;
17、s38,当所有dsp核均已计算得到对应子行块的第一运算结果后,对所有子行块的第一运算结果进行合并处理,得到当前计算行块的第二运算结果;
18、判断是否得到所有行块的第二运算结果,若已得到所有行块的第二运算结果,执行s39,若未得到所有行块的第二运算结果,对当前计算行块序号i加1,执行s33;
19、s39,将每个行块的第二运算结果加载到对应的dsp核的ddr内存,对所有行块的第二运算结果进行合并处理,得到相乘结果。
20、所述确定带状矩阵行块数目n1,包括:
21、s311,计算得到带状矩阵的行块的行数的最大值blocklenmax;所述blocklenmax的计算表达式为:
22、blocklenmax=gsmlenmax-sbl–sbu,
23、其中,gsmlenmax为片上全局共享内存gsm的存储空间,sbl是指带状矩阵的主对角线下方的所有非零元素的行序号,偏移其对应的同一列的对角线元素的行序号的最大数值,即带状矩阵的下带宽,sbu指带状矩阵的主对角线上方的所有非零元素的列序号,偏离其主对角线的同一行的对角线元素的列序号的最大距离,即带状矩阵的上带宽;
24、s312,计算得到带状矩阵的行块的行数blocklen和数目n1,其计算表达式为:
25、num=m/blocklenmax,
26、blocklen=(n+num)/(num+1),
27、n1=m/blocklen,
28、其中,num为第一计算标量,blocklen是带状矩阵行块的大小,n1是带状矩阵划分的行块数目;
29、s313,将带状矩阵a按照行方向进行均匀划分,得到n1个行块;
30、s314,利用每个行块的非零元素的列索引值,对向量x中对应序号的元素进行抽取操作,得到所述行块对应的向量x的片段;
31、s315,计算得到每个行块对应的向量x的片段中元素的最大序号值和最小序号值;
32、s316,根据每个行块对应的向量x的片段中元素的最大序号值和最小序号值,确定每个行块的对应的向量x的片段所需要的存储空间。
33、所述行块对应的向量x的片段中元素的最大序号值和最小序号值,其计算表达式分别为:
34、x_start=startrow–sbl,
35、x_end=endrow+sbu,
36、其中,x_end和x_start分别表示所述行块对应的向量x的片段中元素的最大序号值和最小序号值,startrow和endrow是指所述行块的元素的起始行序号和结束行序号,startrow=(i-1)*blocklen+1,endrow=startrow+blocklen。
37、所述确定子行块包含的基本行块个数beta,包括:所述基本行块个数beta的计算表达式为:
38、beta=blocklen/(srow*corenum1),
39、其中,srow表示基本行块的行维度。
40、所述每个dsp核在其am内存上,对其所分配的子行块与对应向量x的片段值进行向量乘运算,得到所述子行块的第一运算结果y,包括:
41、每个dsp,在其am内存上,将其所分配的子行块的每个基本行块的非零元值,与所述基本行块的非零元列索引对应的向量x的片段的元素,进行相乘和累加运算,得到所述基本行块的计算结果;
42、对所分配的子行块的每个基本行块的计算结果进行合并处理,得到所述子行块的第一运算结果y;所述第一运算结果y,其表达式为[y1,y2,…,ybeta],y1表示所述子行块的第1基本行块的计算结果,依次类推,ybeta表示所述子行块的第beta基本行块的计算结果。
43、本实施例第二方面,公开了一种基于异构众核处理器的带状矩阵向量乘装置,所述装置包括:
44、存储有可执行程序代码的存储器;
45、与所述存储器耦合的处理器;
46、所述处理器调用所述存储器中存储的所述可执行程序代码,执行所述的基于异构众核处理器的带状矩阵向量乘方法。
47、本实施例第三方面,公开了一种计算机可存储介质,所述计算机存储介质存储有计算机指令,所述计算机指令被调用时,用于执行所述的基于异构众核处理器的带状矩阵向量乘方法。
48、本实施例第四方面,公开了一种信息数据处理终端,所述信息数据处理终端用于实现所述的基于异构众核处理器的带状矩阵向量乘方法。
49、本发明的有益效果为:
50、此项发明的目的是要在异构众核处理器上,针对带状矩阵设计和开发高效的spmv运算,借助异构众核处理器的cpu-dsp异构高性能平台,针对带状矩阵高效的执行spmv运算,其旨在解决以下技术问题:
51、1)利用异构众核处理器丰富的多级内存架构,解决传统spmv针对带状矩阵存在的访存受限和性能低的问题。带状矩阵向量乘运算中,通常对向量x的访问开销远大于对矩阵属性值的访问开销;借助片上高速内存gsm缓存向量x,可有效降低带状矩阵向量乘中不规则内存访问的延迟。
52、2)利用异构众核处理器的多个dsp核,可以实现spmv运算的高效并行化,通过多线程并行执行,可以提高并行度,从而有效地提升计算性能。