记待解问题为y = Ax,采用了CSR格式存储矩阵。
核心思路:多级数据并行。具体分为两方面,待计算数据的划分和计算核的划分。下面分3部分进行说明
1)对稀疏矩阵进行三级数据划分,如右图所示。设矩阵规模为M×N,则第一级数据划分是把矩阵纵向从上到下分割成规模为θ×N的块,共有M/θ个(原文此图最后一个块的下标错误)。第二级数据划分是把一个block横向从左到右划分为规模为θ×δ的Tile,共有N/δ个。第三级划分是把一个Tile划分为规模为ω×δ的slice,共有θ/ω个。
具体参数设置见补充说明。
2)对处理器进行二级划分,如右图所示。神威CPU上共有4个核组(CG),每个核组上有一个控制核MPE、一个内存控制器MC和64个计算核CPE。这64个CPE分布在8×8的网络上。
对处理器的二级划分是对64个CPE的划分。第一级划分是把64个CPE纵向从上到下划分成8个fleet,每个fleet包括8个CPE,由于CG的架构特点,同一个fleet间核心的数据传输是非常快速的。第二级划分是把每个fleet中的8个CPE划分成7个计算核和一个I/O核,即前7个核和最后一个核的分工不同,分别负责计算和I/O。
3)数据到CPE的分配,如右图所示。数据与处理器的对应关系是一个block分配到一个fleet上,block分割出的多个Tile再分配到不同的计算核上,Tile分割出的多个slice以串行循环的方式在同一个计算核上运行。
由于每个核LDM有限,一个Tile分割出的多个slice不会被同时调入到LDM中,而是会分批以batch为单位调入LDM中。故slice调入LDM是和计算同时进行的,CPE在计算batch n时,就可以访问主存取得batch n+1。
4)整体计算过程。在进行计算之前,CPE计算当前Tile需要的x中相应元素就已经被加载到LDM中了。计算时,一个fleet负责一个block的计算,也就是矩阵中的多行。当一个block计算完毕时,结果向量y中的对应元素计算完成。一个block横向分割后产生的Tile由单个的计算核负责,当一个Tile计算完毕后,会以行间消息传递的形式将结果传输到本Fleet的I/O核上,I/O核将这些结果相加便得到相应的y中元素,当所有计算核都完成任务时,一个block计算完毕,此时I/O核把y写入主存,再从block队列中读取新的block开始计算。
sum
数据访存方式总结:y = Ax。对于一个计算CPE来说,对应的Tile以batch为单位用“边计算、边访存”的方式进入LDM。x在计算之前被调入LDM,算得的y通过行内通讯的方式传输给相应的I/O核。I/O核待同行fleet都计算完成之后将缓存下来的中间结果写入主存。
优点总结:多级数据划分有利于多核负载均衡。同行的CPE分工不同(计算和I/O)使得访存总次数降低。合理运用行内数据传输提高了数据传输速度。、
补充说明,划分参数θ、δ、ω的确定:θ根据I/O核可以缓存的y中元素个数来确定, LDM是64KB,一个yi是8B,所以是存64KB/8B = 8092个数。δ通过实验发现对性能影响不大,根据实验结果确定为256。ω根据行内数据传输的数据量大小来确定,由于行内数据传输大小为32B,抛去额外信息以后只能携带24B/8B = 3 个double,所以slice定为3。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)