你能预测一下CUDA内核的运行时间吗?

时间:2011-09-20 17:25:25

标签: cuda gpgpu

在多大程度上可以预测/计算CUDA内核的性能?

与CUDA合作过后,这似乎是微不足道的。

但我的一位不参与CUDA工作的同事告诉我,如果你有内存带宽,处理器数量和速度,那就不难了?

他所说的似乎与我所读的内容不一致。这是我能想象的可行的。你觉得怎么样?

 Memory processed
------------------ = runtime for memory bound kernels ?
 Memory bandwidth 

   Flops
------------ = runtime for computation bound kernels?
 Max GFlops

2 个答案:

答案 0 :(得分:2)

这样的计算几乎不会给出好的预测。有许多因素会影响性能。这些因素以极其复杂的方式相互影响。因此,您的计算将给出性能的上限,远离实际性能(在大多数情况下)。

例如,对于内存绑定内核,具有大量缓存未命中的内核将与具有命中率的内核不同。或者那些有分歧的人,那些有障碍的人......

我建议你阅读本文,这可能会给你更多关于这个问题的想法:"An Analytical Model for a GPU Architecture with Memory-level and Thread-level Parallelism Awareness"

希望它有所帮助。

答案 1 :(得分:1)

我认为您可以通过一些工作来预测最佳案例。就像你说的那样,有指令数,内存带宽,输入大小等等。

但是,预测实际最坏情况要复杂得多。

首先,存在内存访问模式等因素。例如:对于较旧的支持CUDA的卡,您必须注意分配全局内存访问,以便它们不会争用单个内存库。 (较新的CUDA卡使用逻辑和物理地址之间的散列来解决此问题。)

其次,存在非确定性因素,例如:PCI总线有多忙?主机内核有多忙?等

我怀疑接近实际运行时间的最简单方法是在输入的子集上运行内核,看看实际需要多长时间。