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