OpenMP 版本稀疏矩阵向量乘 您所在的位置:网站首页 稀疏矩阵优化算法 OpenMP 版本稀疏矩阵向量乘

OpenMP 版本稀疏矩阵向量乘

2024-02-16 20:05| 来源: 网络整理| 查看: 265

说明:

1.转载请联系本人

2.代码在最后 问题描述

稀疏矩阵向量乘法(Sparse Matrix-Vector Multiplication, SpMV)在许多科学计算程序中都有广泛的应用。 如下所示,数据矩阵A是稀疏的,输入向量x和输出向量y是稠密的。

y = Ax

要求 根据内存大小测不同规模和不同稀疏程度的稀疏矩阵的处理速度(GFLOPS/s)和带宽(GB/s),并给出计算公式。请计算系统的理论峰值,如果没有达到理论峰值,尝试给出原因。 思路和方法

老师在/hw2目录下提供的代码已经能够达到比较好的存储访问了,所以在这个基础上添加OpenMP代码以及尝试其他的优化,如循环优化即可。

实验 结果及分析

不同规模和不同稀疏程度矩阵处理速度公式:假设稀疏矩阵中不为0的个数为k 处理速度公式 = 2*k/1000000000/time 带宽计算公式 = (sizeof(int)*dim + sizeof(int)*k + sizeof(float)*k + sizeof(float)*dim*2)/1000000000/time

系统理论峰值(即浮点数理论峰值)集群理论浮点峰值 = CPU主频(GHz)× CPU每时钟周期执行浮点运算次数 × 节点数 × 8(每节点双路四核)=4.2*4*8=134.4GFLOPS/s

峰值带宽: B=F×D/8=2133MHz*64bit/8=17.064GHz 没有达到理论峰值的原因是,程序并不只是在做浮点数运算或只是在访问内存,以及操作系统的线程调度,和服务器本身的不稳定性等等...

1.尝试parallel shared/private以及dynamic

问题1: 发现在initMatrix里面加omp效果不佳. 解决: 可能会因为并行访问同一数值,导致访问错误和数组越界等问题有关

问题2: 发现使用shared/private之后速度较慢,GFLOPS较低 解决: 与privaet是否使用无关,主要是这样会导致并行区域开多,速度会下降

2.尝试parallel guided 和减少for循环依赖 代码如下

for(int i=1; i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有