zapccは先日発表されたClangをベースとしたコンパイラである。基本的な高速化の手法についてはいろんなところで公開されているのでそちらをチェックして欲しい。
サーバクライアント方式にすることで高速化を図っているということなのだが、実際にはどの程度の速度が出るのか挑戦してみたい。
ということで、自分で管理しているRISC-VシミュレータをGCC/LLVM/zapccでコンパイルして、コンパイル速度を比較してみたい。
調査したのは以下のコンパイラについて自作RISC-Vシミュレータをコンパイルしてその速度を比較する。
ビルド環境はCMakeで作ってあるのでCC
, CXX
を変更してコンパイル速度を見る。
ここではtime
コマンドを使って、user時間のみを計測した。
- 使用バージョン
$ clang++ --version clang version 7.0.0 (http://llvm.org/git/clang.git 7d013cb1a231fb165b41120e8aa786b044b0b8bd) (http://llvm.org/git/llvm.git 04d15315b2afc0be0839c9d9045644841c384455) Target: x86_64-unknown-linux-gnu Thread model: posix $ zapcc++ --version clang version 6.0.0 (trunk) (https://github.com/yrnkrn/zapcc.git 2c88635dd66151adad5119c4929a81d8d428c739) Target: x86_64-unknown-linux-gnu Thread model: posix $ gcc --version gcc (GCC) 6.2.0 Copyright (C) 2016 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.
$ CC=zapcc CXX=zapcc++ cmake . && make # zapccによるビルド $ CC=clang CXX=clang++ cmake . && make # LLVMによるビルド $ CC=gcc CXX=c++ cmake . && make # gccによるビルド
それぞれ結果は以下のようになった。
なるほど、zapcc、高速だ。っていうかClangもgccより速いんですね。LLVM系列にビルド環境は移行しようかな。