メモリのボトルネック問題
半導体のメモリバスにはボトルネックになりやすいという問題がありました。単一のメモリバスを複数の演算器が奪い合ってしまい無駄な待ち時間が発生します。演算器を増やしてもメモリバスの競合が増えるばかりで性能がスケールしないという問題がありました。
NoC
NoC (Network on Chip) とは、チップ内に構築されたネットワークのことです。
この問題に対象すべく現れたのが NoC です。
実は人類はスケーラブルなネットワークを既に発明しています。インターネットです。インターネットはどれだけ機器が接続されても問題なく動きます。たとえばある日、アメリカのある大学が突然100万台のサーバを立ち上げたとしても日本の通信は何もなかったように動きます。アメリカのサーバのせいで日本の通信が阻害されることはありません。インターネットは「局所性」があるネットワークです。
NoC はインターネットのアイディアを半導体に持ち込んだものになります。単一のグローバルなメモリバスを複数のコアで共有しているからスケールしないわけです。多数なローカルなネットワークを使ってデータ移動を行うようにすればスケールします。
NoC の構成要素
NoC の基本的なコンセプトは初出の論文に詳しいです。
- ルーター
- パケット
- アクセスポイント
インターネットと同じといえば同じです。
メモリ空間
従来の単一バスアーキテクチャでは、メモリ空間は線形でした。0x0000から0xFFFF番地まであり、それぞれにさまざまな機能がありました。
NoC になるとそれが変わります。「アドレス」がネットワーク上の住所のことを意味します。
NoC is All You Need
メモリのボトルネック問題に対象
nvidia の cuda コアもメモリボトルネックが発生しやすいアーキテクチャになっています。打倒 nvidia を目指して開発されたアクセラレータは、メモリボトルネック問題を解決することで性能で優越することを謳っています。
一方で単一バスでないとプログラミングが難しいという問題があり多くのアクセラレータは撃沈していきました。次の記事では tenstorrent がどのように noc をプログラミングしているか見てみます。