目前我正在使用带有 2 个 SM 的 GeForce GPU 卡。我正在该 GPU 卡上运行一些实验,并观察到与类似的 CPU 实现相比,该代码的执行速度快了 5 倍。我很好奇,如果我在更强大的 GPU 卡(例如 Tesla GPU)中运行完全相同的代码,与使用 GeForce 卡获得的时间相比,我是否会获得更好的执行时间。如果是,为什么会这样?如果没有,我应该如何修改我的代码(在高级别),因为我希望更强大的 GPU 卡可以给我更多的加速。
问问题
95 次
2 回答
2
每个 SM 一次最多可以运行 8 个左右的块(通常更少,对于需要更多资源的块,例如共享内存),因此具有大量 SM 的 GPU 可以运行相应数量更多的块。
为了让您的代码在未来适用于更大的 GPU,请在内核调用中指定基于(并且大于)系统中 SM 数量的块数。这可以通过查看deviceProp::multiProcessorCount
或调用cuDeviceGetAttribute
来查询CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT
。
于 2012-08-11T22:37:16.177 回答
2
如果满足以下所有条件,则应该期望具有更多 SM 的 GPU 具有更好的性能:
- 新的 GPU 与您现有的 GPU 具有相同或更新的架构,
- 新的 GPU 具有相同或更好的时钟速度,
- 新的 GPU 具有相同或更好的内存吞吐量,并且
- (到目前为止,最重要的是),代码使用了足够多的线程块来保持超过 2 个 SM 的忙碌。
请注意,当前的硬件趋势是增加内核数量,因此最大化线程数量通常非常重要。例如,相对于 Fermi 架构,Kepler 架构的核心数量增加了三倍。
于 2012-08-11T22:48:01.377 回答