CUDA学习(十四) cuSolver学习中的 compressed sparse row format matrix(行存储的压缩矩阵 CSR)

2023-11-16

http://www.netlib.org/utk/people/JackDongarra/etemplates/node373.html

主要参考这里面的内容

现有一个矩阵

\begin{displaymath}
A =
\left[\begin{array}{rrrrrr}
10 & 0 & 0 & 0 &-2 & 0 \\
...
... 9 & 9 & 13 \\
0 & 4 & 0 & 0 & 2 & -1
\end{array}\right] ~.
\end{displaymath}

观察该矩阵可以发现,该矩阵有很多0,压缩的方式就是去掉这些0元素,所用的方法就是将这个矩阵的存储换为3个数组进行存储

 

val 10 -2 3 9 3 7 8 7 3 $\cdots$ 9 13 4 2 -1    
col_ind 1 5 1 2 6 2 3 4 1 $\cdots$ 5 6 2 5 6    
  • val数组

val数组表示数值,val[k]=A[i][j],k为val中的位置,val保存的是A中不为0的元素,这样子val这个数组就定下来了,对应的k也定下来了

  • col_ind数组

上面val数组定下来以后有val[k]=A[i][j],对应的col_ind[k]=j,即第k个col_ind表示对应元素的列值,这样子col_ind这一组也定下来了

  • row_ptr数组
row_ptr 1 3 6 9 13 17 20

而row_ptr则是该行之前所有非零元素个数的和并加一,这样子就能定下来里面每个元素。那么如何运用压缩的三个数组恢复出那个矩阵

int index=0;
for(int i=1;i<rows;i++)
{
    for(int j=1;j<row_ptr[i];j++)
    {
        col=col_ind[index];
        a[i-1][col]=val[index];
        index++;
    }
}

而CSR和CSC的区别主要是ptr的选取不同,CSR选取是row_ptr,而CSC则选择col_ptr

 

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

