当前位置: 首页 > 专利查询>东南大学专利>正文

一种基于CSR格式的高性能稀疏矩阵向量乘法计算方法技术

技术编号:30016761 阅读:15 留言:0更新日期:2021-09-11 06:26
本发明专利技术公开了一种基于CSR格式的高性能稀疏矩阵向量乘法计算方法,该方法首先根据现有的方法进行空间局部性优化,循环效率优化与访存效率优化;根据现有硬件资源的配置与仿真情况,自适应的开辟合理数目的线程,优化加锁解锁方式使线程池更高效;针对cache missing问题与硬件条件完成适应性的亲和性设置。本发明专利技术基于传统的CSR格式的稀疏矩阵向量乘法,充分考虑硬件资源对计算性能的限制,以及算法对计算效率与访存效率的影响;在改进原有算法基础上,模型可以资源配置与任务数目,自适应的通过基于矩阵索引的线程池与亲和性设置完成仿真加速。真加速。真加速。

【技术实现步骤摘要】
一种基于CSR格式的高性能稀疏矩阵向量乘法计算方法


[0001]本专利技术涉及稀疏矩阵向量乘法计算的
,特别是涉及一种基于CSR格式的高性能稀疏矩阵向量乘法计算方法。

技术介绍

[0002]目前工艺的不断进步,结点的尺寸在不断缩小,导致集成电路的密集程度不断增加。尤其针对大型的存储电路(动态随机存取存储器,静态随机存取存储器,快闪存储器等),矩阵向量运算会在整个仿真中占据很大规模的时间,仿真所运算的矩阵与向量与电路规模成正比,矩阵的规模甚至会达到千万维以上。但是电路中不同的结点之间并不是全连接关系,用简单的二维数组去表示会有大量的0值,存储空间有着极大的消耗。而采用CSR格式的压缩矩阵去存储并计算这些稀疏矩阵向量乘法,虽然可以减少大量的零元素的乘法,但是依旧会存在以下问题。
[0003]要计算的矩阵中,每行非零值数目不确定,非零值位置未知,甚至要仿真的行都是要变化的,因此在不考虑并发的条件下,如何在CSR格式下调度数据并选取合理的计算方式,保证各非零值找到的同时并完成加速。
[0004]通过CSR格式压缩稀疏矩阵,顺序访问压缩矩阵元素即可完成对矩阵所有元素的访问,同时,通过对应的横坐标值,可以访问与该矩阵元素进行乘法运算的向量元素。
[0005]利用多线程是实现加速的一个重要途径,但是选取独立的计算单元保证线程之间不冲突,与如何处理多个矩阵之间运算顺序保证各个矩阵都完成仿真都是要考虑的问题,在保证这两个条件下,如何做到更快的仿真依旧是重点与难点。
[0006]矩阵数据以CSR格式在内存中进行存储,可以保证每次缓存访问都可以从内存中拿到相当比例的非零元素。在CPU对缓存中的数据访问时,在L1,L2,L3cache每次向上传递时,也都可以保证缓存命中。但是向量由内存向缓存在向CPU传递时,依旧会存在cache missing现象。简单的利用多线程会使线程在不同core上反复调度,每个CPU core都要求对数据的重新搬运,会造成更严重的cache missing,甚至是DRAM从磁盘中调用所需数据,数据搬运所消耗的时间变得越来越重要,已不再是简单的计算密集型仿真任务,更是访存类型的问题。

技术实现思路

