稀疏矩阵向量乘法介绍

稀疏矩阵向量乘法介绍
稀疏矩阵向量乘法(SpMV)是每个隐式稀疏线性代数求解器。从简单的 Krylov 算法到 multigrid 的算法性能方法在很大程度上取决于 SpMV 实现的速度。因为 SpMV 具有非常低的算术强度,定义为浮点操作数,则实现速度受内存带宽。最大化内存带宽的实现将实现卓越的性能与简单方法相比。或者,利用稀疏矩阵中固有的任何结构,从而最大限度地减少内存数量所需的访问,也将实现卓越的性能。将开发广义 SpMV 操作

 的 HIP 实现y=αAx+βy的几个标准 SpMV 实现,包括:

1)标量压缩稀疏行 (CSR)
2)向量 CSR
3)ELLPACK格式
4)阻止 ELLPACK
许多常见的 SpMV API,例如 rocSparse、 使用此通用接口。希望在实现和 ROCm 中提供的实现。在 SpMV 公式中,

 和

 是标量值,

 是大小为

 的稀疏矩阵,

 是密集的向量的大小为

 ,并且

 是大小为

  的密集向量。一个 key 矩阵的统计数据,每行的非零数

 。将工作分配给不同的 GPU 计算资源通常基于此度量。

首先,将回顾稀疏矩阵中广泛使用的 CSR 和 ELLPACK 格式。在描述完实现之后,将在 AMD MI250X 架构上比较相对性能,用于各种稀疏矩阵。转换算法从一种矩阵存储格式到另一种矩阵存储格式可能是一项昂贵的工作。代码示例将提供 CSR 和 ELLPACK。
1. 存储格式
对不同稀疏矩阵存储类型的回顾最好用一个简单的例子来说明。如图10-1所示,显示了一个有12个非零的5×5矩阵。这个稀疏矩阵的坐标(COO)格式由3个长度相同的数组组成,用于行、列和值。对行和列使用基于0的索引。数据按行主顺序排序,以便行0的所有数据都列在第一位。接下来是第1行、第2行…。
 
图10-1 稀疏矩阵存储格式
2. 压缩稀疏行(CSR)格式
用于存储稀疏矩阵的CSR格式,源于对上述行数据结构的简单压缩。只需计算每行中非零条目的数量。然后,行计数的累积和算法完成了计算。压缩的行数据结构(以下称为行偏移量)的大小为m+1。第一个值是0,其余值是累积和的结果。这种数据结构非常有用,因为通过相邻读取为每个稀疏矩阵行乘以密集向量(即稀疏点积)计算,提供了开始和结束索引。压缩稀疏行(CSR)格式,如图10-2所示。
 
图10-2 压缩稀疏行(CSR)格式
3. ELLPACK 格式
当每行非零个数的变化很小时,ELLPACK格式是SpMV的有效数据结构。与CSR相比,该格式将存储的顺序颠倒为列主,并使用零填充来实现数据结构的一致性。每行的条目数由所有行的最大值决定。任何非零数少于最大值的行,都有0个填充值和列索引的合理值。例如,可以在行中填充最后一个有效的列索引,以确保重新读取之前加载的索引和值对。
可以将此数据结构可视化为将数组中的所有值(和列索引)向左移动。
    稀疏矩阵ELLPACK格式,如图10-3所示。
 
图10-3 稀疏矩阵ELLPACK格式
通过以行块的形式形成ELLPACK数据结构,可以进一步优化ELLPACK格式。这最大限度地减少了零填充量,同时实现了数据的一致性。将此称为封锁ELLPACK。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/907445.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

推荐关注《AI芯片开发核心技术详解》(1)、《智能汽车传感器:原理设计应用》(2)、《TVM编译器原理与实践》(3)、《LLVM编译器原理与实践》(4)

4本书推荐《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》由清华大学出版社资深编辑赵佳霓老师策划编辑的新书《AI芯片开发核心技术详解》已经出版,京东、淘宝天猫、当当等网上,相应陆陆续续可以购买。该…

Ollama+OneAPI+Open WebUI 搭建本地大模型

