【記事】Windows Subsystem for Linux 2(WSL2)のGPUサポートについて【2/3】

■こちらは、2020年11月13日に投稿された記事のため、情報の内容が古い可能性があります。

【ご確認ください】こちらは以下の記事の続編記事となります

Windows Subsystem for Linux 2 (WSL2) のGPUサポートについて【1/3】

前回の記事では,Windows Subsystem for Linux 2(WSL2)上でのGPGPU環境のセットアップについてかんたんにご紹介しましたが、今回はWSL2上で実際にGPGPUを実行した際のパフォーマンスについて検証しましたのでご紹介します。

 

WSL2のオーバーヘッドについて

WSL2は、Windowsの機能として提供されている仮想化システムHyper-Vを利用して実現しています。WSL2上のLinux環境も仕組みの上では仮想マシンとして動作するため、仮想化システム一般に起こりうるオーバーヘッドがWSL2上でも発生します。この点に関しては本項以降で検証を行いますが、マイクロソフト公式ドキュメントにも解説がございますので、ご参照ください。

例外的にWSL2ではなくWSL1を使用する場合
https://docs.microsoft.com/ja-jp/windows/wsl/compare-versions#exceptions-for-using-wsl-1-rather-than-wsl-2

 

■ Hyper-Vとは

Hyper-Vは、マイクロソフトが提供する仮想化システムです。 Hyper-Vを使用すると、Windows上の仮想マシンとして複数のオペレーティング システムを実行することができます。例えばプログラムやソフトウェアの動作検証を行う際、複数のオペレーションシステムの環境を1台のコンピュータ(デスクトップまたはノートPC )で実現できるためとても便利です。

Hyper-Vは、64 ビット版の Windows 10 Pro、Enterprise、および Education で使用できます(Home Editionでは使用不可)。

Windows 10 の Hyper-Vの概要
https://docs.microsoft.com/ja-jp/virtualization/hyper-v-on-windows/about/

 

GPGPUのパフォーマンス測定の方法

今回は NVIDIA CUDA Toolkitのサンプルプログラム*として提供されている NBody (N体シミュレーション) を利用し、所定のパラメーター設定での所要時間、FLOPSを計測しました。

NBodyにはベンチマークモードが実装されており、これを利用することで実効性能を計測することができます。同じ条件でのテストをWindows、同じコンピュータ上にセットアップされたWSL2上のUbuntuで行い、実効性能に差異があるかを確認しました。

※画像クリックで拡大します

 

■ CUDA Toolkitのサンプルプログラムについて

CUDA Toolkit にはコードサンプルが数多く用意されており、CUDA C / C ++を使用したソフトウェアの作成に役立ちます。今回利用したサンプル(nbody )では、CUDAでのN体シミュレーションの効率的な相互作用の計算シミュレーションが行えます。

nbody – CUDA N-Body Simulation
https://docs.nvidia.com/cuda/cuda-samples/#cuda-n-body-simulation

CUDA Code Samples
https://developer.nvidia.com/cuda-code-samples

 

CUDA Toolkitのセットアップ、サンプルプログラムの実行については、こちら(1回目の記事) を参照してください

 

測定結果

条件:
・ベンチマークモードにて要素数1,280,000に設定しNBodyをGPU実行
・利用したGPUはNVIDIA RTX2080Ti 1台

計測方法: それぞれ5回計測を行い、その平均値を取得

※結果は単精度計算(fp32)によるもの

 

パフォーマンス比較 (GPU実行時): Windows VS WSL2

GPU実行 所要時間(ms) GFLOP(S)
Windows 10 35403.003 9256.453
Ubuntu 20.04(on WSL2) 31231.972 10492.176

WSL2上での実行のほうがパフォーマンスが高いという結果になりました。この結果に関して弊社での事前の予想とは異なっており要因を推察しているところですが、WSL2でのGPUサポートはWindows側にインストールされたGPUドライバを直接的に利用する、仮想化システムとしてはやや特殊な仕組みとなっており、GPGPUに関しては仮想化オーバーヘッドの影響が少ないとも考えられます。また、動作環境のOSの違いも要因として考えられるところです。

あくまでNBodyの実行結果のみを見ての判断となるため、この結果を一般化することはできませんが、GPGPUでの利用に関して、WSL2の優位性が一定程度確認できたのではないかと思います。

 

【参考】パフォーマンス比較 (CPU実行時): Windows VS WSL2

CPU実行 所要時間(ms) GFLOP(S)
Windows 10 907883.125 3.609
Ubuntu 20.04(on WSL2) 2968239.750 1.104

NBodyは、オプション設定によってGPUを利用せずCPUのみにて実行することが可能です。CPU実行に関してはシングルスレッド実行となり並列化はされないようで、GPUで行ったテストと同じ条件では非常に時間がかかります。このため要素数を1/10の128,000に落として実行しましたが、それでもGPU実行時よりかなり所要時間が伸びていることが分かります。

また、CPU実行に関してはGPUの場合とは逆に、WSL2上でのパフォーマンスが著しく低下しています。CPUメインでの処理に関しては仮想化オーバーヘッドの影響が発生していると考えられます。

次回、第三回は、WSL2のより応用的な利用を想定した検証を行っていく予定です。

この記事を書いた人 : 技術部 和田
この記事を書いた日 : 2020.11.12
2021/05/10 追記:
【記事】Windows Subsystem for Linux 2(WSL2)のGPUサポートについて【3/3】を公開しました!