CUDA中clock()和clock64()的时钟测量是什么?

Opt*_*mus 5 cuda nvidia clock

clock()CUDA中的时钟测量是什么clock64()

根据CUDA 文档,时钟是“每多处理器计数器”。根据我的理解,这是指主 GPU 时钟(而不是着色器时钟)。

但是,当我测量时钟计数并使用主 GPU 时钟频率将其转换为时间值时,我得到的结果是实际值的两倍(我使用 cuda 事件使用主机代码的内核执行时间来测量实际值)。这表明clock()返回着色器时钟频率而不是主 GPU 时钟。

我该如何解决这个困惑?

编辑:我通过将从 cudaGetDeviceProperties 获得的时钟速率除以 2 来计算主 GPU 时钟频率。据我了解cudaGetDeviceProperties给出的值是着色器时钟频率。

Opt*_*mus 5

CUDA 文档确实表示clock()clock64()返回“每多处理器计数器”。但在费米架构中clock()clock64()实际返回的是着色器时钟计数器。

cudaGetDeviceProperties返回clockRate的是着色器时钟频率。

因此,要计算时间,我们必须将时钟计数除以clock()clock64()cudaGetDeviceProperties 获得的着色器时钟频率

  • 我警告不要根据“cudaDeviceProp::clockRate”的值将“clock()”或“clock64()”计数转换为时间单位,因为由于时钟提升和时钟限制,底层时钟可能会动态变化。如果我没记错的话,自费米以来就已经存在用于限制功耗的时钟节流,并且开普勒引入了动态时钟升压。 (3认同)