✅Ollama 安装 ✅极简安装 curl -fsSL https://ollama.com/install.sh | sh✅Docker 安装 ❗前提是已安装NVIDIA Container Toolkit # 拉取镜像 docker pull ollama/ollama# 启动容器 docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/o…

洛谷 P1216 [IOI 1994] 数字三角形 Number Triangles (记忆化搜索)

记忆化搜索思路:经典的DP题,看题解大佬个个是状态转移方程...我就写个记忆化搜索吧,这个数据量,只dfs暴搜是过不去的,写完记忆化之后发现有个测试点T了,下载了一波测试点数据,发现全是0,那么初始化dp数组为-1就好了。AcCode: #include<bits/stdc++.h> using nam…

【软件】在Windows和Ubuntu上使用TFTP和NFS

在Windows和Ubuntu上使用TFTP和NFS 零、介绍 最近在玩Linux开发板,在开发的过程中发现需要用到tftp和nfs来帮助传输文件,故此记录如何使用这两种软件。 TFTP(Trivial File Transfer Protocol) :是一种简化的文件传输协议,设计用于在客户端和服务器之间快速传输文件。轻量…

FastAPI Pydantic动态调整Schema

title: FastAPI Pydantic动态调整Schema date: 2025/3/29 updated: 2025/3/29 author: cmdragon excerpt: Pydantic动态Schema支持运行时字段调整和环境变量控制,实现毫秒级配置生效。通过字段级动态注入和条件必填验证,灵活适应业务需求。多租户系统采用条件字段过滤实现数…

【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(4)

比赛链接 本文发布于博客园,会跟随补题进度实时更新,若您在其他平台阅读到此文,请前往博客园获取更好的阅读体验。 跳转链接:https://www.cnblogs.com/TianTianChaoFangDe/p/18799072 开题 + 补题情况 和前三场比起来前期的签到题发挥稳定了许多,没有被卡很久,不过 1001 …

详细介绍Mybatis的缓存机制

一、缓存机制 1、缓存概述 缓存:缓存就是一块内存空间,保存临时数据 作用:将数据源(数据库或者文件)中的数据读取出来存放到缓存中,再次获取时直接从缓存中获取,可以减少和数据库交互的次数,提升程序的性能 缓存适用: 适用于缓存的:经常查询但不经常修改的,数据的正…

JS梳理之es6异步async await 协程 迭代器

es6异步 promise 链式调用 是对回调炼狱的一种优化 这次梳理一下async await async function fetchData() {const response = await fetch(https://api.example.com/data);const data = await response.json();return data; }// async 声明这是一个异步函数 // await 会暂停函数…

百度云同步盘 登录失败【%d】【155010】

前言全局说明百度云同步盘在2016前后升级了一次,修改了接口,但是没有发布完整安装包,当时可以自动升级来解决,后来自动升级失效,就之能手动打补丁来解决了。详细解决过程:https://www.cnblogs.com/wutou/p/18799043一、说明 1.1 环境: Windows 11 家庭版 23H2 22631.3737二…

grpc实现Aop

创建项目服务端:微软官方自带的ASP.NET.Core.gRPC服务项目。 客户端:ASP.NET.Core.WebApi项目。 公共类库:主要为AOP自定义拦截器类。依赖包导入 客户端:Grpc.AspNetCore、Grpc.Core.Api、Grpc.Net.ClientFactory、Grpc.Tools。公共类库:Grpc.Core.Api公共类库项目配置 创…

Win 11 安装百度云同步盘

前言全局说明百度网盘最早出来叫“百度云管家”,可以上传下载东西,后来大概在2012年,百度云同步盘上线,后来将云管家和同步盘放到一起,叫百度云,也就是现在用的这个。下面介绍 如何在 Win11上用百度云同步盘一、说明 1.1 环境: Windows 11 家庭版 23H2 22631.3737二、下载…

C语言打卡学习第7天(2025.3.26)(补发)

![](https://img2024.cnblogs.com/blog/3622651/202503/3622651- 20250329002951976-79699626.jpg)1.换个网站把题简单做了几道 2,把积存的问题好好问了一下,明天“亡羊补牢”:冒泡排序、数组指针简单用法、之前网站的简单题 明天贪一点,起码把原来网站那些题啃了