CUDA中的clock()
和clock64()
的时钟测量是什么?CUDA中clock()和clock64()的时钟测量是什么?
根据CUDA documentation该时钟是'per-multiprocessor counter'。根据我的理解,这是指主GPU时钟(不是着色器时钟)。
但是,当我测量时钟计数并将其转换为使用主GPU时钟频率的时间值时,我得到的结果是真实值的两倍大(我使用内核执行时间从使用cuda事件的主机代码测量实际值) 。这表明clock()
返回着色器时钟频率,而不是主要的GPU时钟。
我该如何解决这个困惑?
编辑: 我通过将我从cudaGetDeviceProperties获得的时钟频率除以2来计算主GPU时钟频率。据我所知,cudaGetDeviceProperties给出的值是着色器时钟频率。
**主要GPU时钟/图形核心时钟/图形时钟/核心时钟**:流式多处理器运行的时钟频率。
**着色器时钟/着色器核心时钟/处理器时钟/ GPU时钟**:执行单元(CUDA内核)运行的时钟速率。这是主要GPU时钟的两倍。 这就是我对它的理解。 – Optimus 2014-11-21 16:37:40
我可以确认,在费米设备上,'cudaDeviceProp :: clockRate'是着色器时钟频率,即与“主”GPU时钟相比的双倍值。在开普勒设备上,两者是相同的。如果你知道你正在使用哪种设备,答案会更加确定。不知道'clock()'和'clock64()' - 你可能是对的。 – 2014-11-21 16:47:19
我认为@Optimus指的是以下内容:在较早的GPU(例如Fermi系列)上,执行单元的运行速度是图形域其余部分的两倍时钟速率(有时被称为“热时钟”)。 'nvidia-smi'分别报告为“图形”和“SM”时钟。例如,在我的基于费米的Quadro 2000上,前者报告为625 MHz,后者报告为1251 MHz。最好的我知道,从开普勒开始,GPU的所有非内存区域都以相同的速度运行,即没有更多的SM热时钟。 – njuffa 2014-11-21 16:53:32