摘要:0. APOD过程 ● 评估。分析代码运行时间的组成,对瓶颈进行并行化设计。了解需求和约束条件,确定应用程序的加速性能改善的上限。 ● 并行化。根据原来的代码,采用一些手段进行并行化,例如使用现有库,或加入一些预处理指令等。同时需要代码重构来暴露它们固有的并行性。 ● 优化。并行化完成后,需要通过优
阅读全文
随笔分类 - CUDA
摘要:0. APOD过程 ● 评估。分析代码运行时间的组成,对瓶颈进行并行化设计。了解需求和约束条件,确定应用程序的加速性能改善的上限。 ● 并行化。根据原来的代码,采用一些手段进行并行化,例如使用现有库,或加入一些预处理指令等。同时需要代码重构来暴露它们固有的并行性。 ● 优化。并行化完成后,需要通过优
阅读全文
摘要:关于cuBLAS库中矩阵乘法相关的函数及其输入输出进行详细讨论。 ▶ 涨姿势: ● cuBLAS中能用于运算矩阵乘法的函数有4个,分别是 cublasSgemm(单精度实数)、cublasDgemm(双精度实数)、cublasCgemm(单精度复数)、cublasZgemm(双精度复数),它们的定义
阅读全文
摘要:三种不同的方法计算前缀和,并与CPU的结果进行了对比。 ▶ 结果如下图。第一种方法存在不可重现的bug,且仅当输入数组规模大于512时开始出现,原因未知。其他几种方法计算结果均正确,再计算较短的响亮的时候第三种方法(改良的收集 - 分发树法)效率最高,当向量长度远大于自己设定的阈值1024(单个线程
阅读全文
摘要:展示了三种不同的GPU一维卷积方法,分别为简单(全局内存)卷积,含光环元素的共享内存方法,不含光环元素的共享内存方法。并且改进了CPU的一维卷积方案(不需要分边界情况单独处理)。 ▶ 输出结果如下图,计时部分有点问题(如何使用同一个 cudaEvent _t start, stop 对多个事件进行计
阅读全文
摘要:▶ 采用两种方法计算任意长度的数组规约加法。第一种是将原数组收缩到一个固定长度的共享内存数组中,再利用二分规约计算求和,这里测试了固定长度分别取2,4,8……1024的情形;第二种方法是将原数组分段,每段使用各自的共享内存进行二分规约,结果汇总后再次分段,规约,直至数组长度减小到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
阅读全文
摘要:▶ P46。SPMD (Single-Program Multiple-Data) 单程序多数据,CUDA使用的并行编程风格。并行处理单元在数据的多个部分执行相同程序,但这些处理单元不用同时执行限购通的指令;SIMD (Single-Instruction Multiple-Data) 单指令多数据
阅读全文
摘要:▶ 直接的矩阵加法,没有优化 ▶输出结果,对于超大型矩阵的加法计算,左下图为一维跳转,右下图为二维跳转。矩阵较大时初始化矩阵费时较多。超大矩阵的计算上GPU相对CPU产生了一定的优势,一维跳转比二维跳转稍快,因为省去了复杂的下标映射。 ▶ 对于较小的矩阵,GPU没有发挥出优势, 因为内存拷贝等方面耗
阅读全文
|