要生效的最小GPU线程数

Ade*_*ick 6 cuda gpu

我将在CUDA上并行化一个局部搜索算法来解决一些优化问题.问题非常严重,因此实际可解决的问题的规模非常小.我担心的是计划在一个内核中运行的线程数量不足以在GPU上获得任何加速(即使假设所有线程都已合并,没有银行冲突,非分支等).假设为100个线程启动了一个内核.期望使用GPU获得任何利润是否合理?如果线程数是1000怎么办?分析案例还需要哪些其他信息?

har*_*ism 7

100个线程还不够.理想情况下,您希望大小可以划分为至少与GPU上的多处理器(SM)一样多的线程块,否则您将使处理器空闲.出于同样的原因,每个线程块应该具有不少于32个线程.理想情况下,每个块应该有32个线程的小数(比如96-512个线程),如果可能的话,每个SM应该有多个这样的块.

至少,您应该尝试使用足够的线程来覆盖SM的算术延迟,这意味着在Compute Capability 2.0 GPU上,每个SM需要大约10-16个warp(32个线程组).但是,它们并不都需要来自同一个线程块.这意味着,例如,在具有14个SM的Tesla M2050 GPU上,您将需要至少4480个线程,分成至少14个块.

也就是说,比这更少的线程也可以提供加速 - 这取决于许多因素.例如,如果计算是带宽限制的,并且您可以将数据保存在设备内存中,那么您可以获得加速,因为GPU设备内存带宽高于CPU内存带宽.或者,如果它是计算绑定的,并且存在大量指令级并行性(来自同一线程的独立指令),那么您将不需要那么多线程来隐藏延迟.后一点在弗拉基米尔·沃尔科夫(Vladimir Volkov)的" GTC 2010 "中"低入住率下更好表现"演讲中得到了很好的描述.

最重要的是确保使用所有SM:如果不这样做,则不会使用GPU可以提供的所有计算性能或带宽.