LoginSignup
1

More than 1 year has passed since last update.

Hardware-Accelerated GPU Schedulingによる恩恵[Windows 10]

Last updated at Posted at 2020-11-03

Hardware Accelerated GPU SchedulingによるGPUパフォーマンスの向上を調べてみました

2020年5月にアップデートされたWindows 10の新機能、Hardware-Accelerated GPU Schedulingの挙動について調べてみました。

結論

  • Hardware-Accelerated GPU Schedulingによって、アクティブウィンドウ(メインタスク)のGPU利用(描画を含む)がより優先されるようになった
  • メインタスクだけでなく、サブタスクのGPU利用も効率化されている
  • 対応したゲームのFPSが向上するかも??

実験

環境

実験環境は以下の通りです。

OS Windows 10 Pro (20246)
CPU Intel Core i7-7700
GPU Geforce GTX 1080
GPU グラフィックス driver v456.71
CUDA v10.1

実験方法

今回の実験方法では、次のような空カーネルを連続実行し、それらの実行にかかった時間を計測しました。

__global__ void empty_kernel() {}

while (true) {
    empty_kernel<<<1, 1>>>();    // 計測
}

空カーネルはGPUに制御を渡し、すぐにCPUに制御が戻ってくる動作をします。
GPUが多忙のときは、それらの実行が遅らされ、制御がCPUに戻ってこないために時間がかかってしまいます。

サブの描画タスクとして、CUDA Sampleにあるbilateral filterを実行しました。

bilateral filterの単独実行時のfpsは16です。(画像は拾い物です。)
bilateralfilter.png

実験結果

実験結果は以下の通りになりました。

bilateral filterを実行せずに空カーネルを実行した場合、

free.png

横軸は空カーネル実行の累計時間(1秒間)、縦軸は空カーネル実行1回あたりにかかった時間です。
オレンジ色のグラフはHardware-Accelerated GPU Schedulingオフにした場合で、青色のグラフはオンにした場合の結果です。
それぞれ、コマンドプロンプトをアクティブウィンドウにして実行しています。

ご覧の通り、Hardware-Accelerated GPU Schedulingを利用した方が、一回あたりの空カーネル実行時間は短くなっていることがわかります。

今まで、GPUドライバーによってスケジュールされていたGPUタスクが、Hardware-Accelerated GPU SchedulingによってOSによっても最適化されたことがわかります。
(以前から、OSによってもGPUタスクスケジューリングされていたかどうかはわかりません。知っている方がいらっしゃれば、是非コメントをお願いします。)

bilateral filterと同時に実行した場合(active)

次は、bilateral filterと同時に実行した場合の結果です。
今回も、空カーネル実行のコマンドプロンプトをアクティブウィンドウにして実行しています。
on_active_window_11or16fps.png

なんんと、結果が大きく異なりました!

Hardware-Accelerated GPU Schedulingを使用しなかった場合、サブタスクのbilateral filterのfpsは16fpsのままで、空カーネルの実行はアクティブウィンドウにもかかわらず数百倍遅くなっています
つまり、サブのタスク(bilateral filter)によってメインタスク(空カーネル実行)が外乱を受けていると考えられます。

一方、Hardware-Accelerated GPU Schedulingを使用した場合メインタスク(空カーネル実行)の実行時間は比較的小さく落ち着いており、サブタスクのbilateral filterfpsが11に低下しました
これは、Hardware-Accelerated GPU Schedulingのおかげで外乱が抑えられていると考えられます。

bilateral filterと同時に実行した場合(non-active)

次に、先ほどの実験のメインタスクとサブタスクを逆にしてみました
on_sub_window_16fps.png

今回は、メインタスク(bilateral filter)のfpsは16で一定でした

しかし、Hardware-Accelerated GPU Schedulingを使用しなかった場合に比べてHardware-Accelerated GPU Schedulingを使用した場合の方がGPUタスクが競合していると考えられる部分(図で山になっているところ)では、比較的安定してサブタスク(空カーネル)が実行されています

これらより、Hardware-Accelerated GPU Schedulingによって、サブタスクにおいてもGPUタスクのスケジューリングは最適化されていると考えられます。

GPUタスクを必要としないタスク(textファイルの表示)と同時に空カーネルを実行した場合

最後に、bilateral filterではなく、GPU処理をほとんど必要としないタスク(textファイルの表示)と同時に空カーネルを実行した場合についての結果も載せておきます。

textファイルがサブタスクの場合

on_active_window_with_text_file.png

textファイルがメインタスクの場合

on_sub_window_with_text_file.png

どちらにおいても、空カーネルを単独実行した最初の実験とほとんど同じ結果でした

したがって、GPUを利用するタスクがアクティブウィンドウで実行されているかどうかにかかわらずサブタスクであってもGPU処理が繁忙でない時(GPU処理性能が余っている)はフルにGPUを利用することができると言えます。

まとめ

今回、新しくWindows 10で実装されたHardware-Accelerated GPU Schedulingの挙動について空カーネル実行を利用して調べてみました。

結果としては、従来のドライバーによるGPUタスクスケジューリングに加えて、OS側でGPUタスクスケジューリングが最適化されていることがわかりました。
それによって、GPUを利用するサブタスクによるメインタスクへの外乱を低減しただけでなく、サブタスクのGPU利用においても最適化されていることがわかりました

今後、Hardware-Accelerated GPU Schedulingに対応したPCゲームのfps向上が期待されます。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
1