NVIDIA のGPUのクロックを固定する方法

NVIDIAGPUの動作クロックを固定する方法です。

デフォルト設定のGPUは動作クロックが200MHzぐらいから2000MHz(2GHz)ぐらいまで随時変動します。

動作クロックが10倍変わると、ベンチマークのスコアも10倍変わります。CUDAや3D描画の性能測定を行う場合はまず動作クロックを固定すべきです。

動作クロックの確認方法

nvidia-smi コマンドを使います

$ nvidia-smi -q -d CLOCK

現在のクロックは "Clocks"の項目に出力されます

    Clocks
        Graphics                          : 210 MHz
        SM                                : 210 MHz
        Memory                            : 405 MHz
        Video                             : 555 MHz

クロックの上限値は"Max Clocks"に出力されます

    Max Clocks
        Graphics                          : 2100 MHz
        SM                                : 2100 MHz
        Memory                            : 9751 MHz
        Video                             : 1950 MHz

動作クロックの固定方法

nvidia-smiコマンドを使います

graphicsとmemoryのクロックが設定できます.

root権限が必要なのでsudoを使います

$ sudo  nvidia-smi --lock-graphics-clocks=2100
$ sudo  nvidia-smi --lock-memory-clocks=9751

確認

クロックを再確認します

$ nvidia-smi -q -d CLOCK

>|txt
Clocks
Graphics : 1965 MHz
SM : 1965 MHz
Memory : 9751 MHz
Video : 1725 MHz
|

メモリのクロックはMax Clocksの値を設定できましたが,graphicsのクロックはMax Clocksの値になっていません

ネットで調べると
forums.developer.nvidia.com

nvidiaの中の人が、

There is no guarantee that you can achieve the maximum frequency on any particular GPU.

と回答してました.こういう仕様だそうです.これは諦めたほうが良さそうです.