程序优化
MingChaoSun
潜心技术,不离不弃!
展开
-
CUDA编程(三)评估CUDA程序的表现
CUDA编程(三)评估CUDA程序的表现这篇博客主要讲解了怎么去获取核函数执行的准确时间,以及如何去根据这个时间评估CUDA程序的表现,也就是推算所谓的内存带宽,总的来说有了这些准备,我们接下来就可以去优化程序了,但是优化过程也是十分复杂与漫长的,这里同样介绍了一个优秀CUDA程序应具有的特征以及通常的优化步骤。原创 2016-03-31 13:37:08 · 12876 阅读 · 2 评论 -
CUDA编程(一)第一个CUDA程序
CUDA(Compute Unified Device Architecture),是显卡厂商NVIDIA推出的运算平台。 CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。原创 2016-03-28 22:52:04 · 62560 阅读 · 2 评论 -
CUDA编程(九)并行矩阵乘法
CUDA编程(九)矩阵乘法在之前我们一直围绕着一个非常简单的求立方和的小程序学习CUDA,不过这个立方和的小程序没有什么实际意义,这篇博客我们用CUDA并行了矩阵乘法,问题也比较简单,基于上一个立方和程序的经验,完成这个程序也不算太难,但是运行结果存在很多问题,毕竟我们还没有开始优化,不过除了速度问题,GPU浮点数运算的精度也成了一个大问题,不过这些之后都会慢慢解决。原创 2016-04-09 17:44:16 · 44787 阅读 · 22 评论 -
CUDA编程(八)树状加法
CUDA编程(八)树状加法上一篇博客我们介绍了ShareMemory和Thread同步,最后利用这些知识完成了block内部线程结果的加和,减轻了CPU的负担,结果还是比较令人满意的,但是block的加和工作是使用一个thread0单线程完成的,这点还是有待改进的。那么这个单线程的加法部分如何解决呢?我们知道GPU上的程序只有并行才能发挥其优势,所以我们自然想到这个加法能不能并行呢?答案当然是可行的原创 2016-04-08 14:29:53 · 10293 阅读 · 11 评论 -
CUDA编程(七)共享内存与Thread的同步
CUDA编程(七)共享内存与Thread的同步在之前我们通过block,继续增大了线程的数量,结果还是比较令人满意的,但是也产生了一个新的问题,即,我们在CPU端的加和压力变得很大,所以我们想到能不能从GPU上直接完成这个工作。我们知道每个block内部的Thread之间是可以同步和通讯的,本篇我们将让每个block把每个thread的计算结果进行加和。所以本篇博客我们将研究CUDA架构中Threa原创 2016-04-07 19:28:49 · 23884 阅读 · 11 评论 -
CUDA编程(六)进一步并行
CUDA编程(六)进一步并行在上一篇博客中给大家介绍了一个访存方面非常重要的优化,我们通过使用连续的内存存取模式,取得了令人满意的优化效果,最终内存带宽也达到了GB/s的级别。之前也已经提到过了,CUDA不仅提供了Thread,还提供了Grid和Block,本篇博客通过使用block进行了进一步的并行,得到了比较令人满意的结果原创 2016-04-06 15:27:56 · 15957 阅读 · 17 评论 -
CUDA编程(五)关注内存的存取模式
CUDA编程(五)关注内存的存取模式除了通过Block继续提高线程数量来优化性能,这次想给大家先介绍一个访存方面非常重要的优化,同样可以大幅提高程序的性能,即通过尽可能的连续操作内存,减少内存存取方面的时间浪费。通过最终的结果我们可以看到,看似不起眼的一个小改进(尽可能的去连续操作内存),竟然有这近7倍的性能提升,所以希望大家记住这个优化。原创 2016-04-05 19:08:59 · 10222 阅读 · 13 评论 -
CUDA编程(四)并行化我们的程序
CUDA编程(四)并行化我们的程序 上一篇博客主要讲解了怎么去评估CUDA程序的表现,博客的最后我们计算了在GPU上单线程计算立方和的程序的内存带宽,发现其内存带宽的表现是十分糟糕的。 这篇博客主要讲解了怎么去使用Thread去简单的并行我们的程序,虽然我们的程序运行速度有了50甚至上百倍的提升,但是根据内存带宽来评估的话我们的程序还远远不够,甚至离1G/S的水平都还差不少,所以我们的优化路还有很长。原创 2016-03-31 19:00:15 · 13154 阅读 · 7 评论 -
CUDA编程(二) CUDA初始化与核函数
这次给大家介绍CUDA的初始化和如何在显卡上运行程序,即先将数据从内存复制到显存,再写好运算的核函数,之后用CUDA调用核函数,完成GPU上的计算,之后将结果复制回内存,释放掉显存的整个过程。原创 2016-03-30 19:39:10 · 22716 阅读 · 13 评论 -
CUDA编程(十)使用Kahan's Summation Formula提高精度
CUDA编程(十)使用Kahan’s Summation Formula提高精度之前我们用CUDA完成了矩阵乘法,但是当然会存在很多问题,除了速度问题,GPU浮点数运算的精度也很差,本篇博客从出现误差的原理(浮点数大数吃小数)分析,使用了Kahan's Summation Formula在一定程度上解决了CUDA运算float精度不够的情况。原创 2016-04-10 16:11:14 · 10962 阅读 · 15 评论