LLVMリンク集
最近何かと話題のLLVM(low-level virtual machine)。 今回はLLVM初心者が、どうしてLLVMが魅力的と思ったか、 幾つかリンクを紹介する形でまとめます。
リンク集
LLVM フレームワークで実用的なコンパイラーを作成する: 第 1 回
早速ですが、紹介記事です。曰く:
LLVM (Low Level Virtual Machine) は、 任意のプログラミング言語で作成されたプログラムを コンパイル時、リンク時、実行時に最適化するために設計された、 極めて強力なコンパイラー・インフラストラクチャー・フレームワークです。 LLVM は多岐に渡るプラットフォームで動作し、 その最大の特徴である、高速に実行されるコードを生成します。
つまりC/C++に限らず、様々な言語で書かれたコードを それぞれのプラットフォームに最適化されたバイナリにコンパイルする事ができます。
コンパイラが存在するDはともかく、 PythonやLuaをネイティブコードに変換できる事は非常に魅力的に思えます。
またGCCをフロントエンドとして使用できるため、GCCでサポートされている
- C
- C++
- Objective-C
- Objective-C++
- Fortran
- Java
- Ada
- Go
で書かれたコードは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でも同様の取り組み(?)が有る様です:
- LIBCLC: An OpenCL C Library Implementation: (Phoronixの紹介記事)
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
のようにおよそ半年毎にリリースがあります。
最後に
今後は公式のドキュメントを元に勉強していこうと思います。