LLVMリンク集

最近何かと話題のLLVM(low-level virtual machine)。 今回はLLVM初心者が、どうしてLLVMが魅力的と思ったか、 幾つかリンクを紹介する形でまとめます。

リンク集

LLVM フレームワークで実用的なコンパイラーを作成する: 第 1 回

早速ですが、紹介記事です。曰く:

LLVM (Low Level Virtual Machine) は、 任意のプログラミング言語で作成されたプログラムを コンパイル時、リンク時、実行時に最適化するために設計された、 極めて強力なコンパイラー・インフラストラクチャーフレームワークです。 LLVM は多岐に渡るプラットフォームで動作し、 その最大の特徴である、高速に実行されるコードを生成します。

つまりC/C++に限らず、様々な言語で書かれたコードを それぞれのプラットフォームに最適化されたバイナリにコンパイルする事ができます。

実際にLLVMに基づいたコンパイラが多数開発さています。

コンパイラが存在するDはともかく、 PythonLuaをネイティブコードに変換できる事は非常に魅力的に思えます。

またGCCをフロントエンドとして使用できるため、GCCでサポートされている

で書かれたコードはLLVMの中間表現であるLLVM IRにコンパイルする事ができ、 LLVMの最適化の恩恵を受けられます。 もっともこれらの場合、GCCにより最適化されたバイナリを既に使用できるのですが。

この記事はツール(lli, llvm-config, etc.)の使い方、 LLVM APIによる中間コード(IR)の自動生成までを解説しています。

CUDA LLVM Compiler

nVidiaによるGPGPUのためのフレームワークであるCUDAのコンパイラnvccはLLVMに基づいています。

任意の言語で書いたコードをLLVM IR(正確にはそのサブセットであるNVVM)に変換できれば、 nVidiaの提供するNVVMからPTX(GPU用の低級言語)への変換用バックエンドを用いて GPU上で動作するバイナリを生成する事ができます。

つまりCUDAのような少し特殊な言語を使用せずに、 通常のC/C++GPU用のコードに変換しうるという事です。 実際にFortranで実行している猛者がいます:

また直接NVVM書いている人もいます:

CUDAだけでなくOpenCLでも同様の取り組み(?)が有る様です:

The LLVM Compiler Infrastructure Project

本家のHPです。ニュースやダウンロードはこちらから確認します。 LLVMは非常に活発に開発されており、

  • 2014/01/02 3.4 (最新)
  • 2013/07/17 3.3
  • 2012/12/20 3.2
  • 2012/05/22 3.1
  • 2011/12/01 3.0

のようにおよそ半年毎にリリースがあります。

最後に

今後は公式のドキュメントを元に勉強していこうと思います。