SW26010のアーキテクチャの1つの特徴が、IMPEである。次の図に示すように、IMPEはベクトル処理ユニットを持つプログラマブルなプロセサであり、オンチップネットワークとメインメモリの間に置かれている。

IMPEはオンチップネットワークとDRAMメモリの間に置かれ、メモリコントローラと密に繋がっている

次の図に示すように、IMPEは、命令バッファと汎用レジスタファイル(GPR)と演算器からなるグループを複数持っており、演算器の後に、データシャッフルネットワークを持っている。シャッフルされたデータはGPRに書き戻されたり、メモリアクセスユニットを経由してメモリに送られる。

命令フェッチユニットは1個であり、複数の命令バッファがどのように使われているのかはよく分からないが、存在する位置からみて、メモリ内でのDMA転送や転置、疎行列の形式変換あるいはソートやマージのようなことをやるのではないかと思われる。

IMPEは複数のベクトル処理ユニットとそれらの処理結果をシャッフルするネットワークを持ち、メモリ上でのデータの並べ替えなどを行う

MPEは3本の実行パイプラインを持つ汎用のマイクロプロセサである。また、1次命令キャッシュ、1次データキャッシュ、共用の2次キャッシュを持っている。

MPEはOSやランタイムを実行したり、あまり並列度の高くないプログラムを実行することを意図して設計となっている。

MPEは汎用のプロセサで、OSやランタイム、その他の並列性の高くないプログラムを実行することを目的として作られている

CPEは計算を行うコアで2つの実行パイプを持っている。命令に関しては1次キャッシュがあるが、データキャッシュは無くソフトウェア制御で使うスクラッチパッドメモリ(SPM、あるいはローカルデータメモリ(LDM)とも言う)を持っている。一般にスクラッチパッドメモリ(あるいはローカルメモリ)はデータの配置や移動をプログラムに書いておく必要があり、プログラミングは面倒であるが、うまく使えばキャッシュより効率は良い。

この図から見るとGPRは1つであり、CELLプロセサのように、整数と浮動小数点データのレジスタを共用しているように見えるが、単に簡略化して書いているだけかも知れない。

CPEは主に並列計算を行うコアである。データキャッシュは持たず、ソフトウェア制御で使うスクラッチパッドメモリを使っている

次の表は3種のプロセシングエレメントの性質のまとめである。

MPEは、スーパスカラ、Out-of-Order実行を行う汎用のプロセサであり、OSなどを実行する。

CPEは2命令発行の計算コアで、コードブロック単位でOut-of-Order実行ができると書かれている。高い並列性をもつコードの実行に最適化されている。

IMPEは単一命令のインオーダ実行を行うプロセサで、高バンド幅、低レーテンシでメモリアクセスができる。

それぞれのPEの性質の違いのまとめ

TaihuLightのメモリ階層は、次の図のようになっている。MPEはL1命令キャッシュとL1データキャッシュ、そして、L2共通キャッシュを持つ。CPEはデータキャッシュ、は持たず、ソフトウェア制御のスクラッチパッドメモリを持つ。各CPEの1次命令キャッシュはCPEクラスタで共有される2次命令キャッシュに接続されるが、スクラッチパッドメモリはメインメモリに直結されている。ここがTaihuLightのメモリ階層の大きな特徴である。

そして、キャッシュはコンシステンシー処理ユニットで一貫性が保たれている。

TaihuLightのメモリ階層。CPEはデータキャッシュを持たず、ソフトウェア制御のスクラッチパッドメモリを使う。そして、スクラッチパッドメモリはメインメモリに直結されている

スクラッチパッドメモリを直結すると、メインメモリには64個のCPEが接続されることになる。従って、この部分は多数のバンクを持ち並列アクセスが可能になっていると考えられるが、詳細は不明である。

一般にはシステム制御を担当するCPUがアクセラレータへのDMAを制御するのであるが、TaihuLightの場合はCPEがスクラッチパッドメモリとメインメモリの間のデータ転送を行うDMAを起動する。転送のやり方としては、下の左の図のようにLoadA、ComputeA、StoreAが終わってからLoadB、ComputeB、StoreBを行う同期型のDMAだけでなく、右の図のようにメモリアクセスと計算を並行して行う非同期型のDMAもサポートされている。

TaihuLightでは、スクラッチパッドメモリとメインメモリの間のDMAはCPEから起動する。DMAは同期型だけでなく、右側の図に示す非同期型もサポートしている

また、メインメモリと1つのCPEのスクラッチパッドメモリの間のDMAだけでなく、メインメモリからのデータを複数のCPEのスクラッチパッドメモリに転送するマルチキャストDMAもサポートされている。これが有効に使える場面では、大幅に転送効率を高めることができる。

当然であるが、逆方向の転送にはマルチキャストは使えない。

TaihuLightでは、メインメモリからのデータを多数のCPEのスクラッチパッドメモリに転送するマルチキャストもサポートされている

また、SW26010では、CPEの計算パイプラインとオンチップネットワークは密に結合されており、CPEのレジスタ間でデータ転送を行う命令がある。このデータ転送は、2つのCPE間だけでなく、マルチキャストも可能である。これは並列に実行されるスレッド間で高速にデータ交換を行うには非常に役に立つ機能である。

SW26010ではオンチップネットワークを介してCPE間でレジスタの内容を転送する命令をもっている。この転送は1対1だけでなく、マルチキャストもできる

SW26010のCPEクラスタの中では列方向の同期信号線があり、各列の同期信号を集め、さらにすべての列の同期信号を集める。そして、これらの逆方向の信号線を使って同期結果を全CPEに送るハードウェアの同期機構を持っている。

SW26010は、CPEクラスタ内の全CPEの同期をとるハードウェアを持っている

このように、TaihuLightでは、メモリウオールを解消するため、計算と並列に動作するDMAをサポートしている。このDMAは1対1転送だけでなく、マルチキャストや行方向、列方向、メッシュなどの各種転送をサポートしている。

加えて、TaihuLightでは、CPE間のレジスタ転送を行う命令をサポートしている。この命令を使うことにより、オーバヘッドの少ない小粒度の高速のレジスタ転送ができる。このレジスタ転送は、同期型と非同期型がサポートされている。

さらに、CPEの同期をサポートするハードウェアを持ち、高速の同期ができるので、同期オーバヘッドを小さくすることができる。

メモリウォールを解決するTaihuLightのDMA、レジスタ転送命令とハードウェア同期機構

メモリウォール問題を解決するは言い過ぎではないかと思うが、これらの機構は高並列の処理を行う場合のオーバヘッドを減らすためには有効な機構であることは間違いない。