この質問をするのに適切な場所かどうかはわかりません。しかし、なぜ Appleは OpenCL/OpenGL のコードを使用llvm
し、その実装を選択したのでしょうか?? clang
それは彼らにどのような利益をもたらし、どのようにもたらしましたか? このトピックに関する私の無知を許してください、私はこれについてあまり知りません。
3 に答える
Appleは、C / C ++/ObjCおよびObjC++のGCCの代わりにClangを作成しました。LLVMの作成者は、Appleのコンパイラ部門で働いています。プロジェクトをホストするイリノイ大学との共同作業で、AppleはGCC、GDB [LLDBを参照]、libstdc ++[libc++を参照]およびいくつかの新しいプロジェクトの完全な代替品を作成しました。
GPLv3は、GCCへの貢献に対するAppleの関心を終わらせた最後の藁でした。これが、AppleがGCC4.2.xでそれを終わらせた理由です。
LLVM / Clangは、業界全体でGCCに急速に取って代わっています。
LLVMはタイトルの誤称になりました。
LLVM / Clangでサポートされている現在のターゲットハードウェア:
--Targeting ARM --Targeting CppBackend --Targeting Hexagon --Targeting Mips --Targeting MBlaze --Targeting MSP430 --Targeting NVPTX --Targeting PowerPC --Targeting Sparc --Targeting X86 --Targeting XCore --Clang version:3.3
すぐにすぐに使えるAMDR600コードベースが追加されました。
ClangはC99に準拠しています。OpenCLはC99のサブセットを使用します。Clangは、無料で入手できる最も完全なC11準拠のコンパイラスイートです。
FreeBSDは、今後の10.0ディストリビューションのデフォルト設定としてLLVM/Clangに移行しました。
AMDとNvidiaは、LLVM/Clangを使用してOpenCLスタックを構築します。
IntelはOpenCLなどをLLVM/Clangに移行しています。
GoogleはLLVM/Clangに全面的に取り組んでいます。Adobe、Sony、IBM、Crayなどの同上。
GCCはアーキテクチャの混乱です。LLVM / Clangのモジュール性により、開発者の改善率とオプションの上限がはるかに大きくなります。
LLVM / Clang 3.2の開発者ガイドとユーザーガイドは非常に堅実になり、3.3トランクでは、LLVM/Clangの利点を理解するためにはるかに多くのドキュメントが追加されています。
高品質のコンパイラコードの開発のペースは他の追随を許しません。
LLVM は、実行時に 2 つの異なる方法で使用されます。
固定機能の頂点処理パイプライン内でのランタイム コードの特殊化。基本的に、OpenGL パイプラインには多くのパラメーター (フォグが有効かどうか、頂点にテクスチャ情報があるかどうかなど) があり、ほとんど変更されません。これを解決するために、コードは LLVM .bc 形式にプリコンパイルされ、そこからコードの特殊化が行われ、最適化され、実行時に必要に応じて JIT コンパイルされます。
OpenGL 頂点シェーダーは、高度にドメイン固有の機能 (内積、テクスチャ ルックアップなど) を備えたプログラミング言語のファミリを使用して記述された小さなプログラムです。実行時に、OpenGL スタックは頂点プログラムを LLVM 形式に変換し、LLVM オプティマイザ パスを実行してから、コードを JIT コンパイルします。
(詳しくは上記リンク先で)
それらはClang/LLVMの開発に貢献し、LLVM/ClangでコンパイルされたソースコードはGCCよりも高速なバイナリを生成するためです...
Clangの開発者は、GCCなどの競合するコンパイラと比較して、メモリフットプリントが削減され、コンパイル速度が向上すると主張しています。彼らの主張を裏付けるために、2007年10月の時点で、ClangはGCCの約6分の1のメモリとディスク容量を使用しながら、GCCの2倍をはるかに超える速度でCarbonライブラリをコンパイルしたことを示しています。