図1 FOXCの構成。緑色の長方形がデータを表し,青色の楕円形が機能要素を表す。OpenCLの規約に沿って開発したプログラムを入力すると,「Parser / Analyzer」の部分で構文を解釈し,「OpenCL Translator / Optimizer」の部分でプロセサに合わせた演算方法の変更などを行う。その結果を基に「C99 Pretty Printer」がC言語のソース・コードを出力し,それぞれのプロセサ用コンパイラに引き渡す。
図1 FOXCの構成。緑色の長方形がデータを表し,青色の楕円形が機能要素を表す。OpenCLの規約に沿って開発したプログラムを入力すると,「Parser / Analyzer」の部分で構文を解釈し,「OpenCL Translator / Optimizer」の部分でプロセサに合わせた演算方法の変更などを行う。その結果を基に「C99 Pretty Printer」がC言語のソース・コードを出力し,それぞれのプロセサ用コンパイラに引き渡す。
[画像のクリックで拡大表示]

 フィックスターズは,ヘテロジニアス・コンピューティング用の標準API「OpenCL」に対応するコンパイラ「FOXC(フォクシー,Fixstars OpenCL Cross Compiler)」を開発中であることを明らかにした。OpenCLの規約に沿って記述したプログラムを入力すると,メイン・プロセサと,アクセラレータとして利用するプロセサに向けたC言語のプログラムを出力し,それぞれのプロセサ用のコンパイラにプログラムを引き渡すものである。

 OpenCLは,メイン・プロセサと,アクセラレータとして利用するプロセサを組み合わせて処理を実行する,ヘテロジニアス(異種)構成のコンピューティング環境に向けた標準API。GPUを汎用計算に利用する「GPGPU」や,マルチコア型マイクロプロセサなどの構成を想定して,業界団体のKhronos Groupが策定した(Tech-On!の関連記事日経エレクトロニクス誌の関連記事)。一度OpenCLの規約に沿ってプログラムを記述しておくと,プロセサの組み合わせが変わってもそのプログラムを実行できるようにすることを狙っている。

 FOXCは,ソース・コードをオブジェクト・コードに変換する,厳密な意味での「コンパイラ」ではない。OpenCLの構文を解釈し,アクセラレータとしてどのプロセサを利用するかを踏まえて最適化したC言語のソース・コードを出力する(図1)。メイン・プロセサとアクセラレータのそれぞれで実行するオブジェクト・コードは,それぞれのプロセサ専用のコンパイラで生成する。

 フィックスターズは,まず,米Intel Corp.のマルチコア型マイクロプロセサに向けたFOXCを開発する。例えば,4コアのマイクロプロセサを利用したときに,1コアをホストとして利用し,残りの3コアをアクセラレータとして利用するといった構成を想定する。アクセラレータ側では浮動小数点演算向けの拡張命令である「SSE(streaming SIMD extensions)」を有効活用するようにソース・コードを出力する。

 フィックスターズは2009年第3四半期までに,この構成に向けたFOXCを完成させる計画。その後,ホストにCoreアーキテクチャのプロセサ,アクセラレータにPCI Expressインタフェースで接続した「Cell Broadband Engine」やグラフィックス描画LSI(GPU)を利用する構成に向けたFOXCを開発する予定である。「OpenCLの構文を解釈する部分と,C言語のソース・コードを出力する部分は変わらない。Intelプロセサ版でSSE命令を有効活用させるといった,アクセラレータ用プロセサのアーキテクチャに合わせて演算方法などを変える部分が異なるだけ」(フィックスターズ プラットフォーム事業部 事業部長の浅原明広氏)であり,FOXCのフレームワークは様々なプロセサ構成に応用できるという。

 FOXCの提供方法は未定である。フィックスターズは,アクセラレータとして利用可能なプロセサのメーカーなどからOpenCLコンパイラの開発を受託することも想定している。