Pythonが速度改善に本気出すと聞いたので恒例のたらい回しベンチをとってみたら、RubyがYJITですごく速くなっていて驚いた話 - Smalltalkのtは小文字です
本題からは外れますが、この記事の最初の版ではRust版がC版より速かったので、追試のために当方でC++で書いたコードを載せておきます。
なお改訂後のCコードではclock()が使われてますが、これだとcpu timeだけの積算になるので実時間と比べてちょっと早めに出るはずで、他言語と公平ではないようです。以下のコードでは実時間で測っています。
#include <chrono> #include <iostream> int tarai(int x, int y, int z){ return x > y ? tarai( tarai(x-1, y, z), tarai(y-1, z, x), tarai(z-1, x, y) ) : y; } int main(void){ const auto start_time = std::chrono::steady_clock::now(); const auto result = tarai(14, 7, 0); const auto end_time = std::chrono::steady_clock::now(); std::cout << result << "\n"; const auto d = std::chrono::duration_cast<std::chrono::nanoseconds>(end_time - start_time); std::cout << d.count() / 1000000000.0 << std::endl; return 0; }
WSL上での実行結果。
nakag@NAKA-XA7C:~/src/tarai$ g++ --version g++ (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0 Copyright (C) 2019 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. nakag@NAKA-XA7C:~/src/tarai$ clang++ --version clang version 10.0.0-4ubuntu1 Target: x86_64-pc-linux-gnu Thread model: posix InstalledDir: /usr/bin nakag@NAKA-XA7C:~/src/tarai$ g++ tarai.cc -O3 -o tarai_gpp nakag@NAKA-XA7C:~/src/tarai$ clang++ tarai.cc -O3 -o tarai_cpp nakag@NAKA-XA7C:~/src/tarai$ ./tarai_gpp 14 0.62791 nakag@NAKA-XA7C:~/src/tarai$ ./tarai_cpp 14 0.625775 nakag@NAKA-XA7C:~/src/tarai$ ./tarai_gpp 14 0.647384 nakag@NAKA-XA7C:~/src/tarai$ ./tarai_cpp 14 0.632788
std::chrono::steady_clockの精度は数百ナノ秒とのことで、下の桁はあまり当てになりませんが、表示だけRust版に合わせました(といっても微妙に合ってないし、一々nanosecondsにキャストして割ったりする必要はなかった気もする)。
比較のためそのRust版も実行。
nakag@NAKA-XA7C:~/src/tarai$ rustc --version rustc 1.59.0 nakag@NAKA-XA7C:~/src/tarai$ rustc -C opt-level=3 -C debug_assertions=no tarai.rs -o tarai_rs nakag@NAKA-XA7C:~/src/tarai$ ./tarai_rs 14 0.6260091 nakag@NAKA-XA7C:~/src/tarai$ ./tarai_rs 14 0.6391106
nakag@NAKA-XA7C:~/src/tarai$ ls -l total 10488 -rw-r--r-- 1 nakag nakag 541 Sep 9 02:23 tarai.cc -rw-r--r-- 1 nakag nakag 462 Sep 9 02:13 tarai.rs -rwxr-xr-x 1 nakag nakag 17368 Sep 9 20:59 tarai_cpp -rwxr-xr-x 1 nakag nakag 17368 Sep 9 20:59 tarai_gpp -rwxr-xr-x 1 nakag nakag 10688896 Sep 9 21:01 tarai_rs
ファイルサイズの違いがすごい。
しかし過去のエントリ見たら昔から同じようなことやってるのね……自分……