爨爨爨好

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

随笔分类 -  CUDA

摘要:0. APOD过程 ● 评估。分析代码运行时间的组成,对瓶颈进行并行化设计。了解需求和约束条件,确定应用程序的加速性能改善的上限。 ● 并行化。根据原来的代码,采用一些手段进行并行化,例如使用现有库,或加入一些预处理指令等。同时需要代码重构来暴露它们固有的并行性。 ● 优化。并行化完成后,需要通过优 阅读全文
posted @ 2017-11-05 22:41 爨爨爨好 阅读(1530) 评论(0) 推荐(0)

摘要:关于cuBLAS库中矩阵乘法相关的函数及其输入输出进行详细讨论。 ▶ 涨姿势: ● cuBLAS中能用于运算矩阵乘法的函数有4个,分别是 cublasSgemm(单精度实数)、cublasDgemm(双精度实数)、cublasCgemm(单精度复数)、cublasZgemm(双精度复数),它们的定义 阅读全文
posted @ 2017-10-31 22:33 爨爨爨好 阅读(14722) 评论(2) 推荐(7)

摘要:三种不同的方法计算前缀和,并与CPU的结果进行了对比。 ▶ 结果如下图。第一种方法存在不可重现的bug,且仅当输入数组规模大于512时开始出现,原因未知。其他几种方法计算结果均正确,再计算较短的响亮的时候第三种方法(改良的收集 - 分发树法)效率最高,当向量长度远大于自己设定的阈值1024(单个线程 阅读全文
posted @ 2017-10-15 01:53 爨爨爨好 阅读(333) 评论(0) 推荐(0)

摘要:展示了三种不同的GPU一维卷积方法,分别为简单(全局内存)卷积,含光环元素的共享内存方法,不含光环元素的共享内存方法。并且改进了CPU的一维卷积方案(不需要分边界情况单独处理)。 ▶ 输出结果如下图,计时部分有点问题(如何使用同一个 cudaEvent _t start, stop 对多个事件进行计 阅读全文
posted @ 2017-10-14 15:06 爨爨爨好 阅读(609) 评论(0) 推荐(0)

摘要:▶ 采用两种方法计算任意长度的数组规约加法。第一种是将原数组收缩到一个固定长度的共享内存数组中,再利用二分规约计算求和,这里测试了固定长度分别取2,4,8……1024的情形;第二种方法是将原数组分段,每段使用各自的共享内存进行二分规约,结果汇总后再次分段,规约,直至数组长度减小到1,输出结果。 ● 阅读全文
posted @ 2017-10-13 12:53 爨爨爨好 阅读(838) 评论(0) 推荐(1)

摘要:▶ 计算矩阵矩阵乘法 Am×n Bn×p == Cm×p 过程。 ▶ 原始矩阵乘法,一个线程计算结果矩阵中的一个元素。 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <malloc.h> 4 #include <time.h> 5 #in 阅读全文
posted @ 2017-10-12 23:39 爨爨爨好 阅读(424) 评论(0) 推荐(0)

摘要:▶ P46。SPMD (Single-Program Multiple-Data) 单程序多数据,CUDA使用的并行编程风格。并行处理单元在数据的多个部分执行相同程序,但这些处理单元不用同时执行限购通的指令;SIMD (Single-Instruction Multiple-Data) 单指令多数据 阅读全文
posted @ 2017-10-12 11:18 爨爨爨好 阅读(681) 评论(3) 推荐(0)

摘要:▶ 直接的矩阵加法,没有优化 ▶输出结果,对于超大型矩阵的加法计算,左下图为一维跳转,右下图为二维跳转。矩阵较大时初始化矩阵费时较多。超大矩阵的计算上GPU相对CPU产生了一定的优势,一维跳转比二维跳转稍快,因为省去了复杂的下标映射。 ▶ 对于较小的矩阵,GPU没有发挥出优势, 因为内存拷贝等方面耗 阅读全文
posted @ 2017-10-12 10:03 爨爨爨好 阅读(535) 评论(0) 推荐(0)