玩式草子─ソフトウェアとたわむれる日々

第50回 X,MesaそしてLLVM[その1]

この記事を読むのに必要な時間:およそ 5 分

秋分の日を過ぎると,日中の日射しには厳しさが残るものの,朝晩は肌寒いくらいになってきました。発熱量が大きくて暑い時期には敬遠していた開発用のマシンに電源が入ることも多くなり,Plamo-5.2へ向けたパッケージ作りの作業に励む日々が続いています。

Plamo-5.2は,今年の5月下旬にリリースしたPlamo-5.1に続くPlamo-5系統の2度目のメンテナンスリリースで,5.1では拾えなかったり,5.1以後にアップデートされたソフトウェアに対応して,年内には公開したいと考えています。

今の予定では,Plamo-5系統はPlamo-5.2を最終バージョンとし,その次はGCCやGlibc等の基幹ソフトウェアを更新したメジャーバージョンアップにするつもりです。

現在,Plamo-5.2用のツリーでは仮想化関係のパッケージの更新が盛んで,仮想化回りの機能はPlamo-5.2の特長のひとつになりそうです。しかし仮想化回りについてはまた別の機会にとりあげることにして,しばらくはPlamo-5.1では拾い損なったX Window Systemとその基盤のひとつとなっている3Dグラフィックス用のMesaLibさらにそれに必要となるLLVMについて紹介してみましょう。

X Window SystemとMesaLib

X Window Systemは,マサチューセッツ工科大学(MIT)の学内コンピュータ環境をMITとIBM,DECが共同で研究開発したアテナプロジェクト(Project Athena)⁠の一部として生まれたウィンドウシステムです。そのような出自から,最初のX Window SystemはMITが中心となったMIT X Consortiumが,アテナプロジェクトの終了後は非営利な業界団体であるX Consortiumが引き継いで開発を続けてきました。その後,The Open GroupX.OrgXFree86といったさまざまな組織を経て,現在ではX.Org Foundationが管理主体となりつつ,誰でも自由に開発に参加できる「バザールモデル」の形式で開発が進んでいます。

このような開発スタイルの変化を反映して,X Window Systemのソースコードは,全てのソフトウェアをひとつのディレクトリ以下に収めていたモノリシック構造から,それぞれのライブラリやコマンドを独立したソフトウェアとして自由にビルド,インストールできるモジュール構造に変更されました。そのため,各ソフトウェアの開発テンポも従来に比べて自由度が増し,X Window Systemとしての公式なリリースは定期的に行われるものの,それぞれのソフトウェアはそれとは独立にバージョンアップを進めています。

その結果,Plamo-5.1で採用しているX11R77は,X Window Systemとしてはいまだに最新版ではあるものの,Xサーバや各ビデオカード用のドライバ,ライブラリなど構成しているパーツの中にはずいぶんバージョンが進んだものがあり,X11R77当時のバージョンは少々見劣りするようになってしまいました。

この問題には,Plamo-5.1をまとめていた際にも気がついていて,主要なパーツ(特にXサーバとドライバ類)だけでも新しいバージョンに追従しようかと考えましたが,その際に問題になったのが3Dグラフィックス機能を担当しているMesaLibでした。

MesaLibはOpenGLと呼ばれる3Dグラフィックスの仕様をOSSとして実装したライブラリで,X Window Systemも3Dグラフィックスの処理はMesaLibを利用しています。

元々,MesaLibはOpenGLが定義している3Dグラフィックス用の機能をソフトウェア的に実現しようとしたプロジェクトで,CPUで生成した画像情報をグラフィックスカードに送ってディスプレイに表示していました。しかし,グラフィックスカードに搭載されているGPU ⁠Graphics Processing Unit)の進化が進み,3Dグラフィックス機能の多くがハードウェア的に実現できるようになるにつれ,MesaLibも処理の多くをGPUにゆだねるように設計が変更されました。

厳密に言うと,プログラマブル・シェーダー等の機能をもったGPUを操作するために,従来のMesa3Dに代わるGallium3Dと言うフレームワークが開発され,最近のMesaLibはこのGallium3Dフレームワークを使うようになりました。

GPUは"Graphics Processing Unit"の名称通り,コンピュータの画面処理,特に3Dグラフィックスの処理を効率よく実現できるように設計されたマイクロプロセッサです。

3Dグラフィックスでは,オブジェクトに光がどのように当たってどのような質感や陰影が生じるのかを,オブジェクトの構成単位ごとに繰り返し計算する必要があります。そのような計算はいわゆる「並列化」することで効率が改善するので,AMD(ATI)RadeonやNVIDIAのGeForceといった最近のGPUは並列処理をきわめて高速に実行できるような設計になっています。

これらのGPUはマイクロプロセッサなので,操作するためにはGPUが理解するコマンドを送ってやる必要があります。ところが,GPUはIntelやAMDのCPUとは全く異なる設計になっているため,GPUのコマンドはCPUのコマンドと根本的に異なります。そのため,MesaLibではOpenGLの機能を実現するために必要な操作を,GPUが理解するコマンドに変換した上でグラフィックスカードに送る必要があります。

グラフィックス用に特化した設計になっているため,GPUのコマンドはCPUのコマンドほど複雑ではないものの,ある言語(OpenGL)で書かれたコードをマイクロプロセッサ(GPU)が理解するコマンドに変換する,という作業は,ドライバやライブラリではなく,本来はコンパイラがするべき仕事です。

そこで最近のMesaLibでは,LLVM(Low Level Virtual Machine)⁠と呼ばれるソフトウェアを利用して,GPUを操作するコマンドを生成するようにしています。つまり,X Window Systemのパーツ(Xサーバ)をビルドするためには,新しいMesaLib(Gallium3D)が必要で,新しいMesaLibをビルドするためにはLLVMを用意する必要があるわけです。

著者プロフィール

こじまみつひろ

Plamo Linuxとりまとめ役。もともとは人類学的にハッカー文化を研究しようとしていたものの,いつの間にかミイラ取りがミイラになってOSSの世界にどっぷりと漬かってしまいました。最近は田舎に隠棲して半農半自営な生活をしながらソフトウェアと戯れています。

URLhttp://www.linet.gr.jp/~kojima/Plamo/index.html

コメント

コメントの記入