粗浅的文章,还请大家多多指正.
声明:本文受Creative Commons 署名-非商业性使用-禁止演绎 2.5 中国大陆 License协议保护.
程式的优化问题.
在做CUDA开发的时候,感觉难点之一就是如何将GPU的性能发挥到最大。
比如说,在同学的GeForce 8400M GS上面跑的程式,Block数量可能要设置的比较少,也就是说一个thread粒度会比较大,这样才能发挥8400最大的性能,因为8400的SM数量 实在太少,但是相同的程式设置用到GeForce GTX285上面却不好用了,为什么呢?因为GT300有30个SM,Block数目设置的较多一点才会更适合,thread的粒度相对较小。
尽管基本不会影响到程式的正确性,但是程式的优化却是和GPU不同不一样的,因此,Fermi做出了将32SP才集合成一个SM,而不是像以前的8个SP 组成一个SM,可能也是为了缓解该问题。
对比一下其他并行计算模型.
不过我对其他并行模型并没有多少了解,还请诸位高手指正。
在CUDA并行计算模型上面,一个程式每个thread的粒度都比较小,而且thread的总数一般都是10万个以上,同时众多thread组合成多个 block分批执行,因此在一个block内thread的计算量和任务基本都是高度一致的(否则会引起很显著的性能问题),因此也不适合做分支预测很多 的任务。
Read more