WSL1と同じ感覚でWSL2を使ったらプログラム実行速度が爆遅化した


ごきげんよう、ちゃまおです。

先日、C言語で作成したシミュレーションプログラムの実行速度を向上させて、作業効率を改善させる事を理由に、ゲーミングPCを予算購入してもらいました。
初めて触るゲーミングPCだったので、ハイテンションになりながら、プログラミング環境を整え、シミュレーションを回した結果...爆速化せず、むしろ爆遅化しました。

スペック比較

今まで使用していたPCと、今回購入してもらったPCの主なスペックを比較したものが、以下の表です。CPUのカッコ内数値は、CINEBENCH R23のSingle coreテスト結果です。今回購入してもらったPCの方では、専用ソフト使ってPCのパフォーマンス設定が出来たので、CPUの性能が最大限に発揮される設定としました。

今まで使用していたPC 今回購入してもらったPC
CPU i7-4770HQ (593pts) i9-10980HK (1304pts)
メモリ 16GB 32GB
SSD 500GB 2TB
GPU Intel Iris Pro Graphics 5200 NVIDIA GeForce RTX 2070 Super
WSLのバージョン WSL1 WSL2

CPUのベンチマーク結果を見ると、今回購入してもらったPCの方が約2.2倍良いので、プログラム実行速度は爆速化するはず!

プログラム実行速度の計測方法

コンパイル→実行→結果のグラフ作成の処理内容を記載したシェルスクリプト実行時に、timeコマンドをつけて計測しました。

マシンによる性能差を見たいだけなのと、機密情報に関わる為、実行したプログラムのソースコードは非公開とさせて頂きます。また、普段は100回くらい連続で回していますが、今回は1回分としました。

プログラム実行速度比較(1回目)

timeコマンド結果の"real"の数値を抜き出したのが、以下の表となります。

今まで使用していたPC 今回購入してもらったPC
実行速度 0m26.997s 1m43.908s

…あれ???今回購入してもらったPCの方が約3.8倍遅いぞ...???

原因っぽいものの特定と、プログラム実行速度比較(2回目)

上記の問題が生じてから数日間は、原因が一切不明で、詰んでいました。

今まで使用していたPC上では、VSCodeの既存のターミナルをWSL1にしていた為、今回購入してもらったPC上でも同様の環境にしようと思い、こちらの記事をぼんやりと読んでいたところ、WSL2ではWindows側のファイルアクセスが悪いのでは?と言う考えが出てきました。
1回目の実行速度比較の際は、2台のPCとも、「WSL上からWindows側のファイルにアクセスして実行」していたのですが、今回購入してもらったPCの方で、試しに「WSL2上で実行」してみた結果、以下の通りとなりました。

今まで使用していたPC 今回購入してもらったPC
実行環境 WSL1上からWindows側のファイルにアクセスして実行 WSL2上で実行
実行速度 0m26.997s 0m11.240s

やっと、今回購入してもらったPCの方が約2.4倍速くなりました!!!

現時点で取れる対策

自分は普段、Windows側でソースコードの管理をしている為、WSL側でソースコードの管理をする事に抵抗があります。その為、WSL上で実行した後に、関連ファイルをWindows側にコピーするしか対策は無いのかなぁと思っています。