《Towards Efficient SpMV on Sunway Many-core Architectures 》读后笔记

2023-05-16

记待解问题为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(使用前将#替换为@)

《Towards Efficient SpMV on Sunway Many-core Architectures 》读后笔记 的相关文章

随机推荐

  • 整理库函数依赖关系

    问题 xff1a 现有一函数库 xff0c 这里是lapack3 5 lapack提供的每一个函数API都单独是一个 c 请给出这些API的相互调用关系 间接调用也要统计 xff0c 循环调用 xff08 如果可能的话 xff09 不计 进
  • 手把手教你写出正确的二分搜索!

    写出正确的二分搜索知易行难 xff0c 原理好像都懂 xff0c 但是实际上手就出各种错误 xff0c 例如如何确定循环终止条件 区间搜小判断条件等 这里就手把手教你写出正确的二分检索 xff01 二分法共有下面7种变式 是否存在数字t 返
  • SphereFace: Deep Hypersphere Embedding for Face Recognition

    Weiyang Liu 1 Yandong Wen 2 Zhiding Yu 2 Ming Li 3 Bhiksha Raj 2 Le Song 1 1 Georgia Institute of Technology 2 Carnegie
  • 一文解答你关于“轨道问题”的所有疑问!(有环链表问题)

    问题描述 xff1a 给定一个链表 xff0c 返回链表开始入环的第一个节点 如果链表无环 xff0c 则返回 NULL 我看过很多博客 xff0c 对于最优解法的解释无非两个字 xff0c 神奇 xff0c 并没有说明如何构思出这样的思路
  • 从bt到dp的困惑

    每一个dp的背后都必然有一个bt bt的基础上加上记忆化搜索 xff0c 然后对问题的拆分由从上到下变成从下到上 xff0c 即可转化为dp 但绝不是所有的bt就天然的可以转化为dp 例如下面这个例子 leetCode 115题 xff0c
  • 教练,我想学二叉树遍历!

    二叉树具有前序 中序 后序三种遍历方式 递归的相信大家都会写 xff0c 但是迭代的该怎么写呢 xff1f 怎样的迭代写法才能具有统一性便于理解呢 xff1f 请看下面具体的做法 xff0c 每种遍历方式各有2种策略 xff0c 基于栈的和
  • TVM优化原理学习

    没有看论文 xff0c 看了b站陈天奇的视频 xff0c 还有一些博客的分析 xff0c 学习了优化原理 后续需要深入理解再看论文 TVM对于神经网络的优化主要有两部分 xff0c 计算图优化和算子优化 xff0c 下面分开说明 计算图优化
  • 一个GDB调试的workflow

    我们要调试的程序是 include lt stdio h gt int main int p 61 NULL printf 34 p n 34 p p 61 3 printf 34 d n 34 p return 0 可以看到第6行会访问非
  • 记录一个很奇怪的bug,待解决

    一个很简单的矩阵求幂模板类的程序 xff0c 但是在vector lt vector lt T gt gt temp n vector lt T gt n 这一句不能执行 xff0c 会卡死 下面是完整的代码和输出 方阵的幂运算 xff0c
  • 听说还有人不懂右值和std::move()?

    1 左值和右值 左值是可以出现在等号左边的符号 xff0c 当然它也可以出现在等号右边 xff0c 例如int a等等 右值是能且只能出现在等号右边的符号 xff0c 例如5 xff0c abc 等等 右值细分为将亡值和纯右值 xff0c
  • 一个leetcode题目的bug记录【待解决】

    1403题目 xff0c 非递增顺序的最小子序列 题目很简单 xff0c 利用贪心的策略 xff0c 对数组从大到小排序 xff0c 然后尽量从前面取最小的满足题目要求的子数组即可 我的bug出在对数组从大到小排序这里 xff0c 报错代码
  • 字符串匹配KMP算法学习笔记

    字符串匹配 xff0c leetcode28题 时间复杂度O MN 的算法大家都会 xff0c 题解里面官方账号给出的利用字符串哈希判等的O N 算法也很优秀 本篇的重点是KMP算法 网上能搜到的KMP算法例子非常多 xff0c 其原理可以
  • 对std::set使用lower_bound的效率问题

    1488题 xff0c 洪水泛滥 在查找可用晴天时 xff0c 如果使用 auto last sunny it 61 sunny lower bound last rain 就会超时 而如果使用auto last sunny it 61 l
  • 升级CentOS 7.4内核版本的三种方案

    在实验环境下 xff0c 已安装了最新的CentOS 7 4操作系统 xff0c 现在需要升级内核版本 实验环境 CentOS 7 x86 64 Minimal 1708 iso CentOS Linux release 7 4 1708
  • 一些题解的思考集合。

    我觉得比较好 xff0c 比较关键 xff0c 比较难想到的思考点 xff0c 还有一些小疑惑 xff0c 统一记录在此 378题 xff0c 为什么返回的left一定是矩阵中的元素 xff0c 个人思考 75题 xff0c three w
  • 引用类型推导规则,完美转发

    类型推导规则 规则1 xff08 引用折叠规则 xff09 xff1a 如果间接的创建一个引用的引用 xff0c 则这些引用就会 折叠 在所有情况下 xff08 除了一个例外 xff09 xff0c 引用折叠成一个普通的左值引用类型 一种特
  • WIN10+MX150+VS2013安装CUDA9.2

    记录一下在自己PC上安装cuda的过程 OS是win10 xff0c IDE为VS2013 xff0c 显卡为GeForce MX150 xff08 驱动版本24 21 13 9882 xff09 1 首先确认自己系统的显卡可用 打开设备管
  • 《A synchronization-free algorithm for parallel sparse triangular solves》读后总结

    正式读研之后看的第一篇文献 本着 只有记录下来的才是自己的 这一原则 xff0c 记录一下 论文提出的方法用来解决多元一次方程组中系数矩阵为下三角的情况 Lx 61 b中 xff0c L为下三角矩阵 如上图所示 xff0c 对应的方程组如下
  • 用了这些工具,让你的win10生产力爆表

    1 Listary 超级好用的的windows搜索工具 xff0c 搜索速度快 xff0c 并且具有体积小 xff0c 免费 解压即用等优点的绿色软件 xff0c 官网下载安装包即可 使用这个软件之后 xff0c 你再也不会点开我的电脑 x
  • 《Towards Efficient SpMV on Sunway Many-core Architectures 》读后笔记

    记待解问题为y 61 Ax xff0c 采用了CSR格式存储矩阵 核心思路 xff1a 多级数据并行 具体分为两方面 xff0c 待计算数据的划分和计算核的划分 下面分3部分进行说明 1 xff09 对稀疏矩阵进行三级数据划分 xff0c