CN108446253B - 一种针对神威体系架构的稀疏矩阵向量乘的并行计算方法 - Google Patents
一种针对神威体系架构的稀疏矩阵向量乘的并行计算方法 Download PDFInfo
- Publication number
- CN108446253B CN108446253B CN201810262274.6A CN201810262274A CN108446253B CN 108446253 B CN108446253 B CN 108446253B CN 201810262274 A CN201810262274 A CN 201810262274A CN 108446253 B CN108446253 B CN 108446253B
- Authority
- CN
- China
- Prior art keywords
- computing
- executing
- core
- calculation
- executing step
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Computational Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Multi Processors (AREA)
- Complex Calculations (AREA)
Abstract
本发明涉及一种针对神威体系架构的稀疏矩阵向量乘的并行计算方法,包括:将稀疏矩阵由原来的单层次数据结构,分割为多层次数据结构,多层次数据结构包括fleet、block、tile、slice四个层次;将多层次数据结构分别对应到神威的硬件体系结构和计算层次之中,提高了数据的空间和时间局部性,从而减少了从核组和内存之间的交互次数。
Description
技术领域
本发明涉及高性能计算机领域,尤其是涉及适用于神威超级计算机体系架构的稀疏矩阵与稠密向量相乘的并行计算优化方法。
背景技术
稀疏矩阵与稠密向量相乘(Sparse Matrix-vector Multiply,简写为SpMV)是众多领域程序里面一个十分重要,却又独立的计算核心。在流体力学、分子动力学等诸多涉及高性能计算的领域都有着广泛的应用。而且在如佩奇排名(PageRank)、广度优先搜索等图计算领域问题,也都可以抽象为SpMV问题。
SpMV问题在计算过程中有着两个突出的问题,分别是计算和访存模式的不规则。这些不规则是由于访存顺序的随机性导致的,很难利用数据的局部性。由于这种不规则的模式和输入的稀疏矩阵的随机顺序有很大关系,使得其在编译器阶段,很难被解决。而从硬件的角度考虑,这些不规则又会导致隐藏的写冲突问题,从而影响并限制指令级别和线程级别的并行。
这些使得SpMV算法应用到神威超级计算机体系结构上回带来更大的挑战。神威超级计算机是由10649600个SW26010处理器组成的。它以双精度浮点计算125PFLops的计算能力自2016年至当前2018年,蝉联超级计算机top500第一名。神威超级计算机体系架构不同于GPGPU、Intel Xeon Phi等,有着自己独特的设计思路。它有着类似于CPU的主核作为主要处理单元,同时在芯片内,也有着64个从核做为从核组,用作自己的计算加速单元。这个从核组内部每个从核有64KB的局存作为局部缓存数据,同时每一行和每一列的从核之间还可以通过寄存器通信,进行数据的交互。
发明内容
针对现有的SpMV应用于神威超级计算机体系架构计算效率较低的现状,我们提出了一种适用于神威超级计算机体系架构的稀疏矩阵存储结构,以及针对该结构的SpMV的计算方法,该方法能够有效提高SpMV在神威超级计算机体系架构上的计算效率。
本发明提供了一种针对稀疏矩阵与稠密向量相乘的并行计算方法,包括:将稀疏矩阵由原来的单层次数据结构,分割为多层次数据结构,多层次数据结构包括fleet、block、tile、slice四个层次;将多层次数据结构分别对应到神威的硬件体系结构和计算层次之中。
进一步的,为了保证能够及时缓存计算数据,在tile层和slice层之间加入batch机制,每次缓存从核能够承载的最多数量的slices;同时为了减少等待缓存的时间,同时采用异步缓存技术,每次提前缓存下一个batch需要的数据,在计算时直接采用上次已经提前缓存好的数据。
进一步的,将8×8核组的同行的几个从核组合成与多层数据结构中fleet层对应的计算单元来进行协同计算;每个计算单元由一个I/O核和若干个计算核构成,I/O核负责接收计算核计算出的结果,加入到该I/O核对于结果向量的缓存中,并在一个block处理完后,将对应的结果向量缓存写回内存中。这样就将从核组的从核分为了多组计算单元来完成任务,各个计算单元之间任务不需要交互,从而减少了从核组与内存之间的直接交互。
进一步的,计算核的计算流程包括以下步骤:
步骤(1)判断分配的Block是否已经计算完毕,如果是,则执行步骤(8),否则执行步骤(2);
步骤(2)判断Block内部的Tiles是否已经计算完毕,如果是,则执行步骤(7),否则执行步骤(3);
步骤(3)判断Tile内部的Batchs是否计算完毕,如果是,则执行步骤(2),否则执行步骤(4);
步骤(4)缓存该Batch计算需要的所有数据,执行步骤(5);
步骤(5)判断Batch内部的Slices是否计算完毕,如果是,则执行步骤(3),否则执行步骤(6);
步骤(6)计算Slices内部的数据,并在之后将计算结果传入I/O核中,执行步骤(5);
步骤(7)发送一个Block已完成的消息,并等待同步信息,在收到同步信息之后,执行步骤(1);
步骤(8)计算完毕。
进一步的,I/O核的计算流程包括以下步骤:
步骤(a)判断分配的Block是否已经计算完毕,如果是,则执行步骤(i),否则执行步骤(b);
步骤(b)初始化完成任务的计算核数目为0,执行步骤(c);
步骤(c)判断是否所有的计算核都完成了任务,是,则执行步骤(h),否则执行步骤(d);
步骤(d)等待接受计算核发来的消息,执行步骤(e);
步骤(e)判断是否为Block已完成的消息,是,则执行步骤(g),否则执行步骤(f);
步骤(f)将传入的消息加入计算结果的对于位置,执行步骤(d);
步骤(g)累计已完成任务的计算核的数量,执行步骤(c);
步骤(h)发送同步消息给所有的计算核,执行步骤(a);
步骤(i)计算完毕。
本发明的优点:
(1)通过对矩阵结构进行预分析和预处理,将稀疏矩阵由原来的单层次数据结构,分割为多层次数据结构,提高了数据的空间和时间局部性,从而减少了从核组和内存之间的交互次数。时间局部性是指在相对较小的持续时间内对特定数据和/或资源的重用。空间局部性是指在相对靠近的存储位置内使用数据元素。
(2)进一步的,在tile层和slice层之间加入batch机制,每次缓存从核能够承载的最多数量的slices,这样能够及时缓存计算数据;同时采用异步缓存技术,每次提前缓存下一个batch需要的数据,在计算时直接采用上次已经提前缓存好的数据,这样能够减少等待缓存的时间;从而提高了SpMV在神威体系架构上的计算效率;
(3)进一步的,本发明将8×8核组的同行的几个从核组合成与多层数据结构中fleet层对应的计算单元来进行协同计算;每个计算单元由一个I/O核和若干个计算核构成,它们共同完成整个Fleet分配的计算任务。从核组的从核分为了多组计算单元来完成任务,各个计算单元之间任务不需要交互,从核之间的数据交互只发生在计算单元内部。。
附图说明
图1是本发明的多层数据结构图;
图2是本发明中计算核和I/O核的运行流程的流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
本发明的基本思路在于,将矩阵的层次根据神威的体系架构划分为fleet、block、tile和slice等四个层次,这些层次分别对应着不同的硬件架构和计算层次。
本发明提供的针对稀疏矩阵与稠密向量相乘的并行计算方法,包括:将稀疏矩阵由原来的单层次数据结构,分割为多层次数据结构,多层次数据结构包括fleet、block、tile、slice四个层次;将多层次数据结构分别对应到神威的硬件体系结构和计算层次之中。本发明多层数据结构如图1所示。
进一步的,为了保证能够及时缓存计算数据,在tile层和slice层之间加入batch机制,每次缓存从核能够承载的最多数量的slices;同时为了减少等待缓存的时间,同时采用异步缓存技术,每次提前缓存下一个batch需要的数据,在计算时直接采用上次已经提前缓存好的数据。
进一步的,将8×8核组的同行的几个从核组合成与多层数据结构中fleet层对应的计算单元来进行协同计算;每个计算单元由一个I/O核和若干个计算核构成,它们共同完成整个Fleet分配的计算任务,I/O核负责接收计算核计算出的结果,加入到该I/O核对于结果向量的缓存中,并在一个block处理完后,将对应的结果向量缓存写回内存中。这样就将从核组的从核分为了多组计算单元来完成任务,各个计算单元之间任务不需要交互,从核之间的数据交互只发生在计算单元内部。
计算核和I/O核的运行流程分布如图2(a)和图2(b)所示。
计算核的计算流程包括以下步骤:
步骤(1)判断分配的Block是否已经计算完毕,如果是,则执行步骤(8),否则执行步骤(2);
步骤(2)判断Block内部的Tiles是否已经计算完毕,如果是,则执行步骤(7),否则执行步骤(3);
步骤(3)判断Tile内部的Batchs是否计算完毕,如果是,则执行步骤(2),否则执行步骤(4);
步骤(4)缓存该Batch计算需要的所有数据,执行步骤(5);
步骤(5)判断Batch内部的Slices是否计算完毕,如果是,则执行步骤(3),否则执行步骤(6);
步骤(6)计算Slices内部的数据,并在之后将计算结果传入I/O核中,执行步骤(5);
步骤(7)发送一个Block已完成的消息,并等待同步信息,在收到同步信息之后,执行步骤(1);
步骤(8)计算完毕。
I/O核的计算流程包括以下步骤:
步骤(a)判断分配的Block是否已经计算完毕,如果是,则执行步骤(i),否则执行步骤(b);
步骤(b)初始化完成任务的计算核数目为0,执行步骤(c);
步骤(c)判断是否所有的计算核都完成了任务,是,则执行步骤(h),否则执行步骤(d);
步骤(d)等待接受计算核发来的消息,执行步骤(e);
步骤(e)判断是否为Block已完成的消息,是,则执行步骤(g),否则执行步骤(f);
步骤(f)将传入的消息加入计算结果的对于位置,执行步骤(d);
步骤(g)累计已完成任务的计算核的数量,执行步骤(c);
步骤(h)发送同步消息给所有的计算核,执行步骤(a);
步骤(i)计算完毕。
本发明适用于神威体系架构上的稀疏矩阵与向量的并行高性能计算。通过调整原本的稀疏矩阵为多层次的矩阵,来对应神威体系架构下的各个硬件的性能,从而达到较好的优化效果。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (3)
1.一种针对神威体系架构的稀疏矩阵向量乘的并行计算方法,其特征在于,包括:
将稀疏矩阵由原来的单层次数据结构,分割为多层次数据结构,多层次数据结构包括fleet、block、tile、slice四个层次;fleet为针对稀疏矩阵的行进行切割,是计算单元的任务单元;tile是对fleet针对稀疏矩阵的列进行切割,为每个计算核的任务单元;slice是tile的一行数据,为一次寄存器通信可以传输的任务单元;block为多个连续的slice;
将多层次数据结构分别对应到神威的硬件体系结构和计算层次之中;
将8×8核组的同行的几个从核组合成与多层数据结构中fleet层对应的计算单元来进行协同计算;每个计算单元由一个I/O核和若干个计算核构成,I/O核负责接收计算核计算出的结果,加入到该I/O核对于结果向量的缓存中,并在一个block处理完后,将对应的结果向量缓存写回内存中;
在tile层和slice层之间加入batch机制,每次缓存从核能够承载的最多数量的slices;同时采用异步缓存技术,每次提前缓存下一个batch需要的数据,在计算时直接采用上次已经提前缓存好的数据。
2.根据权利要求1所述的针对神威体系架构的稀疏矩阵向量乘的并行计算方法,其特征在于,计算核的计算流程包括以下步骤:
步骤(1)判断分配的Block是否已经计算完毕,如果是,则执行步骤(8),否则执行步骤(2);
步骤(2)判断Block内部的Tiles是否已经计算完毕,如果是,则执行步骤(7),否则执行步骤(3);
步骤(3)判断Tile内部的Batchs是否计算完毕,如果是,则执行步骤(2),否则执行步骤(4);
步骤(4)缓存该Batch计算需要的所有数据,执行步骤(5);
步骤(5)判断Batch内部的Slices是否计算完毕,如果是,则执行步骤(3),否则执行步骤(6);
步骤(6)计算Slices内部的数据,并在之后将计算结果传入I/O核中,执行步骤(5);
步骤(7)发送一个Block已完成的消息,并等待同步信息,在收到同步信息之后,执行步骤(1);
步骤(8)计算完毕。
3.根据权利要求1所述的针对神威体系架构的稀疏矩阵向量乘的并行计算方法,其特征在于,I/O核的计算流程包括以下步骤:
步骤(a)判断分配的Block是否已经计算完毕,如果是,则执行步骤(i),否则执行步骤(b);
步骤(b)初始化完成任务的计算核数目为0,执行步骤(c);
步骤(c)判断是否所有的计算核都完成了任务,是,则执行步骤(h),否则执行步骤(d);
步骤(d)等待接受计算核发来的消息,执行步骤(e);
步骤(e)判断是否为Block已完成的消息,是,则执行步骤(g),否则执行步骤(f);
步骤(f)将传入的消息加入计算结果的对应位置,执行步骤(d);
步骤(g)累计已完成任务的计算核的数量,执行步骤(c);
步骤(h)发送同步消息给所有的计算核,执行步骤(a);
步骤(i)计算完毕。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810262274.6A CN108446253B (zh) | 2018-03-28 | 2018-03-28 | 一种针对神威体系架构的稀疏矩阵向量乘的并行计算方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810262274.6A CN108446253B (zh) | 2018-03-28 | 2018-03-28 | 一种针对神威体系架构的稀疏矩阵向量乘的并行计算方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108446253A CN108446253A (zh) | 2018-08-24 |
CN108446253B true CN108446253B (zh) | 2021-07-23 |
Family
ID=63197458
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810262274.6A Active CN108446253B (zh) | 2018-03-28 | 2018-03-28 | 一种针对神威体系架构的稀疏矩阵向量乘的并行计算方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108446253B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111125950B (zh) * | 2019-12-13 | 2021-11-12 | 北京科技大学 | 一种核反应堆热工水力模拟软件cfd并行处理方法 |
CN111104765B (zh) * | 2019-12-24 | 2021-08-17 | 清华大学 | 基于神威架构的气体动理学算法优化方法 |
CN111428192A (zh) * | 2020-03-19 | 2020-07-17 | 湖南大学 | 用于优化高性能计算构架稀疏矩阵向量乘的方法和系统 |
CN112765094B (zh) * | 2020-12-31 | 2022-09-30 | 北京航空航天大学 | 一种基于数据划分和任务分配的稀疏张量典范分解方法 |
WO2022161394A1 (zh) * | 2021-01-26 | 2022-08-04 | 北京灵汐科技有限公司 | 任务映射方法、任务处理方法、处理核和电子设备 |
CN116805155B (zh) * | 2023-08-25 | 2024-01-19 | 太初(无锡)电子科技有限公司 | 一种lstm网络处理方法、装置、设备及可读存储介质 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102033854A (zh) * | 2010-12-17 | 2011-04-27 | 中国科学院软件研究所 | 针对稀疏矩阵的数据存储方法及基于该方法的SpMV实现方法 |
CN102521463A (zh) * | 2011-12-26 | 2012-06-27 | 杭州电子科技大学 | 一种优化Cache行为提升油藏数值模拟效率的方法 |
CN103336758A (zh) * | 2013-06-29 | 2013-10-02 | 中国科学院软件研究所 | 一种稀疏矩阵的存储方法CSRL及基于该方法的SpMV实现方法 |
CN103984527A (zh) * | 2014-04-01 | 2014-08-13 | 杭州电子科技大学 | 优化稀疏矩阵向量乘提升不可压缩管流模拟效率的方法 |
CN104636273A (zh) * | 2015-02-28 | 2015-05-20 | 中国科学技术大学 | 一种带多级Cache的SIMD众核处理器上的稀疏矩阵存储方法 |
CN105224410A (zh) * | 2015-10-19 | 2016-01-06 | 成都卫士通信息产业股份有限公司 | 一种调度gpu进行批量运算的方法及装置 |
CN106095583A (zh) * | 2016-06-20 | 2016-11-09 | 国家海洋局第海洋研究所 | 基于新神威处理器的主从核协同计算编程框架 |
CN106775594A (zh) * | 2017-01-13 | 2017-05-31 | 中国科学院软件研究所 | 一种基于国产申威26010处理器的稀疏矩阵向量乘异构众核实现方法 |
CN107168683A (zh) * | 2017-05-05 | 2017-09-15 | 中国科学院软件研究所 | 国产申威26010众核cpu上gemm稠密矩阵乘高性能实现方法 |
CN107273094A (zh) * | 2017-05-18 | 2017-10-20 | 中国科学院软件研究所 | 一种适应于“神威·太湖之光”上hpcg优化的数据结构及其高效实现方法 |
-
2018
- 2018-03-28 CN CN201810262274.6A patent/CN108446253B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102033854A (zh) * | 2010-12-17 | 2011-04-27 | 中国科学院软件研究所 | 针对稀疏矩阵的数据存储方法及基于该方法的SpMV实现方法 |
CN102521463A (zh) * | 2011-12-26 | 2012-06-27 | 杭州电子科技大学 | 一种优化Cache行为提升油藏数值模拟效率的方法 |
CN103336758A (zh) * | 2013-06-29 | 2013-10-02 | 中国科学院软件研究所 | 一种稀疏矩阵的存储方法CSRL及基于该方法的SpMV实现方法 |
CN103984527A (zh) * | 2014-04-01 | 2014-08-13 | 杭州电子科技大学 | 优化稀疏矩阵向量乘提升不可压缩管流模拟效率的方法 |
CN104636273A (zh) * | 2015-02-28 | 2015-05-20 | 中国科学技术大学 | 一种带多级Cache的SIMD众核处理器上的稀疏矩阵存储方法 |
CN105224410A (zh) * | 2015-10-19 | 2016-01-06 | 成都卫士通信息产业股份有限公司 | 一种调度gpu进行批量运算的方法及装置 |
CN106095583A (zh) * | 2016-06-20 | 2016-11-09 | 国家海洋局第海洋研究所 | 基于新神威处理器的主从核协同计算编程框架 |
CN106775594A (zh) * | 2017-01-13 | 2017-05-31 | 中国科学院软件研究所 | 一种基于国产申威26010处理器的稀疏矩阵向量乘异构众核实现方法 |
CN107168683A (zh) * | 2017-05-05 | 2017-09-15 | 中国科学院软件研究所 | 国产申威26010众核cpu上gemm稠密矩阵乘高性能实现方法 |
CN107273094A (zh) * | 2017-05-18 | 2017-10-20 | 中国科学院软件研究所 | 一种适应于“神威·太湖之光”上hpcg优化的数据结构及其高效实现方法 |
Also Published As
Publication number | Publication date |
---|---|
CN108446253A (zh) | 2018-08-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108446253B (zh) | 一种针对神威体系架构的稀疏矩阵向量乘的并行计算方法 | |
US8400458B2 (en) | Method and system for blocking data on a GPU | |
CN106991011B (zh) | 基于cpu多线程与gpu多粒度并行及协同优化的方法 | |
US9606797B2 (en) | Compressing execution cycles for divergent execution in a single instruction multiple data (SIMD) processor | |
US8176265B2 (en) | Shared single-access memory with management of multiple parallel requests | |
KR20220054357A (ko) | 직렬 할당 데이터에 대해 pim(processing-in-memory) 연산을 수행하기 위한 방법, 및 관련 메모리 디바이스 및 시스템 | |
US20160124856A1 (en) | Memory unit for emulated shared memory architectures | |
JP2016534433A (ja) | エミュレートされた共有メモリアーキテクチャのための浮動小数点サポートパイプライン | |
Sato et al. | Co-design and system for the supercomputer “fugaku” | |
Chen et al. | The parallel algorithm implementation of matrix multiplication based on ESCA | |
CN110008436B (zh) | 基于数据流架构的快速傅里叶变换方法、系统和存储介质 | |
Ren et al. | Exploration of alternative GPU implementations of the pair-HMMs forward algorithm | |
Zhou et al. | Mat: Processing in-memory acceleration for long-sequence attention | |
US8539207B1 (en) | Lattice-based computations on a parallel processor | |
WO2019141160A1 (zh) | 一种数据处理的方法及装置 | |
US7594080B2 (en) | Temporary storage of memory line while waiting for cache eviction | |
Kogge et al. | [2010] facing the exascale energy wall | |
CN111522776B (zh) | 一种计算架构 | |
CN108009099B (zh) | 一种应用于K-Mean聚类算法中的加速方法及其装置 | |
Pei et al. | Reevaluating the overhead of data preparation for asymmetric multicore system on graphics processing | |
Jin et al. | Efficient utilization of memory hierarchy to enable the computation on bigger domains for stencil computation in CPU-GPU based systems | |
CN113313251B (zh) | 一种基于数据流架构的深度可分离卷积融合方法及系统 | |
Shen et al. | Memory partition for simd in streaming dataflow architectures | |
Chen et al. | A Hybrid CPU-GPU Multifrontal Optimizing Method in Sparse Cholesky Factorization | |
Rauf et al. | Parallel-Processing: A Comprehensive Overview of Modern Parallel Processing Architectures |
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 |