GPU監視ツールを自作してみよう(その1)
先日、予想外にも1時間半もリグが落ちていたので
監視ツールを自作してみることにした。
仕様
一定間隔で監視するのはWindows標準のタスクスケジューラを使うとして
フラグはTMPフォルダにでもファイル作れば良い。
さて、どうやってGPU Clockの値を取得するか・・・
思いつく限りのワードをGoogle先生にぶつけてみた結果、発見!
nvidia-smi
Nvidiaのドライバを入れている場合、使えるらしい。
ウチのはGeForceなので問題なく使える。
Windows PowerShellを起動し、早速コマンドを叩いてみる。
※"C:\Program Files\NVIDIA Corporation\NVSMI"に移動するか絶対パスを指定してね!
.\nvidia-smi.exe -i 0 -q -d CLOCK
-i 0 :GPUのUnit番号
-q :情報の取得
-d :情報の指定
意味としては、「GPU1枚目のCLOCKの情報を表示しろ」ってところ。
※実際に使う最は「-i」は指定しない。GPU8枚の情報がずらずら出るとスクショ撮りづらいし。
afterburnerが表示しているGPU Clockと値が近いので使えそう。
ちなみに、画像は無いがマイニングを停止すると300Mhzくらいまで下がる。
さて、ここからはプログラムのお勉強だ!
このままだと判定が難しいので取得情報を選別する。
"Graphics"って行を抜き取ればよさそうなので抽出条件を追加。
(.\nvidia-smi.exe -q -d CLOCK) | Where-Object{$_ -match "Graphics"}
Clocks配下以外のGraphicsも取得しているけど、無効値:N/AかMax値なので無視できそう。
とりあえず、無効値:N/Aを除外
(.\nvidia-smi.exe -q -d CLOCK) | Where-Object{$_ -match "Graphics"} |Where-Object{$_ -notmatch "N/A"}
これで、
GPU Clock 現在値
CPU Clock MAX値
の繰り返しになっている。
あとは、GPU Clockの数値のみを取り出して
1000未満だったらフラグONってIF文書けばよさそう。
今日はここまで。
使用しているWalletはこちら