目前我正在使用带有2个SM的GeForce GPU卡。我在GPU卡上运行了一些实验,并观察到与类似的CPU实现相比,代码的执行速度提高了5倍。我很好奇,如果我在一个功能更强大的GPU卡(如Tesla GPU)中运行完全相同的代码,与使用GeForce卡时获得的时间相比,我会获得更好的执行时间。如果是的话,为什么会这样呢?如果没有,我应该如何修改我的代码(在高级别),因为我希望更强大的GPU卡可以为我提供更多的加速。
答案 0 :(得分:2)
每个SM一次最多可以运行8个块(对于需要更多资源的块,例如共享内存,通常更少),因此具有更多SM的GPU可以运行相应更大数量的块。
为了使您的代码能够适应未来的大型GPU,请在内核调用中指定一些基于(并且大于)系统中SM数量的块。通过查看deviceProp::multiProcessorCount
或使用cuDeviceGetAttribute
致电CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT
,可查询此内容。
答案 1 :(得分:2)
如果满足以下所有条件,则应该从具有更多SM的GPU获得更好的性能:
请注意,当前的硬件趋势是增加内核数量,因此最大化线程数通常非常重要。例如,Kepler架构相对于Fermi架构的核心数量增加了三倍。