CUDA学习(十四) cuSolver学习中的 compressed sparse row format matrix(行存储的压缩矩阵 CSR) 的相关文章

  • CUDA全局内存事务的成本

    根据 CUDA 5 0 编程指南 如果我同时使用 L1 和 L2 缓存 在 Fermi 或 Kepler 上 则所有全局内存操作都使用 128 字节内存事务完成 但是 如果我仅使用 L2 则使用 32 字节内存事务 第 F 4 2 章 让我
  • 如何在 Linux 中分析 PyCuda 代码?

    我有一个简单的 经过测试的 pycuda 应用程序 正在尝试对其进行分析 我尝试过 NVidia 的 Compute Visual Profiler 它运行该程序 11 次 然后发出以下错误 NV Warning Ignoring the
  • 指定 NVCC 用于编译主机代码的编译器

    运行 nvcc 时 它始终使用 Visual C 编译器 cl exe 我怎样才能让它使用GCC编译器 设置CC环境变量到gcc没有修复它 我在可执行文件帮助输出中也找不到任何选项 在 Windows 上 NVCC 仅支持 Visual C
  • 是否可以在设备函数中调用cufft库调用?

    我在主机代码中使用 cuFFT 库调用 它们工作正常 但我想从内核调用 cuFFT 库 早期版本的 CUDA 没有这种支持 但是有了动态并行性 这可能吗 如果有任何关于如何实现这一目标的示例 那就太好了 尽管在 Kepler cc 3 5
  • 如何在 CUDA 应用程序中构建数据以获得最佳速度

    我正在尝试编写一个简单的粒子系统 利用 CUDA 来更新粒子位置 现在 我定义的粒子有一个对象 该对象的位置由三个浮点值定义 速度也由三个浮点值定义 更新粒子时 我向速度的 Y 分量添加一个常量值以模拟重力 然后将速度添加到当前位置以得出新
  • cudaMemcpyToSymbol 与 cudaMemcpy [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我试图找出
  • 在新线程中调用支持 CUDA 的库

    我编写了一些代码并将其放入它自己的库中 该库使用 CUDA 在 GPU 上进行一些处理 我正在使用 Qt 构建 GUI 前端 作为加载 GUI 的一部分 我调用 CUresult res CUdevice dev CUcontext ctx
  • 寻找 CUDA 中的最大值

    我正在尝试在 CUDA 中编写代码来查找最大值 对于给定的一组数字 假设您有 20 个数字 并且内核在 2 个块 每块 5 个线程 上运行 现在假设 10 个线程同时比较前 10 个值 并且thread 2找到最大值 因此线程 2 正在更新
  • CUDA素数生成

    当数据大小增加超过 260k 时 我的 CUDA 程序停止工作 它不打印任何内容 有人能告诉我为什么会发生这种情况吗 这是我的第一个 CUDA 程序 如果我想要更大的素数 如何在 CUDA 上使用大于 long long int 的数据类型
  • 在linux上编译一个基本的OpenCV + Cuda程序

    我过去在linux上使用过opencv 但没有使用过cuda 几个月来我一直在与以下编译错误作斗争 在尝试了许多解决方案后 我放弃并使用 Windows 不过 我真的很想在 Linux 上工作 这是我用来编译 opencv gpu 网站上给
  • MPI+CUDA 与纯 MPI 相比有何优势?

    加速应用程序的常用方法是使用 MPI 或更高级别的库 例如在幕后使用 MPI 的 PETSc 并行化应用程序 然而 现在每个人似乎都对使用 CUDA 来并行化他们的应用程序或使用 MPI 和 CUDA 的混合来解决更雄心勃勃 更大的问题感兴
  • 运行时 API 应用程序中的 cuda 上下文创建和资源关联

    我想了解如何在 cuda 运行时 API 应用程序中创建 cuda 上下文并与内核关联 我知道这是由驱动程序 API 在幕后完成的 但我想了解一下创作的时间线 首先 我知道 cudaRegisterFatBinary 是第一个 cuda a
  • __syncthreads() 死锁

    如果只有部分线程执行 syncthreads 会导致死锁吗 我有一个这样的内核 global void Kernel int N int a if threadIdx x
  • 加速Cuda程序

    要更改哪一部分来加速此代码 代码到底在做什么 global void mat Matrix a Matrix b int tempData new int 2 tempData 0 threadIdx x tempData 1 blockI
  • 尝试构建我的 CUDA 程序时出现错误 MSB4062

    当我尝试构建我的第一个 GPU 程序时 出现以下错误 有什么建议可能会出什么问题吗 错误 1 错误 MSB4062 Nvda Build CudaTasks SanitizePaths 任务 无法从程序集 C Program 加载 文件 M
  • 使用 CUDA 进行逐元素向量乘法

    我已经在 CUDA 中构建了一个基本内核来执行逐元素两个复向量的向量 向量乘法 内核代码插入如下 multiplyElementwise 它工作正常 但由于我注意到其他看似简单的操作 如缩放向量 在 CUBLAS 或 CULA 等库中进行了
  • cudaSetDevice() 对 CUDA 设备的上下文堆栈有何作用?

    假设我有一个与设备关联的活动 CUDA 上下文i 我现在打电话cudaSetDevice i 会发生什么 Nothing 主上下文取代了堆栈顶部 主上下文被压入堆栈 事实上 这似乎是不一致的 我编写了这个程序 在具有单个设备的机器上运行 i
  • 有没有一种有效的方法来优化我的序列化代码?

    这个问题缺乏细节 因此 我决定创建另一个问题而不是编辑这个问题 新问题在这里 我可以并行化我的代码吗 还是不值得 https stackoverflow com questions 17937438 can i parallelize my
  • cuda中内核的并行执行

    可以说我有三个全局数组 它们已使用 cudaMemcpy 复制到 GPU 中 但 c 中的这些全局数组尚未使用 cudaHostAlloc 分配 以便分配页面锁定的内存 而不是简单的全局分配 int a 100 b 100 c 100 cu
  • 内联 PTX 汇编代码强大吗?

    我看到一些代码示例 人们在 C 代码中使用内联 PTX 汇编代码 CUDA工具包中的文档提到PTX很强大 为什么会这样呢 如果我们在 C 代码中使用这样的代码 我们会得到什么好处 内联 PTX 使您可以访问未通过 CUDA 内在函数公开的指

随机推荐

  • 实践练习五(可选):对 OceanBase 做性能测试

    第六期直播实践练习 可选 对一个OB集群 带 OBProxy 进行Benchamrk测试 环境准备 由于手上正好有7台物理机 在作业三中会使用OBD直接部署了2 2 2架构的OceanBase集群 这里直接拿来进行TPC C测试 机器信息如
  • Kettle——表输出步骤异常处理方式探究

    开源ETL工具Kettle transformation中的多数步骤都是支持定义错误处理的 为了保证transformation脚本的健壮性 我们会在关键的步骤上进行异常捕获处理 本篇文章以TableOutput步骤来探究kettle异常处
  • QT-信号与槽机制学习笔记

    QT 信号与槽机制学习笔记 一 标准信号和槽 二 自定义信号与槽 2 1 信号与槽的案例 无参数 2 2 有参数的信号与槽案例 三 信号和槽的扩展 四 Qt4的信号和槽函数 五 QDebug的输出转义问题 六 lambda表达式 6 1 简
  • 常见面试题--memcpy()和strcpy()的区别

    前言 memcpy 和strcpy 的区别是常见的面试题 以前面试的时候被问起过 觉得当时回答的不是很好 这里做一下总结 方便自己和有需要的人查看 这个问题主要考查基本能力 这两个都是常见的拷贝函数 C语言程序员都经常会用到 用法都清楚 但
  • Jmeter 配置使用(一)

    Jmeter 简介 Jmeter 下载安装 测试实施 创建线程组 添加Http请求 查看结果树 聚合报告 添加断言
  • 为eclipse添加tomcat插件(eclipse tomcat plugin)

    打开站点 http marketplace eclipse org content eclipse tomcat plugin 把Install拖到打开的eclipse的工作区中 即可下载安装 安装后eclipse将重启 重新打开后可见工具
  • 【转】一篇文章读懂大数据中台架构

    一篇文章读懂大数据中台架构
  • mysql5.7驱动配置

    环境 mysql5 7 url后面需要加上useUnicode true characterEncoding utf8 serverTimezone UTC这几个参数 否则会报错 datasource driver class name c
  • 清风数学建模学习笔记——TOPSIS法(优劣解距离法)

    优劣解距离法 TOPSIS法 Technique for Order Preference by Similarity to Ideal Solution 可翻译为逼近理想解排序法 国内常简称为优劣解距离法 TOPSIS 法是一种常用的 综
  • 银联支付 前端 接收后端数据 写入页面

    如果能够帮到您 烦请给个赞或者评论 不甚感谢 点击确认支付 跳转银联页面 后台传入html 给我 我需要将html append html 放在html 里 html html html html data data union pay h
  • 使用多个路由器有线桥接实现无线漫游

    虽然 WDS 是平价的无线漫游实现最优先考虑的方案 但 WDS 几个路由之间的通信还是无线 无线没有有线稳定这是不争的事实 使用有线桥接来实现无线漫游 各个路由之间的通信通过有线 相对来说理论上要稳定些 示例 三个路由器 一主二从 两个也行
  • libcurl快速入门

    libcurl是一个跨平台的网络协议库 支持http https ftp gopher telnet dict file 和ldap 协议 gt libcurl同样支持HTTPS证书授权 HTTP POST HTTP PUT FTP 上传
  • 工厂模式与构造函数模式的区别

    目录 一 工厂模式 二 构造函数模式 一 工厂模式 1 工厂模式其实就是普通函数 2 可以解决创建多个类似对象的问题 3 没有解决对象标识问题 即新创建的对象是什么类型 工厂模式 function createPerson name age
  • AIX系统升级记录

    从6100 01 01 0823升级到6100 05 00 1016 一 下载补丁 下载地址 http www 912 ibm com eserver support fixes Product Group gt System p Prod
  • 测试内存超频软件,内存超频工具(SPDtool)

    都知道CPU可以超频 这一点儿也不稀奇 不过 今天小编带给大家的这款spdtool可是传说中的内存超频软件 震惊了吧 现在的游戏画面越来越精致 场景也越来越大 所以 对内存的要求也更高了 这款内存超频工具也就应运而生了 本软件利用修改spd
  • Leaflet基础入门教程(一)

    leaflet是一个前端的轻量的gis框架 为什么说它轻量呢 因为相比于传统的 庞大的 GIS框架比如openlayers和mapbox leaflet不仅代码体积小 而且API构成也极为简单 是GIS行业小白入门级别学习的最好的框架 没有
  • 【AI面试】Anchor based 、 Anchor free 和 no anchor 的辨析

    深度学习的目标检测算法 通常会在输入图像中采样大量的区域 然后判断这些区域中是否包含我们感兴趣的目标 并调整 回归 区域边界 从而更准确地预测目标的真实边界框 ground truth bounding box 目标检测算法会需要做两个事情
  • Maven deploy plugin使用

    Maven deploy plugin使用 简介 maven deploy plugin主要是为了用来将artifact部署到远程仓库中 Goals Goal Description deploy deploy 部署artifact到远程仓
  • 自然语言处理(NLP)精选13道面试题

    文末彩蛋 七月在线干货组最新升级的 名企AI面试100题 免费送 1 为什么BERT在第一句前会加一个 CLS 标志 BERT在第一句前会加一个 CLS 标志 最后一层该位对应向量可以作为整句话的语义表示 从而用于下游的分类任务等 为什么选
  • CUDA学习(十四) cuSolver学习中的 compressed sparse row format matrix(行存储的压缩矩阵 CSR)

    http www netlib org utk people JackDongarra etemplates node373 html 主要参考这里面的内容 现有一个矩阵 观察该矩阵可以发现 该矩阵有很多0 压缩的方式就是去掉这些0元素 所