LLVM is a robust system, particularly well suited for developing new mid-level language-independent analyses and optimizations. |
LLVMプロジェクトは1月6日(米国時間)にLLVMコンパイラインフラストラクチャの最新版となる「LLVM 3.4」を公開したばかりだが、プロジェクトすでに次のバージョンへ向けたさまざまな取り組みを進めている。いくつもの分野で開発が進められているが、中でも新しい最適化の機能としてPGO(Profile-Guided Optimizations:プロファイルベースの最適化機能)への取り組みが注目される。開発中のコードはGitHubで確認できる。
PGOは実行時の動作を記録しておき、その結果をコンパイルに反映させるという最適化の手法。通常使われる最適化技術ではないが、通常のバイナリよりもさらに性能の高いバイナリが必要な場合などに活用される技術。コンパイル時に静的に実施する最適化では実現することが難しい部分の最適化処理に向いている。これは特に繰り返し実施されるような分岐処理を最適化するのに適しており、多くのケースで特定の判断に偏るような分岐処理で効果的に使用できる。
LLVMコンパイラインフラストラクチャは後発のコンパイラインフラストラクチャだけあって綺麗に設計されており、さまざまなプログラミング言語に対応し、それらすべてに対して優れたコンパイル能力を提供している。さらにコンパイル時間が短いという特徴があり、多くのプロジェクトがLLVMの活用に取り組んでいる。一方、OSS開発においてこれまでも主役として活躍してきたGCCは生成するバイナリの性能が優れている傾向があり、一部の処理ではLLVMよりも常に高速なコードを生成し続けている。
LLVMは今後さらに最適化技術の実装を進め、どういった処理においてもGCCと同じ性能またはGCCを超える性能のバイナリを生成できるようにすることが望まれることになる。