浅析cuda应用策略
上一篇 /
下一篇 2010-01-31 22:21:26
cuda很强大,但是再强大的工具都有它的局限性。
常言道:尺有所短,寸有所长。
所以如果在cuda不擅长的领域使用cuda,那么起不了好的作用反倒浪费精力和资源,也是非常正常的。
因此启动一个项目之前,必须先评估好你的项目是否适合cuda。
要做出这个评估,就必须对cuda的技术特性有一个很好的理解。
cuda的特点无非是这么几个:众核,需要从内存把数据拷贝到显存,从内存到显存的带宽相对非常慢。
所以如果一个项目,要处理的数据可并行性非常差,那就不能用cuda。怎么才叫并行性好呢?那就是:
首先可以找到一种分治策略,就是这个问题可以划分成很多子问题,子问题的求解相对简单很多,而且可以通过子问题很容易的求出最终解;
其次这种分治策略必须对彼此间执行顺序依赖很弱,最好不要有依赖。
满足第一条的话,这个问题可以从单线程转换为多线程问题。满足第二条的话,那么转换成多线程以后,性能提高空间会非常大。第二条性质越好,那么线程数增加量和性能增量之比越接近正比。
但满足上面两条,只能说这个问题适合并行化。
cuda的另一个主要限制,就是从内存到显存的带宽问题。也就是说,只有你的项目可以设计一种方案,不需要太多内存和显存之间的数据同步,才能有效的发挥cuda的价值。换言之,如果你的方案里,并行化带来的效率提升是10分,而需要投入8分甚至更多的费用在内存和显存的同步上,那就不适合cuda。
所以大致面评估一个项目是否适合cuda的参数就是下三条:
1.可并行性。
2.异步性。
3.与内存数据的同步依赖性。
同样这三条,也是实施cuda项目的策略。
导入论坛
引用链接
收藏
分享给好友
推荐到圈子
管理
举报
TAG: