GPUアーキテクチャの基本について学ぶために、以下の資料を読んでいく。
--

以下の資料を読むことを強く推奨する
- Lindholm et al., "NVIDIA Tesla: A Unified Graphics and Computing Architecture," IEEE Micro 2008.
- Peleg and Weiser, “MMX Technology Extension to the Intel Architecture,” IEEE Micro 1996.

まず、SIMDについて復讐する。Flynnの分類によれば:
- SISD: 単一命令で1つのデータを処理する
- SIMD: 単一命令で複数のデータを処理する
- MISD: 複数の命令で1つのデータを処理する
- 一番近いのは、Systoric Array Processor、ストリーミング・プロセッサ
- MIMD: 複数の命令で複数のデータを処理する

アレイプロセッサ(SIMDのようなもの)とベクトルプロセッサの違いを示したもの:
- アレイプロセッサは同じ演算が同時に発生する。同じ空間(ユニット)で異なる演算を次々に実行していく。
- ベクトルプロセッサは異なる演算が同時に発生する。同じ空間(ユニット)で同じ演算がひたすら実行されていく。

メモリのバンクについて思い出そう:メモリはバンクに分割されそれぞれ同時にアクセスすることができる。 もしN個のバンクが用意されていれば、同時にN個のメモリアクセスを実行できる。

- ベクトル命令の実行について思い出そう:ベクトル命令は1つのパイプラインを使って連続的にデータを処理するか、複数のパイプラインを使って同時並行かつ連続的にデータを処理する。
- それぞれの演算パイプラインは「レーン」と呼ばれる単位に分割される。ベクトルレジスタも同様にレーン単位に分割される。
- 複数のベクトル命令の実行をオーバラップできる。ベクトルメモリアクセス命令の実行とベクトル演算実行をオーバラップする。



- ベクトル命令の不利な点は、並列性がRegularであれば効率的に処理できるが、そうでない場合には並列化が難しい。
- 例えば、リンクリストのキーを検索する、などの操作はベクトル命令は難しい。

- ベクトル命令のまとめ:
- ベクトル/SIMDマシンは、Regularのデータ並列性を抽出するには有益
- 性能はコードのベクトル化の割合により制約される(アムダールの法則を思いだそう)
- 多くの既存のISAはSIMD命令を含んでいる。

- 既存のSIMD ISA拡張について復習する
- SIMD: Single Instruction Multiple Data:1つの命令で複数のデータを処理する

- Intel Pentium MMX Operations
- 1つの命令が複数の命令を同時に 処理する
- マルチメディア処理向けに用意された



- MMX から AMX への進化
- MMX : 整数64ビットレジスタを使用する
- SSE (Streaming SIMD Extensions)
- AVX (Advanced Vector Extensions)
- 256ビット浮動小数点
- AVX2 : 256ビット浮動小数点 FMA
- AVX512 : 512ビット
- AMX (Advanced Matrix Extensions)
- AI/MLアプリケーション向けに実装された。Tiled Matrix Multiply Unit (TMUL) を使用する

- Celebras の Wafer Scale Engine は現代のAI/ML向けSIMDエンジンを積んでいる
- ニューラルネットワークをウェハ全体に一気にマッピングする
- ウェハのダイが異なるニューラルネットワークのレイヤとして動作する
- ある種のMIMDマシンのようになっている


- WSE (Wafer Scale Engine) の内部について:MIMDマシンになっており、個々のタイルは分散メモリを保持している。
- 個々のタイルは内部で4-way SIMDとなっており、ローカルメモリを通じて計算する。

