#はじめに
私は普段、Anacondaに標準でついてくるspyderを使用してpythonのプログラムを実行しています。
しかし。ある日コマンドラインを使用してプログラムを実行してみたら、「コマンドライン速くない?」と思いました。
定量的に分析するためにも、各実行ツールでベンチマークを実行することにしました。
結果として、ちょっとコマンドプロンプトが速い、でした。
簡単なコードでは特に実行方法について気にしなくてもいいけれど、
複雑なコードで速度を追い求めているなら、コマンドプロンプトをお勧めします。
#計測に使用したプログラム
こちらの記事のプログラムを全面的に使用しました。
また、実行方法は多々ありますが、今回は私の環境にある、
- コマンドプロンプト
- Spyder
- PyScripter
- VSCode
- Jupyter Notebook
と使用して比較しました。
#環境
Python 3.8.8
Windows 10
CPU Ryzen 3700x
#1.様々な動作の速度
こちらのプログラムを使用しました。
計測に意外と時間がかかってしまったので、
10回平均を5回に減らし、
プリントは10万回から1万回に減らし、
スレッド生成は10万回から1万回に、
プロセス生成は10万回から千回に減らしました。
結果がこちらです。
コマンドプロンプト | Spyder | VSCode | PysSripter | jupyter Notebook | |
---|---|---|---|---|---|
空ループを1000万回 | 142.32 ms | 142.12 ms | 149.73 ms | 145.53 ms | 144.50 ms |
関数を100万回呼出し | 93.68 ms | 96.48 ms | 98.48 ms | 96.08 ms | 94.08 ms |
print を1万回 | 924.70 ms | 396.53 ms | 727.52 ms | 21.71 ms | 404.96 ms |
ジュリア集合の計算 | 3682.54 ms | 3696.35 ms | 3847.68 ms | 3695.15 ms | 3698.63 ms |
スレッド生成1万回 | 172.55 ms | 187.44 ms | 165.39 ms | 196.59 ms | 157.12 ms |
プロセス生成千回 | 336.70 ms | 350.48 ms | 347.71 ms | 375.94 ms | 206.58 ms |
ループ、関数、ジュリア集合の計算といった、普通のプログラムに含まれているような内容はコマンドプロンプトが少し早いみたいです。
なぜかprint
ではPysSripterがとても高速です。
スレッド生成、プロセス生成に関しては、jupyter Notebookが速く、コマンドプロンプトがそれに続くといった形です。
#2.numpyの速度
こちらのプログラムを使用しました。
結果がこちらです。
コマンドプロンプト | Spyder | VSCode | PysSripter | jupyter Notebook | |
---|---|---|---|---|---|
Dotted two matrices | 0.49 s | 0.49 s | 0.49 s | 0.49 s | |
Dotted two vectors of length | 0.03 ms | 0.02 ms | 0.02 ms | 0.03 ms | |
SVD of a matrix | 0.39 s | 0.52 s | 0.41 s | 0.40 s | |
Cholesky decomposition | 0.16 s | 0.18 s | 0.18 s | 0.16 s | |
Eigendecomposition | 4.88 s | 4.94 s | 4.90 s | 4.90 s |
(注)vscodeはなぜかnumpyがimportできなかったため、空白
全体的に横並びだけど、後半はコマンドプロンプトがちょっと速いかなという感じです。
#まとめ
今回は、簡単なプログラムでのベンチマークを行いました。
普通の計算でもnumpyを使った計算でも、全体的にコマンドプロンプトがちょっと速いという結果になりました。
今回のテストでは__少し速い__程度でしたが、実際のコードではライブラリ内で複雑な処理が積み重なり、ある程度の速度差にはつながりそうです。
簡単なコードでは特に実行方法について気にしなくてもいいけれど、複雑なコードで速度を追い求めているならコマンドプロンプトをお勧めします。