FreeBSD Daily Topics

2013年2月8日LLVM Clang 3.1とGCC 4.2.1の性能比較

benchmarks

FreeBSD 9.1: LLVM/Clang Battling GCC

PhoronixにPC-BSD 9.1 "Isotope" amd64(FreeBSD)においてLLVM Clang 3.1とGCC 4.2.1でコンパイルしたソフトウェアのベンチマーク結果が掲載(FreeBSD 9.1: LLVM/Clang Battling GCC)されました。興味深い内容です。

FreeBSDはFreeBSD 10.0-RELEASEの段階でLLVM Clangをシステムのデフォルトコンパイラにする方向で作業を進めています。次のように10-CURRENTのcc(1)はLLVM Clang 3.2に変更されています。

# cc --version
FreeBSD clang version 3.2 (tags/RELEASE_32/final 170710) 20121221
Target: x86_64-unknown-freebsd10.0
Thread model: posix
# clang --version
FreeBSD clang version 3.2 (tags/RELEASE_32/final 170710) 20121221
Target: x86_64-unknown-freebsd10.0
Thread model: posix
# gcc --version
gcc (GCC) 4.2.1 20070831 patched [FreeBSD]
Copyright (C) 2007 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.

#

先日リリースされた9.1-RELEASEではGCC 4.2.1がデフォルトのコンパイラとなっていますが、LLVM Clang 3.1もインストールされます。Phoronixに掲載されたFreeBSD 9.1: LLVM/Clang Battling GCCは、FreeBSD 9.1-RELEASEにデフォルトインストールされる2つのコンパイラの性能を比較する、といった趣向になっています。

# cc --version
cc (GCC) 4.2.1 20070831 patched [FreeBSD]
Copyright (C) 2007 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.

# clang --version
FreeBSD clang version 3.1 (branches/release_31 156863) 20120523
Target: x86_64-unknown-freebsd9.0
Thread model: posix
# gcc --version
gcc (GCC) 4.2.1 20070831 patched [FreeBSD]
Copyright (C) 2007 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.

#

詳細は結果はPhoronixの記事をご覧いただきたいのですが、簡単にまとめると、LLVM ClangはOpenMPに対応していないため、OpenMPを使用するソフトウェアでは性能を発揮できないが、それ以外ではほぼGCC 4.2.1よりも良好な結果を出している、というものになります。

GCC 4.2.1がリリースされたのは2007年で、Clangは2012年ですから、こうした結果になるのは妥当なところです。FreeBSD的な視点からみた場合、GCC 4.2.1からClangへ移行することで、少なくとも性能が劣化するといったことはないように見えます。

GCC 4.8や4.7などより最新のGCCとの性能を比較した記事はLLVM/Clang 3.2 Compiler Competing With GCCに掲載されています。OpenMPに対応していないため、 OpenMPを使用するソフトウェアではLLVM Clangの結果が劣るものの、それ以外の項目ではClangが速かったりGCCが速かったりどっこいどっこいの結果になっています。

LLVM ClangはライセンスがBSDライセンスであるため、高性能アプライアンスや組み込み機器などでFreeBSDを利用する場合にベンダの受けがよいという特徴があるほか、メモリが少ない状況でGCCよりもコンパイル時間が短くて済むといわれています。

この手のベンチマークは使用するプロセッサの種類(Core i7なのか、Xeonなのか、Opteronなのか、などなど)が変わると、結構結果も変わります。ですので1つの指針ということにしかなりませんが、なかなか興味深い結果です。

おすすめ記事

記事・ニュース一覧