predicationの例。条件に合う配列要素だけを計算しつつ,並列性を維持している。
predicationの例。条件に合う配列要素だけを計算しつつ,並列性を維持している。
[画像のクリックで拡大表示]
gatherの例。配列形式のデータから必要な情報を取り出して計算している
gatherの例。配列形式のデータから必要な情報を取り出して計算している
[画像のクリックで拡大表示]

 米Intel Corp.は「Game Developers Conference(GDC)」のセッションで,開発中のグラフィックス・プロセサ「Larrabee」(開発コード名)の命令セットを解説した。

 Larrabeeはベクトル演算機能を追加したPentiumコアを多数並べ,リング状の2次キャッシュを介してコアを接続するアーキテクチャを採用している(Tech-On!関連記事)。このため,グラフィックス処理だけでなく,OSなどもLarrabeeで動作させることができる。専用のシェーダー・ハードウエアを持たずに,すべてソフトウエアで処理する点が特徴だ。ベクトル演算器はコアごとに16個備えている。「ベクトル演算の機能は一通りそろっている」(Larrabee ArchitectのTom Forsyth氏)。

 Larrabee命令セットの多くは,「SOA(structure over array)」に基づいている。通常ベクトル形式のデータは,配列(Array)で表現される。このため,プログラマがデータを保持するときは,AOS(array of structure)で考えることが多い。しかし演算器の利用効率が低く,並列性を高めにくい。プログラミングの観点からすると,SOAの方が普通のスカラー演算と同じ形で表現できるため,理解しやすく記述しやすい。こうしたことからLarrabeeでは,一部の命令はAOSだが,ほとんどはSOAに基づいた命令となっている。

 ただしSOA型の命令を採用した結果,常に16個の演算を同時に並行して実行しなければならない。これを有効に利用するため,「predication」という考え方が導入された。predicationは,計算結果を格納するかしないかのマスクなどに使う。これによって,条件に合った要素のみを計算するような場合でも,並列性を保ったまま計算できる。

 またプログラムの処理としてはSOAが素直であっても,データ表現としてはAOSが素直であるため,両者の間でデータ形式を変換する機能も備えた。これが「gather」「scatter」である。gather/scatterによる変換を活用することで,粗な行列の計算量を圧縮することも可能であるという。