《Bandwidth Reduced Parallel SpMV on the SW26010 Many-Core Platform》读后笔记

2023-05-16

核心思路:1)通过轻工作量的预处理阶段,把矩阵A纵向从上到下分割成一个个的row-slice,划分后每个row-slice中的非零元个数大致相同。每个row-slice由一个CPE单独计算。

2)计算一个row-slice时,读取相应的x时使用动态前向规划技术避免取到无用的x,降低了带宽。

3)对CPE进行划分,同组CPE可以共享所需要的x,可进一步降低带宽。

4)设计了parameter auto-tuning框架(我理解就是测试套件),使得算法更适用于不同的矩阵。

5)运行时采用atomic-operation based work-sharing pool确保负载平衡,这项主要配合1)

下面是详细说明:

1)预处理阶段

MPE确定每个row-slice最多包含多少行、最多有多少个非零元后,对矩阵A进行一次遍历,遍历后的划分出的每个row-slice包含非零元个数大致相同。另外,row-slice中同一行的元素也是分批读取的。

2)如何避免取到无用的x

如上图,很显然x中有两部分是不需要取到内存中的,如何发现这两部分呢?计算的过程中,x是分段被读取到LDM的,只要取x时跳过无用的部分即可。计算时,当前分段非零元列坐标中的最大值jl是可以得到的,那么下一个无用x子区间的起始点就是jl + 1。设置向量row_process,其第i个元素记录当前row-slice中第i行下一个要使用的非零元的列坐标,记为ju。这样一来,一个无用x区间[jl + 1,ju - 1]就确定下来。下次取x的时候,跳过这个区间即可。

3)为共享所需的x,对CPE的划分方式

为了充分利用CG中同一行CPE可以快速交换数据这一特性,CPE进行分组以小组为单位来获取一组CPE都需要的数据。这主要分成2个阶段:DMA阶段和broadcast阶段。以下图为例,4个CPE一组,被取x的分段记为seg,把seg分成4部分,seg-0到seg-3.在DMA阶段,每个CPE都以DMA的方式从主存读取对应小分段。在broadcast阶段,同组CPE按顺序把自己的数据广播给其他CPE,这样就避免了同组CPE的冗余访存,从而降低了同组CPE读取相同数据的带宽。

需要说明的是,同组CPE需要在预处理阶段先算得需要x的下标范围。这里说的下标范围应该是每次进入内存的总区间,仅仅是下标范围,并没有去掉无用的x部分。原文是这样说的:.The union of all the indices of the required x segments by a row-slice set can also be assembled in the preprocess phase, so that the x segments can be collectively accessed by the peers in a group。总觉得这个和3)有些矛盾。.

4)parameter auto-tuning技术

多次实验之后取得最佳参数配置。需要确定的参数有:预处理阶段单个row_slice最多包含行数或非零元个数、计算时同行元素的分割区间大小。同时测试时还会检查参数合法性。

5)atomic-operation based work-sharing pool技术

预处理阶段结束后,所有row_slice形成一个任务队列,设置全局变量row-slice counter做计数器。同组CPE从任务队列取任务时,要使用原子操作对计数器自增,确保每个row-slice只计算一次。

 

补充:这篇文献没有伪代码,看完以后觉得计算过程不是很清晰。主要问题是对x的读取过程不是很清楚。如果采用了dynamic look-ahead技术的话,肯定是边计算边读取相应x的。但是后面又说要对CPE进行分组,分组后以组为单位读取x再分配,重新提到了预处理阶段,没有说到底在哪一步读取x进LDM。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

《Bandwidth Reduced Parallel SpMV on the SW26010 Many-Core Platform》读后笔记 的相关文章

随机推荐

  • 手把手教你写出正确的二分搜索!

    写出正确的二分搜索知易行难 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
  • 《Bandwidth Reduced Parallel SpMV on the SW26010 Many-Core Platform》读后笔记

    核心思路 xff1a 1 xff09 通过轻工作量的预处理阶段 xff0c 把矩阵A纵向从上到下分割成一个个的row slice xff0c 划分后每个row slice中的非零元个数大致相同 每个row slice由一个CPE单独计算 2