昨今、キーワードとしてはよく耳にする「OpenCL」。
SIGGRAPH ASIA 2009、会期初日には、そのOpenCL基本情報およびその最新事情をまとめたチュートリアル的セッション「OpenCL:Parallel Programming for Computing and Graphics」が開催された。
OpenCLのプログラミングモデル
OpenCLは現在ver.1.0が現行バージョンで、アップルのMac OS X Snow Leopardはこれをシステムに統合している。Windows環境下向けとしてはNVIDIAがリリース版、AMDがベータ版をリリースしているという状況だ。早速次世代版の規格策定も進んでおり、OpenCL 1.1は2010年のSIGGRAPH 2010の夏のタイミングにリリースされる予定となっている。OpenCL 2.0についても規格策定が開始されており、これは2012年頃のリリース予定だと告知された。
さて、OpenCLでは、基本概念として図のようなプラットフォームモデルを規定している。
図中のHostはCPUのこと、そしてComputeDeviceはGPUのこと……と思ってもらって差し支えない。OpenCLでは1個のホストと一個か複数ComputeDeviceをターゲットとしている。複数ということは……そう、マルチGPUにも対応しているということだ。
ComputeDeviceは1基か複数のComputeUnitを持っており、ComputeUnitは1基か複数のProcessingElementを持っている。たとえば身近なグラフィックスカードで喩えるとCopmuteDeviceがグラフィックスカード、ProcessingElementがシェーダユニット、CopmuteUnitが複数のシェーダユニットをまとめたシェーダアレイに相当する。