SCORPIOのネットワークにはTime Windowというものがあり、Time Windowの長さは、その始まりに送信を開始した通知は、終わりまでには確実に全ノードに到着するように決められている。

事象が発生すると、まず、メインネットワークを使って、その事象に伴うメッセージを全ノードにブロードキャストする。この送信タイミングは任意で良い。そして、メッセージをブロードキャストしたノードは、次のTime Windowに開始時に通知フリットを通知用ネットワークに送り出す。

メインネットワークでメッセージを送り、次のタイムウインドゥの開始時に通知を送る

次の図は、時刻T1にコア11がメッセージM1をネットワークに注入し、時刻T2にコア1がメッセージM2をネットワークに注入した状態を示している。そして、次のTime Windowの開始時点であるT3で、コア1が通知N2、コア2が通知N2を通知ネットワークに注入する。N1のビットベクタはノード11に対応するビット11だけが立っており、N2はビット1だけが立っている。

メッセージのブロードキャストは、これらとは無関係に進行し、M2のメッセージは、次のサイクルにはノード2と5、その次はノード3、6、9という風に広がっていく。

2番目のTime Windowの終了する時刻T4では、通知N1、N2はどのノードにも届いており、通知のビットベクタはbit1とbit11が立っている。この時、どちらが先であったかの決め方は色々と考えられ、優先度を順番に切り替えるような方法が公平で良いと思われるが、話を簡単にするために、ノード番号が小さい方の事象が先に起こったとみなすことにする。この例では、ノード11の事象の方が先に起こっているのであるが、一つのTime Windowの中での事象の順序は、一貫して同じ順序で取り扱えば、物理的な事象の順序と一致していなくても問題はない。

ここではM2が先と決めたという絵になっており、M2を受け取っているノードは左斜め上方向の矢印でメッセージをコアに渡す。一方、M1を先に受け取っているノードは、M1をバッファに保持して、時間的に先と決められたM2の処理が終わってから、M1の処理を開始することになる。

そして、時刻T6で、アクセスされるaddr2のメモリを保持しているノード13がメモリ(実質は、そのアドレスのデータを保持するL2キャッシュ)を読んでメッセージR2で応答してノード1にデータを送り、時刻T7 でaddr1のメモリを持つコア6がメモリを読んでノード1にデータを送って、この例の動作は終わりになる。

つまり、Time Windowという考え方を導入し、その中で発生が通知された事象は、どのノードにも同じ情報が通知され、全部のノードが同じアルゴリズムでそれらの事象の順序を決めるので、ノードによって異なる順序と解釈されることがないので、スヌープによるコヒーレンシ制御がうまく行くわけである。

従来のディレクトリを使うキャッシュコヒーレンシ方式であるLimited Pointer Directory方式とAMDのHyperTransportの方式と新考案のSCORPIOの性能を比較したのが次の図である。評価に使ったのはSPLASH-2ベンチマークとPARSECベンチマークである。

LPDやHPと比べると、SCORPIOはここに上げたすべてのベンチマークで実行時間が短く、全体の平均では、LPDと比較すると24%、HTと比較しても13%高速である。

従来のLPD、HTとSCORPIOの性能比較

この発表の成果は、メッセージの伝達と順序の通知のネットワークを分離するという新しい考え方で、スヌープを使うスケーラブルにコヒーレンスを実現する方法を考案したことである。この方法は、前述のように、従来のLPDやHTと比べて、それぞれ24%と13%高い性能を示している。

また、開発された45nm SOIプロセスを使った36コアのSCORPIOチップのチップサイズは11mm×13.5mmであり、833MHzクロックで動作し、消費電力は28.8Wと報告されている。

この研究の成果のまとめ

なお、発表の時点では、チップは出来ているが、3種の方式の性能の比較はシミュレーションの結果である。