各x86コアは初代Pentiumのデータパラレルコンピューティング向けに近代的拡張を施した形態

下の図がLarrabeeの全体ブロックダイアグラムになる。

Larrabeeの全体ブロックダイアグラム

黄色い箱1つ1つがx86コアになり、これが複数個実装される。この個数自体は「様々なコンフィギュレーションが可能である」という曖昧な説明に終始し、Intel側としては具体的に何コアの製品を出すのかはまだ発表を控えたいということのようだ。

各x86コアのベースとなっているのは初代Pentiumコアで、インオーダー命令実行、短い実行パイプラインといった特性を受け継いでいる。ただ、そのまんま初代Pentiumというわけではなく、データ・パラレル・コンピューティング向けの各種拡張が施されてはいる(後述)。

各x86コアは時計回り、反時計回りがそれぞれ512ビット幅、合計1024ビット幅のリングバスで接続される。この構造はCELLプロセッサのSPE(Synergistic Processor Elements)によく似ている。

複数x86コアで共有されるL2キャッシュと、各x86コアが持つL2キャッシュ、ともにキャッシュシステムは完全コヒーレンシーが維持されるところがLarrabeeの特徴となっており、ここはCELLプロセッサとは大きく違う。CELLプロセッサのSPEのローカルメモリはあくまでSPEが動作するためのローカルメモリであり、ここが長所にも短所にもなっていた。Larrabeeはこの部分はCPU的な「キャッシュシステムはコヒーレンシーが保たれる」という法則を貫いた格好だ。

図中の緑色の箱の1つに「Texture Logic」というのがあるが、こちらが一般的なGPUでいうところのテクスチャユニットに相当するもので、フィルタリング処理付きのテクセル参照などを行う際にはこちらを利用することになる。

次の図はLarrabeeに複数搭載される各x86コアの1個あたりにクローズアップしたブロックダイアグラムだ。

Larrabeeの各x86コアのブロックダイアグラム

前述したようにベースアーキテクチャはPentiumだが、データパラレルコンピューティングに対応させるためと、時代に適合した改良が施されている。

まず、大きな拡張点としては、ネイティブに64ビット整数に対応しているということ。さらには図中には記載されていないが独立した4スレッドを処理できるように仕様が拡張されているとも説明された。また、ベクトルユニット全体としては、32ビットサイズのデータ16個分に対して1クロックで演算が出来るという。ここから推測するに各x86コアのベクトルユニットはSIMD(Single Instruction Multiple Data)ではなくMIMD(Multiple Instruction Multiple Data)的なポテンシャルがあると思われる。

初代PentiumにはL1キャッシュが命令8kB、データ8kBという構成だったが、Larrabeeの各x86コアではそれぞれが2kBずつと容量が小さくなっている。これは各x86コア内と外にL2キャッシュがあるため、L1キャッシュは局所的なキャッシュとして割り切っているためだ。

初代PentiumにはL2キャッシュがなかったが、Larrabeeの各x86コア内にはL2キャッシュとして256kBが実装される。各x86コア内L1キャッシュとコア内L2キャッシュ向けのプリフェッチ命令も提供され、256kBのキャッシュメモリをストリーミングバッファやスクラッチパッドメモリ(多目的ワークエリア)として利用することも出来る。このL2キャッシュの使い方の拡張はCELLプロセッサのSPEの仕組みとよく似ている。x86コア内L2キャッシュはフルコヒーレンシー維持タイプのキャッシュメモリとしても利用できるので、実行させるアプリケーションよって自在に使い分けられる。このあたりは、CELLプロセッサのSPEよりもシステム側のサポートは手厚いといえるかも知れない。

下の図はさらにLarrabeeの各x86コアのベクトルユニットにクローズアップしたブロックダイアグラムだ。

各x86コアのベクトルユニットのブロックダイアグラム

x86コア内のベクトルユニットは16個の32ビット整数ないしは32ビット浮動小数点のデータを1クロックで処理できるポテンシャルがあるが、一般的なベクトル演算器計算の能力を超越した自由度が与えられている(64ビット浮動小数点データにも対応するが、スループットは半分になる)。

具体的には16個の異なるアドレスからのデータを読み出して、これを1つのアドレスへ書き出すGather(採集)処理、逆に演算結果を16個の異なるアドレスへ書き出すScatter(拡散)処理が行える。さらに読み出したデータが8ビット長、16ビット長のデータだった場合は32ビット長に変換する事前変換処理や、取り出したベクトルデータの要素位置を交換したりといった事前変換処理にも対応する。

データ変換処理やデータ交換処理はDirectX 10世代のGPUの汎用シェーダユニットでもサポートされつつあるが、Scatter処理が可能なのはLarrabeeの最大の特長だと言える。これまでのGPUは「着目している1ピクセルが何色になるか」を計算するのが主目的のプロセッサであったため「読み出し先は複数箇所でもOKだが、書き出し先は一カ所」という制約があった。Larrabeeではこの制約がない。

各x86コアはDirectX 10世代GPUにおける汎用シェーダユニットに相当するイメージになるが、異なる点は多い。

Larrabeeと現行GPUとの違い

まず、各x86コアは本当に拡張版PentiumのCPUとしてフルポテンシャルが与えられているという点だ。仮想メモリもサポートされるし、ページスワップもサポートされる。割り込み処理が入ればコンテクストスイッチングもなされる。そして前述したようにキャッシュシステムはコヒーレンシー維持がなされ、その上で各x86コアが連動動作出来る仕組みが提供される。

そしてLarrabeeにはGPUでは当たり前のように搭載されている、定番の各種専用ロジックが搭載されていない。具体的には、ラスタライザユニット、レンダーバックエンド(ブレンダー)が搭載されていない。Larrabeeでグラフィックスパイプラインを実践するためには、この部分はソフトウェア記述する必要がある。

前述したようにテクスチャユニットだけはGPU的な専用ユニット(テクスチャサンプラ)が実装されるが、x86コアから見るとメモリコントローラの上層ユニットである補助ユニットになるため、当然、仮想メモリに配慮したアクセスがなされる。未だに現行GPUでは実現なされていない、仮想テクスチャメモリの仕組みがネイティブに実現されることになる。