前の投稿で Gallium3D について調べましたが、何のことやらさっぱり分かりません。
大いに間違ってる可能性があると前置きしつつ Gallium3D について自分の理解を整理したブログ書き込みを見つけたので読んでみると、
- Gallium3D はドライバとアプリケーションやライブラリとの間に立つ非常に汎用的な抽象レイヤ。
- 現在ドライバに実装されている数多くの機能が Gallium3D などの方で提供されるようになるため、ドライバの開発が簡単になる。
- Gallium3D はソフトウェア・グラフィックカードのように振る舞う。
- 実際のハードウェアに酷似していて、なおかつ Low Level Virtual Machine (LLVM) システムを使用するので、実行速度はそれほど落ちない。
- Gallium3D はソフトウェアなので、Gallium3D と対話するどのハードウェア上でも必要なドライバさえあれば実行可能。Gallium3D と対話するような OpenGL ライブラリを書けば、同じようにハードウェアを問わず実行可能。
- ライブラリは Gallium3D のステート・トラッカーに向けて書きさえすればよく、簡単になる。
- アプリケーション開発者も、グラフィックカードに関わらずアクセラレーションを当てにできるような独自ライブラリをアプリ専用に書くことができる。
といった感じ。
原文には LLVM に関する説明もあり。
- LLVM はコード実行時に実行に必要な次の部分だけリアルタイムかつ最適化してコンパイルするJIT(ジャスト・イン・タイム)コンパイラー機能を持っている。
- コードがコンパイルされるのでスクリプトよりも実行速度が速いのはもちろん、ユーザーの環境に最適化されるので、普通のバイナリ・コードより速い。
- LLVM には仮想マシン機能もあるので、JIT コンパイルの他、コードを直接 LLVM に流しその内部で実行させることも可能。
で、思ったんですが、なんだか Mac OS に実装されてる機能に似たものなのかなぁと。
新Mac OS X「Snow Leopard」を徹底解剖 「write once run anywhere」の思想
CoreImageは、Mac OSX上でGPUに依存しない共通のAPIを提供し、アプリケーションが「gslang」で記述されたフィルターを実行する際、メーカーが異なる各種GPUのシェーダのコードにコンパイル/最適化した上で送付している(なお、このCoreImage のコードの最適化にはオープンソースのコンパイラである「LLVM」を利用している)。
Core Imageで体験 – Mac OS Xの高速画像処理
このようなミドルレイヤを導入する目的は、アプリケーションのためにAPIを提供する事と、ハードウェアの違いを吸収するためだ。