矩阵与向量乘法的CUDA优化

矩阵与向量乘法的CUDA优化

ID:40704616

大小:1.37 MB

页数:29页

时间:2019-08-06

矩阵与向量乘法的CUDA优化_第1页
矩阵与向量乘法的CUDA优化_第2页
矩阵与向量乘法的CUDA优化_第3页
矩阵与向量乘法的CUDA优化_第4页
矩阵与向量乘法的CUDA优化_第5页
资源描述:

《矩阵与向量乘法的CUDA优化》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、矩阵与向量乘法的CUDA优化风辰2010年12月11日2011年1月8日修订1目的对于CUDA程序开发来说,优化往往是整个开发过程的核心,不同算法,不同存储器组织的程序性能往往差几十倍,本文通过一个简单的例子来展示CUDA开发中一些重要的因素对性能的影响。2假设读者拥有以下知识拥有C语言编程的经验,最好拥有并行编程经验懂得CUDA,最好用CUDA写过代码3测试环境Intelxeon54052.0GHzGeforceGTX295(只使用单核)Gcc4.3.3CUDAtoolkit3.1只测试计算时间,不包括数据传输4符号说明matrix:矩阵数据指针,以行为主序或者列为主序存储v

2、

3、vec:向

4、量指针r:矩阵和向量乘的结果指针rowSize:表示矩阵的行数,也是r的长度columnSize:表示矩阵的列数,也是v的长度所有指向显存的指针加前缀d_5编译配置矩阵尺寸8192*8192 单精度编译选项-O3–funroll-loops–msseCPU计时函数采用gettimeofday,clock,GPU计时函数采用CUDAevent6串行C版本算法:遍历矩阵行,每行和向量相乘,最终结果为一向量voidmxv(constintrowSize,constintcolumnSize,constfloat*matrix,constfloat*v,float*r){for(inti=0;i

5、owSize;i++){floatre=0.0f;for(intj=0;j

6、owSize;i++){__m128re=_mm_set_ps(0.0f,0.0f,0.0f,0.0f);for(intj=0;j

7、columnSize,float*matrix,float*vec,float*r){__m128*mv=(__m128*)v;__m128*mm=(__m128*)matrix;#pragmaompparallelfornum_threads(2)for(inti=0;i

8、aligned(16)))a[4];_mm_store_ps(a,re);r[i]=a[0]+a[1]+a[2]+a[3];}运行时间50ms9CUDA优化注意事项一、选择好的并行方式选择好的算法,以发掘更多的数据并行性二、保持SM忙碌尽量利用所有的SM参与计算,可以通过加大数据量或减小线程块大小达到目的三、优化存储器利用保证全局存储器合并访问使用速度更快的constant或shared存储器10CUDA-naïve版本算法:每个CUDA线程计算矩阵的一行与向量乘积staticvoid__global__mxvNaive(introwSize,intcolumnSize,intcolumnP

9、itch,constfloat*d_matrix,constfloat*d_vec,float*d_r){uintid=blockDim.x*blockIdx.x+threadIdx.x;if(rowSize<=id)return;floattemp=0.0f;#pragmaunroll4for(inti=0;i

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。