要生效的最小GPU线程数

时间:2011-08-11 17:12:21

标签: cuda gpu

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

1 个答案:

答案 0 :(得分: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的"Better performance at lower occupancy" talk来自GTC 2010中得到了很好的描述。

主要是确保你使用所有的SM:没有这样做你没有使用GPU可以提供的所有计算性能或带宽。

相关问题