🧠

D言語でBrainfuxk処理系を作ったので、コンパイラを変えてベンチしてみる

2022/08/19に公開

はじめに

処理系作成のチュートリアルでおなじみのBrainfu*kの処理系をD言語で作りました。

https://github.com/PenguinCabinet/Brainfuxk-D

ベンチマーク

これを使って何かしたいので、コンパイルオプションやコンパイラを変えこの処理系をコンパイルして、マンデルブロ集合のBrainfuxkを実行し処理時間を見ます。

https://github.com/PenguinCabinet/Time-Brainfuxk-D

テストするD言語コンパイラの皆様

名前 概要
dmd 公式のD言語コンパイラです
ldc LLVMベースのD言語コンパイラです

計測用のコード

module measure;
import std.stdio,std.process,std.datetime.date,std.datetime.stopwatch;

void measure_time(string v1,string v2){
    executeShell(v1);
    writeln(v1);
    float time;
    auto sw = StopWatch(AutoStart.yes);
    sw.start();
    foreach (i; 0..10)
    {
        executeShell(v2);
    }
    auto t1 = sw.peek();
    auto temp=t1;
    auto temp2=temp.total!"seconds"/10;
    writefln("time:%d Second",temp2);
}

void main(){
    measure_time("dmd Brainfuxk-D/source/app","app Brainfuxk-D/test/Correct-Cases/mandelbrot.bf");
    measure_time("dmd -O -release -inline Brainfuxk-D/source/app","app Brainfuxk-D/test/Correct-Cases/mandelbrot.bf");
    measure_time("ldc2 Brainfuxk-D/source/app","app Brainfuxk-D/test/Correct-Cases/mandelbrot.bf");
    measure_time("ldc2 -O3 Brainfuxk-D/source/app","app Brainfuxk-D/test/Correct-Cases/mandelbrot.bf");

}

各コンパイラでコンパイルした後、10回実行して計測しています。

計測結果

実行した環境はWindows11です。

実行環境
OS: Windows11
CPU: Core i7-12700
RAM: 32GB
処理系をコンパイルしたコンパイラ Brainfuxkのマンデルブロ集合の処理時間
dmd(v2.100.0-dirty) デフォルト 68s
dmd(v2.100.0-dirty) -O -release -inline 34s
ldc2(1.30.0) デフォルト 69s
ldc2(1.30.0) -O3 30s

まとめ

dmdもldcもちゃんと最適化オプションかけるかかけないかで、だいぶ違いますね。
リリースする時は気を付けたほうがいいです。

Discussion