Tileraのタイルプロセサ

MITで長らくマルチプロセサを研究してきたAnant Agarwal教授が、その研究の商用化を目指して作ったのがTileraという会社である。その名のように、タイルのようにプロセサコアを敷き詰めるメニーコアのプロセサを商用化している。

次の図7.4は、同社の2007年のHot Chips 19における発表資料からの抜粋で、64個のノードが8×8のタイル状に配置され、2次元メッシュで接続されている。それぞれのノードには、プロセサコアと2次キャッシュ、これらを4方向の隣接ノードと接続するスイッチが含まれている。そして、2次元メッシュの上下の辺は合計4つのDDR2 DRAMコントローラに接続されており、左右の辺はPCI ExpressやネットワークインタフェースであるXAUIなどのI/Oインタフェースコントローラに接続されている。

図7.4 Tileraの64コアプロセサのブロックダイヤグラム (出典:Tileraの2007年のHot Chips 19での発表資料)

なお、同社はTile-Gxという第3世代のタイルプロセサを発表しており、このシリーズでは最大100コアを集積する計画である。

図7.5はTILE64プロセサの3×3のノード部分の接続を詳しく書いたもので、ノード間は、UDN(User Dynamic Network)、IDN(I/O Dynamic Network)、STN(Static Network)、MDN(Memory Dynamic Network)、TDN(Tile Dynamic Network)という5種の双方向32bit幅のネットワークで結ばれている。なお、名前にDynamicが付いているネットワークはパケットでデータ伝送を行い、異なる宛先のパケットが混在して流れる。

パケットには宛先のX、Y座標とデータの長さが書かれ、それに続いて、最大128ワード(32bit/Word)のデータを送ることが出来るようになっている。

パケットの伝送は次元ルーティングを行っており、以前と同じ方向に直進する場合のスイッチの通過時間は1クロックであるが、方向を変える場合はスイッチの通過に2クロックを必要とする。

一方、Staticと書かれたSTNは送信元と宛先のノードを決めてセットアップを行うと経路が固定的に確保されるネットワークで、連続的に大量のストリームデータを送ることができる。

Tileraのメニーコアプロセサは、L3キャッシュとディレクトリを各タイルに分散させる形式のディレクトリ方式のキャッシュコヒーレンス機構を使っていると推測される。プロセサコアがメモリのRead/Write命令を実行して、自分の2次キャッシュにはそのデータが無くキャシュミスとなると、2次キャッシュはTDNを使ってホームノードのキャッシュにアクセス要求を送る。そして、アクセスしたデータはMDNを使って送り返される。このようにアクセス要求と応答に独立のネットワークを使うことにより、デッドロックが発生しないようにしている。

IDNはI/Oコントローラとの接続に用いるネットワークで、I/Oコントローラの制御情報やI/Oデータをパケットに入れてやり取りを行う。

図7.5 Tileraの2次元メッシュの詳細 (出典:IEEE Micro 2007年9-10月号のTileraの論文)

UDNはユーザアプリが自由に使えるネットワークで、OSに処理を依頼したり、割り込みを使って応答を受け取るオーバヘッドなしにユーザアプリがUDNのインタフェースレジスタを直接操作して通信を行うことができるようになっている。

STNやUDNは1つのユーザ(プロセス)にネットワーク資源が占有されてしまうが、データ伝送にかかるオーバヘッドは小さく、うまく使えば高い処理性能を実現することができる。

各ノードのネットワーク1つ分のスイッチは、図7.6のような構造になっており、5ポートのクロスバを中心に、各ポートの入力側には4段のFIFOが付いており、フローコントロールのためのバッファリングを行っている。

図7.6 Tileraのスイッチの構造 (出典:IEEE Micro 2007年9-10月号のTileraの論文)

Tileraのスイッチは出力レジスタを持たず、出力レジスタの空き情報に替えてデータを送る隣接ノードの入力バッファの空き情報を利用することで、通過時間を1サイクル節約している。また、データの直進を想定してクロスバの接続を設定して置き、直進と同一出力ポートを競合する要求がなく、次の入力バッファがデータを受け取れることだけを確認すると、データにクロスバを通過させるというようなやり方で、1サイクルのスイッチ通過時間を実現していると考えられる。そして、進行方向が変わるなど、想定した条件が満たされない場合は、もう1サイクルを必要としている。

TILE64プロセサのL2キャッシュの使い方は独特である。システムソフトウェアで、メモリアドレスとホームタイルの対応を決めている。どの程度うまく行くのかは分からないが、キャッシュミスが起こった時、ホームタイルが近くにあるような割り当てができれば性能的に有利なことは間違いない。

また、各タイルのL2キャッシュアレイは、そのタイルのプライベートL2キャッシュとグローバルなL3キャッシュ+ディレクトリの両方に分割して使用される。アクセスしようとするアドレスを含むページがページテーブルでローカルとマークされている場合は、ローカルのL2キャッシュをアクセスし、リモートとマークされている場合はTDNを通して、そのアドレスを担当するホームタイルにアクセス要求を送る。そして、ホームタイルはL3キャッシュ+ディレクトリを使ってデータの供給とコヒーレンスの維持を行う。

1つのプロセサコアで動作するプロセスが自分だけで使うメモリページはローカルとマークすれば、自分のタイル内のキャッシュが使われるので7サイクルと高速にアクセスできる。一方、他のタイルのコアと共用するメモリページはリモートとマークすれば、TDN-MDNを経由してホームタイルのL3キャッシュにアクセスすることになる。この場合も最大で32サイクル、平均的には16サイクルのネットワーク遅延がベースの7サイクルに加わり平均23サイクル程度でアクセスでき、通常のプロセサの3次キャッシュ並みの時間でアクセスすることができる。