U.C.DavisのKiloCoreプロセサ

一方のU.C. DavisのBaas教授のグループが発表した1000コアを集積するKiloCoreチップは、その名の通り1000コアを集積している。

KiloCoreを発表するU.C.DavisのBrent Bohnenstiehl氏

IBMの32nm FD-SOIプロセスを使用し、8mm×8mmのチップに621Mトランジスタを集積している。チップ写真の上側に31列32行のコアがあるが、これでは992コアにしかならないので、下辺の6+6のメモリタイル(大きめの箱)の間に8コアを追加して1000コアとしている。

KiloCoreチップのダイ写真と諸元。IBMの32nm FDSOIプロセスを使い1000コアを集積している (このレポートのすべての図は、Hot Chips 28でのBohnenstiehl氏の発表スライドのコピーである)

個々のプロセサタイルは0.055mm2で128ワード×40bitの命令メモリと256ワード16bitのデータメモリがタイルの大部分の面積を占めている。

また、後述のように、タイル間の通信は非同期になっているので、FIFOを使ってメッセージの到着タイミングの違いを吸収していると思われる。

プロセサタイルの拡大写真。命令メモリとデータメモリが大部分の面積を占めている

次の図は、チップの下辺に置かれているメモリタイルの拡大写真である。タイルの面積は0.164mm2で64KBのSRAMを持つ。KiloCoreチップは、このメモリタイルを12個持っている。

メモリタイルの拡大写真。メモリ容量は64KBである

KiloCoreはコアごとに独立の命令を実行できるMIMD方式のプロセサである。しかし、その設計思想は、いわゆる汎用プロセサとはかなり異なっている。各プロセサの命令メモリは128ワード×40bitで、基本的には128命令しか格納できない。データメモリは256ワード×16bitである。そして、プロセサ間のデータの受け渡しはパケット化されたメッセージとして受け渡される。

ただし、メモリタイルに隣接したプロセサ間ではメモリタイルをシェアードメモリとして使い、データの受け渡しができるようになっている。

このように少ない命令メモリとデータメモリでどのようにデータを処理するのかというと、各コアが1つの仕事を丸ごと実行するのではなく、多数のコアを使い、各コアはストリーム的な処理の1ステップだけを担当するという処理モデルになっている。

次の図の中央付近に書かれているのは802.11a/gのWi-Fiの処理であるが、22コアとそれ以外にViterbiデコードとFFTの処理が必要になっている。これらすべてを含むと右端の図のようにチップの左下の60個余りのプロセサタイルと2個のメモリタイルを必要とする。

このように処理を細かく分割しているので、1つのプロセサタイルでは最大128命令、256ワードのデータメモリで処理ができる。

KiloCoreのプロセサタイルは、細分化された1つの処理だけを分担する。802.11a/gの処理は60個あまりのプロセサタイルと2個のメモリタイルで実行される

タイルの内部は同期であるが、タイル間は非同期で動作するGALS(Globally Asynchronous Locally Synchronous)という方式を使っている。このため、プロセサやパケットルータ、メモリのそれぞれがクロックの発振器を持っており、チップ全体で2012個の発振器を使っている。

タイル間の動作は非同期で行われる。このため、チップ全体で2012個の発振器を持っている

プロセサタイルは、2層の回路スイッチネットワークと1つのパケットルータを持っている。回路スイッチのバンド幅はリンクあたり28Gbps、パケットルータはリンクあたり9.1Gbpsのバンド幅を持っている。

プロセサタイルは2層の回路スイッチと1つのパケットルータを持っている

プロセサは7段のパイプラインで、命令長は40bitで、シングルイシューのインオーダ実行である。データパスは16ビット幅である。

プロセサは7段のパイプラインで、命令はシングルイシューでインオーダ実行である