Movatterモバイル変換


[0]ホーム

URL:


コンテンツにスキップ
Wikipedia
検索

LLVM

出典: フリー百科事典『ウィキペディア(Wikipedia)』
この記事は検証可能参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。このテンプレートの使い方
出典検索?"LLVM" – ニュース ·書籍 ·スカラー ·CiNii ·J-STAGE ·NDL ·dlib.jp ·ジャパンサーチ ·TWL
(2025年12月)
LLVM
作者Vikram Adve, Chris Lattner
開発元LLVM Developer Group
初版2003年 (23年前) (2003)
最新版21.1.8[1] ウィキデータを編集 -エラー: 最初のパラメータの文字列長が想定外です。 (エラー: 最初のパラメータを日付や時間として解析することができません。)
リポジトリウィキデータを編集
プログラミング
言語
C++
プラットフォームクロスプラットフォーム
種別コンパイラ基盤
ライセンスイリノイ大学/NCSAオープンソースライセンス
LLVM例外付きApache License 2.0(バージョン9.0.0以降[2]
公式サイトllvm.org
テンプレートを表示

LLVM(エルエルヴィーエム、またはエルエルブイエム)とは、コンパイル時、リンク時、実行時などあらゆる時点でプログラムを最適化するよう設計された、任意のプログラミング言語に対応可能なコンパイラ基盤である。当初は、LLVMの名称の由来は、Low Level Virtual Machine (低水準仮想マシン) のであるとしていたが[3]、現在は、何の頭文字でもないとしている[4]

概要

[ソースを編集]

LLVMは、プラットフォームに依存しない中間表現であるLLVM-IRを生成し、LLVM-IRを特定のマシンの機械語などに変換する。LLVM-IRの段階で、言語やプラットフォームとは独立した最適化を行う。この方法によってLLVMは言語からもアーキテクチャからも独立しており、それぞれに特化した、プログラミング言語固有のモジュールと、マシン向けコード生成部を用意することにより様々な言語アーキテクチャーに対応する。LLVMは積極的にプロシージャ間最適化を行うとともに、静的コンパイラとしてもJITコンパイラとしても使え、開発の様々な段階で使える多数の部品を持っている(JavaバイトコードCILフロントエンド、Pythonフロントエンド、グラフ彩色式のレジスタ割り付けモジュール、など)。JITコンパイラの場合、実行時に不要な静的分岐を最適化する機能があり、これはプログラムが様々な実行時オプションを持っている場合、強力な最適化手法(部分評価)となる。このため、Mac OS X v10.5ではこれを使ってハードウェア機能がない場合にOpenGLパイプラインを実現している。

LLVM自体はC++で書かれており、イリノイ大学Vikram AdveChris Lattnerにより2000年に開発が開始されたものである。ライセンス条件はイリノイ大学/NCSAオープンソースライセンス[5]であり、これはBSDライセンスによく似たOSI認証ライセンスである。バージョン9.0.0からはライセンスがLLVM例外付きApache License 2.0に変更された[2]

LLVM IR及びビットコード

[ソースを編集]

LLVMは言語から独立した命令セット型システムを持つ。命令の多くは3番地コード形式に似ている。各命令はまた静的単一代入形でもあり、変数(型付きレジスタ)は一回代入されるとその後は変更されない。このため、変数間の依存関係の解析が単純化される。

型変換は、どういう形式であっても明示的にcast 命令を使って行われる。LLVMの持つ基本型はいくつかの固定長の整数型であり、派生型としてポインタ配列(任意のデータ型を格納可能な配列)、ベクトル(整数浮動小数、ポインタのみ格納可能な配列)、構造体関数の5つがある。具体的な言語で構築される型は、LLVM上ではこれらの型を組み合わせて表現される。例えば、C++におけるクラスは、構造体と関数と関数へのポインタの配列を組み合わせて表現される。

MLIR

[ソースを編集]
→「en:MLIR (software)」も参照

MLIR (Multi-Level IR) は特定用途に向けて LLVM IR を拡張するための方言を作る試みである。MLIRではLLVM IR自体も「llvm」方言となっている[6]。また一部のアーキテクチャ固有のSIMD/SIMT命令も方言となっており、これには例えばx86アーキテクチャのための「x86vector」方言や「amx」方言、ARMアーキテクチャのための「arm_neon」方言や「arm_sve」方言、NVIDIA GPUアーキテクチャ (PTX) のための「nvvm」方言、AMD GPUアーキテクチャのための「rocdl」方言などが存在する[7][8]

その他のMLIRの方言には例えばOpenMPのための「omp」方言[9]OpenACCのための「acc」方言[10]CUDAOpenCLなどのための「gpu」方言[11]VulkanOpenCLに使われる中間言語SPIR-V英語版のためのSPIR-V方言[12]が存在する。

また高度なベクトル/行列操作などの機械学習のために使われる様々な方言も存在する(TOSA方言、vector方言、Linalg方言、affine方言など)。外部定義の方言も存在し、そのうちの一つ、GoogleのTensorFlowプロジェクトによるMHLO方言[1]はTensorFlowだけでなくJAX[13]Torch-MLIR[14]など広く使われるようになった。その後、Googleは他のビッグ・テック企業と共にOpenXLAプロジェクトを立ち上げ[15]、そのOpenXLAはTensorFlowから独立したものとしてStableHLO方言の開発を開始した[16]

また、PyTorch 2.0のTorchDynamoの標準バックエンド「TorchInductor」で使われてるOpenAI Triton[17]は2.0でバックエンドをMLIRへと移行し[18]、そこで独自のTriton方言およびTritonGPU方言を使用している[19]

フロントエンド

[ソースを編集]

dragonegg

[ソースを編集]

LLVMは、もともと既存のGCCスタック用のものより積極的な最適化を行う高性能のシステムとして開発され、GCCフロントエンドがLLVMと動作するように修正された。現在では、GCC 4.6から派生したフロントエンド(dragonegg)を用いてC言語C++FORTRANAdaをサポートし、Objective-C、Objective-C++、Goがおおむね動くとしている。

Clang

[ソースを編集]
→詳細は「Clang」を参照

しかし、LLVMへの興味が広がるにつれ、まったく新しいフロントエンドを多数のプログラミング言語向けに開発しようという動きが出てきた。もっとも注目されているのはC、C++、Objective-C、Objective-C++をサポートする新しいコンパイラClangである。主にAppleのサポートを受け、ClangはGCCシステムのC/C++/Objective-C/Objective-C++コンパイラを統合開発環境と統合できマルチスレッドをサポートした現代的なシステムで置き換えることを目指している[20]。GCCでのObjective-C/Objective-C++の開発は衰退気味で、アップルが施した変更は別個にメンテナンスされている。アップルにとっては、自社でコンパイラを開発することにより、第一のObjective-C/Objective-C++実装であり続けながら、LLVMがすでに達成している統合開発環境への統合やその他の現代的な機能への対応といった問題を解決することができる。

Flang

[ソースを編集]

Flangは LLVM Project のFORTRAN コンパイラである。旧来の Flang はNVIDIA の nvfortran(元The Portland Group社のpgfortran)の派生であったが、f18プロジェクトとして開発された次世代 Flang は C++17 や MLIR などの新しい技術を採用している[21]

Torch-MLIR

[ソースを編集]

Torch-MLIR は機械学習に使われるPyTorch 向けのコンパイラとなっている。元々はnpcompであり[22]NumPyのコンパイラであった。

Polygeist

[ソースを編集]

Polygeistは旧来の LLVM IR の代わりに MLIR を用いた実験的なC/C++コンパイラである。MLIR を用いることによって多面体最適化が可能となっている[23]。C/C++からCUDAへのコンパイルも可能となっている。

標準C++ライブラリ

[ソースを編集]

GNUはlibstdc++という標準C++ライブラリを開発しているが、LLVMも独自のlibc++という標準C++ライブラリを開発している。

参照

[ソースを編集]
  1. ^LLVM 21.1.8” (2025年12月16日). 2025年12月16日閲覧。
  2. ^abLICENSE.TXT”. llvm.org. 2019年9月24日閲覧。
  3. ^The LLVM Compiler Infrastructure Project”. 2004年5月3日時点のオリジナルよりアーカイブ。2019年1月16日閲覧。
  4. ^The LLVM Compiler Infrastructure Project”. llvm.org. 2019年1月16日閲覧。
  5. ^The University of Illinois/NCSA Open Source License (NCSA) - Open Source Initiative
  6. ^'llvm' Dialect LLVM Project
  7. ^Composable and Modular Code Generation in MLIR p.6-7 Google 2022年
  8. ^IRDL: An IR Definition Language for SSA Compilers p.206 Mathieu Fehrら 2022年
  9. ^'omp' Dialect LLVM Project
  10. ^'acc' Dialect LLVM Project
  11. ^'gpu' Dialect LLVM Project
  12. ^SPIR-V Dialect LLVM Project
  13. ^Change log - jaxlib 0.1.76 (Jan 27, 2022) Google
  14. ^Torch-MLIR p.21 Sean Silva、Anush Elangovan 2021年
  15. ^Google reveals what’s next for Cloud AI VentureBeat 2022年10月11日
  16. ^Open source collaborations and key partnerships to help accelerate AI innovation Google 2022年10月12日
  17. ^PyTorch 2.0 PyTorch Foundation
  18. ^Triton - Changelog OpenAI
  19. ^Towards Agile Development of Efficient Deep Learning Operators p.41 Keren Zhou & Philippe Tillet
  20. ^New LLVM C Front-end (Steve Naroff)
  21. ^OpenMP in Flang : An IntroARM 2022年
  22. ^Torch-MLIR p.2 Sean Silva、Anush Elangovan 2021年
  23. ^William S. Mosesら『Polygeist: Raising C to Polyhedral MLIR』 IEEE 2021年

関連項目

[ソースを編集]

外部リンク

[ソースを編集]
全般
解説
開発
OS英語版
ソフトウェア
ホスティング
団体
標準化団体
開発支援団体
ライセンス
指針
主要例
その他
課題
特性上の課題
対立と論争
その他
一覧
全体
プラットフォームの
仮想化
仮想マシン
ハードウェアレベル
ソフトウェアレベル
言語レベル
リソースの仮想化
CPU
メインメモリ
ディスク装置
ネットワーク
その他
カテゴリカテゴリ
https://ja.wikipedia.org/w/index.php?title=LLVM&oldid=107527279」から取得
カテゴリ:
隠しカテゴリ:

[8]ページ先頭

©2009-2026 Movatter.jp