[0007]有鉴于此,本专利技术的目的在于提供一种基于CSR格式的高性能稀疏矩阵向量乘法计算方法,针对现有技术存在的仿真速度慢,读取内存中CSR格式的数据时造成不规则访问导致cache missing,带宽利用率低,多线程加速不理想以及带来的cache missing等问题。本专利技术为针对超大规模集成电路仿真中CSR格式的稀疏矩阵向量乘法,提供一种能优化计算结构与多线程调度方式,能够充分利用硬件CPU并行资源,自适应完成亲和性设置来实现SPMV(稀疏矩阵向量乘法)优化的方法。
[0008]为解决上述技术问题,本专利技术采用的技术方案为:
[0009]一种基于CSR格式的高性能稀疏矩阵向量乘法计算方法,包括如下步骤:
[0010]步骤S1、采用最简高效循环结构,进行空间局部性优化,循环效率优化与访存效率优化;
[0011]步骤S2、引入局部变量减少冗余访存和冗余计算;
[0012]步骤S3、在利用多线程加快仿真结果方面,借鉴线程池的基本思想并对线程池进行改进;
[0013]步骤S4、采用适应性的亲和性设置。
[0014]进一步的,所述采用最简高效循环结构具体包括:
[0015]步骤S101、将所有计算整合到一个循环结构中,用以减少冗余计算;
[0016]步骤S102、按压缩矩阵元素存储顺序访存;
[0017]步骤S103、循环步长为1。
[0018]进一步的,所述步骤S2具体包括:在循环内部使用局部变量保存中间结果,然后将中间结果保存在寄存器,计算结束后再写入内存;
[0019]在循环外提前计算循环内的中间结果,在循环内使用临时变量直接使用这一中间结果。
[0020]进一步的,所述步骤S3具体包括:
[0021]步骤S301、创建代表矩阵索引的全局变量与互斥锁,并定义结构体;
[0022]步骤S302、调用仿真任务模块时将全局变量赋初值;
[0023]步骤S303、利用CPU查看指令获得服务器的CPU逻辑核个数;
[0024]步骤S304、判断要执行的矩阵数目N与硬件支持线程数目的大小;
[0025]若小于,即创建N个线程,一个线程去执行一个矩阵,直接调用相应的多线程函数,执行计算任务;
[0026]若大于或者等于,则向下执行;
[0027]步骤S305、创建服务器支持的最大线程并为每个线程所执行的函数传递所需要的参数;
[0028]步骤S306、开辟线程并执行线程函数;
[0029]步骤S307、在开辟的线程中,线程函数将传递过来的参数进行解析操作;
[0030]步骤S308、每个线程去抢夺互斥锁,获得锁的线程判断全局变量是否大于要执行的矩阵数N,其中,N代表所有要执行的矩阵数目;
[0031]若大于,该线程释放互斥锁并打破循环,结束仿真;
[0032]若小于或者等于,将全局变量赋值给某一局部变量,释放互斥锁,并执行计算任务;
[0033]步骤S309、待所有线程都结束任务后,主线程结束,完成N个矩阵仿真任务。
[0034]进一步的,所述步骤S4具体包括:
[0035]步骤S401、设置并准备位掩码;
[0036]步骤S402、将位掩码清零;
[0037]步骤S403、将第i个逻辑core设置在位掩码上;
[0038]步骤S404、将线程绑定在设置好的位掩码上;
[0039]步骤S405、判断亲和性设置是否成功,
[0040]若不成功,则打印亲和性设置异常信息,
[0041]若成功,成功继续执行上述的操作。
[0042]本专利技术的有益效果是:
[0043]本专利技术公开一种基于CSR格式的高性能稀疏矩阵向量乘法计算方法,能够高效的利用硬件资源以及带宽,极大的减少此前运算过程中的cache missing,能够快速的完成CSR格式的SPMV仿真任务。因此,相较于普通的方法完成超大规模的仿真器中的稀疏矩阵向量乘法,本方法尤其适用于大规模的服务器,极大程度发挥CPU资源的利用率。同时,相较于第三方库,该方法尤其适合CSR格式存储的稀疏矩阵。利用代码优化与亲和性做到针对性的缓存优化,利用基于矩阵索引的线程池加快矩阵运算,并可以根据系统环境适应性完成线程开辟与亲和性设置,降低仿真过程中所带来时间开销。
附图说明
[0044]图1为本专利技术的流程图示意图。
[0045]图2为本专利技术对基础代码优化的具体过程的示意图。
[0046]图3为本专利技术多线程并行的流程示意图。
[0047]图4为本专利技术亲和性设置的流程示意图。
[0048]图5为本专利技术亲和性设置后的原理图。
具体实施方式
[0049]为本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于CSR格式的高性能稀疏矩阵向量乘法计算方法,其特征在于,包括如下步骤:步骤S1、采用最简高效循环结构,进行空间局部性优化,循环效率优化与访存效率优化;步骤S2、引入局部变量减少冗余访存和冗余计算;步骤S3、在利用多线程加快仿真结果方面,借鉴线程池的基本思想并对线程池进行改进;步骤S4、采用适应性的亲和性设置。2.根据权利要求1所述的一种基于CSR格式的高性能稀疏矩阵向量乘法计算方法,其特征在于,所述采用最简高效循环结构具体包括:步骤S101、将所有计算整合到一个循环结构中,用以减少冗余计算;步骤S102、按压缩矩阵元素存储顺序访存;步骤S103、循环步长为1。3.根据权利要求2所述的一种基于CSR格式的高性能稀疏矩阵向量乘法计算方法,其特征在于,所述步骤S2具体包括:在循环内部使用局部变量保存中间结果,然后将中间结果保存在寄存器,计算结束后再写入内存;在循环外提前计算循环内的中间结果,在循环内使用临时变量直接使用这一中间结果。4.根据权利要求3所述的一种基于CSR格式的高性能稀疏矩阵向量乘法计算方法,其特征在于,所述步骤S3具体包括:步骤S301、创建代表矩阵索引的全局变量与互斥锁,并定义结构体;步骤S302、调用仿真任务模块时将全局变量赋初值;步骤S303、利用CPU查看指...

【专利技术属性】
技术研发人员:王超张加浩左岳王寅初周亦非
申请(专利权)人:东南大学
类型:发明
国别省市:

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

1