文章目录

  • 稀疏矩阵向量乘法
    • CRS数据结构
    • 稀疏矩阵向量乘
      • Test bench 测试用例
    • 优化

稀疏矩阵向量乘法

CRS数据结构

b即为a的CRS表示,值(values)数组保存矩阵中非零元素的值。列索引(columnIndex)数组和行指针(rowPtr)数组对非零元素的位置信息进行编码。(我看了一下rowPtr意思是在第几个元素处换行是吧)
对稀疏性没有要求。

稀疏矩阵向量乘

#include "spmv.h"
void spmv(int rowPtr[NUM_ROWS+1], int columnIndex[NNZ],DTYPE values[NNZ], DTYPE y[SIZE], DTYPE x[SIZE]){L1: for (int i = 0; i < NUM_ROWS; i++) {DTYPE y0 = 0;L2: for (int k = rowPtr[i]; k < rowPtr[i+1]; k++) {#pragma HLS unroll factor=8#pragma HLS pipeliney0 += values[k] * x[columnIndex[k]];}y[i] = y0;}
}

其头文件为

#ifndef __SPMV_H__
#define __SPMV_H__
const static int SIZE = 4; // SIZE of square matrix
const static int NNZ = 9; //Number of non-zero elements
const static int NUM_ROWS = 4;// SIZE;
typedef float DTYPE;
void spmv(int rowPtr[NUM_ROWS+1], int columnIndex[NNZ],DTYPE values[NNZ], DTYPE y[SIZE], DTYPE x[SIZE]);
#endif // __MATRIXMUL_H__ not defined

函数spmv函数有5个参数,分别是rowPtr、columnIndex ,以及 values 对应矩阵 M 的 CRS 格式中包含的3个参数。参数 y 用于保存输出的结果,参数x表示输入的被乘向量x。变量NUM_ROWS表示矩阵M中行号。变量NNZ表示矩阵中非0元素的个数。最后,变量SIZE表示数组x和数组y中元素的个数。

外层for循环标签为L1,对矩阵的行进行遍历。将矩阵当前的行与向量x相乘,得到输出的结果y。内层循环标签为L2,实现对矩阵M中每列元素的遍历。L2循环迭代计算rowPtr[i + 1] − rowPtr[i]计算每一行非0元素的个数。每次循环计算,能从value数组中读取矩阵M的非0元素然后对应的从x数组中取得被乘向量x的值,对应相乘。cloumnIndex[k] 中的值保存了对应的列号k。

Test bench 测试用例

#include "spmv.h"
#include <stdio.h>
void matrixvector(DTYPE A[SIZE][SIZE], DTYPE *y, DTYPE *x)
{for (int i = 0; i < SIZE; i++) {DTYPE y0 = 0;for (int j = 0; j < SIZE; j++)y0 += A[i][j] * x[j];y[i] = y0;}
}int main(){int fail = 0;DTYPE M[SIZE][SIZE] = {{3,4,0,0},{0,5,9,0},{2,0,3,1},{0,4,0,6}};DTYPE x[SIZE] = {1,2,3,4};DTYPE y_sw[SIZE];DTYPE values[] = {3,4,5,9,2,3,1,4,6};int columnIndex[] = {0,1,1,2,0,2,3,1,3};int rowPtr[] = {0,2,4,7,9};DTYPE y[SIZE];spmv(rowPtr, columnIndex, values, y, x);matrixvector(M, y_sw, x);for(int i = 0; i < SIZE; i++)if(y_sw[i] != y[i])fail = 1;if(fail == 1)printf("FAILED\n");elseprintf("PASS\n");return fail;
}

连同之前的源文件头文件一同创建工程

优化

稀疏矩阵向量乘法可优化的方式


广告时间
FPGA入门
FPGA实战训练精粹
Xilinx FPGA权威设计指南:基于Vivado 2018集成开发环境
Xilinx Zynq7020
FPGA设计技巧与案例开发详解(第2版)

HLS 开发学习(五) 稀疏矩阵向量乘法相关推荐

  1. HLS 3 FPGA并行化 稀疏矩阵向量乘法(计算机视觉)

    CRS 作为一种数据结构,由3个数组组成.值(values)数组保存矩阵中非零元素的值.列索引(columnIndex)数组和行指针(rowPtr)数组对非零元素的位置信息进行编码.列索引存储每个元素 ...

  2. Windows驱动开发学习笔记(五)—— SSDT HOOK

    Windows驱动开发学习笔记(五)-- SSDT HOOK 系统服务表 系统服务描述符表 实验一:通过代码获取SSDT表地址 通过页表基址修改页属性 方法1:修改页属性 方法2:修改CR0寄存器 实 ...

  3. android开发学习之路——连连看之游戏逻辑(五)

    GameService组件则是整个游戏逻辑实现的核心,而且GameService是一个可以复用的业务逻辑类. (一)定义GameService组件接口 根据前面程序对GameService组件的依赖, ...

  4. GTK+图形化应用程序开发学习笔记(五)—组装盒、组合表、固定容器构件

    GTK+图形化应用程序开发学习笔记(五)-组装盒.组合表.固定容器构件 一.组装盒 组装盒(GtkBox)也称为组合构件.使用组装盒可以将多个构件放在一个容器中.容器可以把组装盒看作是一个构件.不像按 ...

  5. windows内核开发学习笔记十五:IRP结构

    windows内核开发学习笔记十五:IRP结构   IRP(I/O Request Package)在windows内核中,有一种系统组件--IRP,即输入输出请求包.当上层应用程序需要访问底层输入输 ...

  6. Kinect开发学习笔记之(五)不带游戏者ID的深度数据的提取

    Kinect开发学习笔记之(五)不带游戏者ID的深度数据的提取 zouxy09@qq.com http://blog.csdn.net/zouxy09 我的Kinect开发平台是: Win7 x86 ...

  7. 安卓开发学习日记第五天——奇怪的bug出现了(VT-x说没就没)_莫韵乐的欢乐日记

    安卓开发学习日记第五天--奇怪的bug出现了(VT-x说没就没) 前情提要: 安卓开发学习日记第一天_Android Studio3.6安装 安卓开发学习日记第二天_破坏陷阱卡之sync的坑 安卓开发 ...

  8. Polyworks脚本开发学习笔记(十五)-用Python连接Polyworks的COM组件

    Polyworks脚本开发学习笔记(十五)-用Python连接Polyworks的COM组件 用Polyworks脚本开发,没有高级语言的支持,功能难免单一,一些比较复杂的交互实现不了,界面和报告也很 ...

  9. Polyworks脚本开发学习笔记(五)-变量使用基本语法

    Polyworks脚本开发学习笔记(五)-变量使用基本语法 定义变量及赋值 定义各种类型的变量 定义变量时,只需要使用DECLARE 关键字即可定义,为了区别变量和脚本中的其它字符,建议都以小写v开头 ...

最新文章

  1. LeetCode Battleships in a Board
  2. Linux+db2+was部署问题总结
  3. ddr传输 pl ps_Vitis ZYNQ开发秘籍 PS 端任意控制 VGA 显示画面最终实现
  4. 2019中山大学程序设计竞赛
  5. ubuntu17.04之apt-get源
  6. DROP TABLE ** CASCADE CONSTRAINTS PURGE删除表的时候级联删除从表外键
  7. HADOOP综合应用架构之一 配置Secondarynamenode在另一台机器运行
  8. MSSQL自增字段默认值
  9. 前端 获取当前页面服务器ip_fiddler获取响应时间以及服务器IP
  10. #pragma warning(disable 4786)
  11. python音乐库_目前在python3下有哪些音乐处理库?
  12. GAMMA初学笔记二
  13. 中国六大最忙和六大最懒城市
  14. 心灵鸡汤1------让人奋进的五句话
  15. MIPAV - Talairach ACPC transform
  16. 全球与中国糖粉市场深度研究分析报告
  17. 2015年中国视频监控市场发展特点及未来展望
  18. C++语言书写一个程序oct2dec,输入为整数的八进制,输出为其十进制。以下是程序的结果
  19. 微信订阅号,先运营,再技术
  20. 前端性能分析—前端优化

热门文章

  1. Excel制作资产负债表
  2. h5难做吗_这样的h5制作难吗,通过什么平台可以做出来?
  3. learning java AWT Pannel
  4. python爬app西瓜视频_Python爬虫工程师面试题,采集头条西瓜视频
  5. android微信运动页面开发,微信小程序仿微信运动步数排行(交互)
  6. MyBatis-Plus的使用
  7. uniapp做自己的启动页
  8. 史上好电影集合--百度云
  9. android通知的内容图标都不显示,android状态栏通知Notification如何设置为下拉不显示通知内容和图标...
  10. 【机器学习】逻辑回归案例一:保险与年龄之间关系分析