CUDA优化

[复制链接]
查看11 | 回复2 | 2010-3-1 11:08:29 | 显示全部楼层 |阅读模式
三、
CUDA程序的优化

对于一个问题来说,往往有很多办法可以解决它。选择那个方法,这是一个问题,而且是一个与政策、技术,甚至阴谋相关的问题,具体怎么做,往往考量很多。或者说条件不一样,评判的标准不一样,选择的方法也就不一样。编程也类似,一般来说,不是为了特地使用GPU,就没有必要没有原因就将原来的CPU代码修改为GPU。
说这段话,是因为发现有很多人在不适合GPU的情况下,却使用它,结果当然很坏具了。
使用CUDA可分两种情况,一种是从头到尾从新设计;一种是已经有了串行的版本,但不能满足速度要求,想通过使用CUDA来加快速度,此时可以考虑将代码中最耗时的部分使用CUDA重写。
3.1选择合适的工具

由于历史的原因,我们目前所使用的串行编程模式是完全一致的,说白了就是以控制为中心,虽然面向对象说是以数据为中心,但是我认为其本质上还是以控制为中心,大家想想看你写面向对象的代码时,其整个中心是不是处理逻辑?是不是系统要做什么?而目前的并行编程模式却分为数据并行和任务并行,或者分布式存储并行和共享存储并行,CUDA是基于数据并行和共享存储器的并行,如果你有OpenMP或者MPI的编程经验,相信你也许也会有这种看法。

所以如果你要解决的问题并不是数据并行的或者共享存储器的,使用CUDA就绝不是一个好的选择。

3.2优化最应该优化的地方-优化准则

相信很多人都知道80%-20%定律,也就是说程序的80%时间花在执行20%的代码上,如果我们将那20%的代码加速了10倍,最终也才加速一点点,如果我们将那80%加速了一倍,最终的结果将加速近一倍。

根据公式s = 1/(f + (1-f)/p),其中f是程序中串行代码的比重,p是处理器数目。可知f越大,s就越小。这也许解释了nv的说法(尽量让更多的代码在GPU上执行,就算没有加速比)。也就是尽量提高并行代码的比重。这潜在的能够提升程序的并行效率,fermi的某些功能显然是向前迈进了一些,但是nv是不是真的能够达到他们的设想,那就是另一回事了。
回复

使用道具 举报

千问 | 2010-3-1 11:08:29 | 显示全部楼层
学习~~
回复

使用道具 举报

千问 | 2010-3-1 11:08:29 | 显示全部楼层
最近毕业论文很头大,SIT项目又要结题了啊
支持楼主啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行