SW26010のアーキテクチャの1つの特徴が、IMPEである。次の図に示すように、IMPEはベクトル処理ユニットを持つプログラマブルなプロセサであり、オンチップネットワークとメインメモリの間に置かれている。
次の図に示すように、IMPEは、命令バッファと汎用レジスタファイル(GPR)と演算器からなるグループを複数持っており、演算器の後に、データシャッフルネットワークを持っている。シャッフルされたデータはGPRに書き戻されたり、メモリアクセスユニットを経由してメモリに送られる。
命令フェッチユニットは1個であり、複数の命令バッファがどのように使われているのかはよく分からないが、存在する位置からみて、メモリ内でのDMA転送や転置、疎行列の形式変換あるいはソートやマージのようなことをやるのではないかと思われる。
MPEは3本の実行パイプラインを持つ汎用のマイクロプロセサである。また、1次命令キャッシュ、1次データキャッシュ、共用の2次キャッシュを持っている。
MPEはOSやランタイムを実行したり、あまり並列度の高くないプログラムを実行することを意図して設計となっている。
CPEは計算を行うコアで2つの実行パイプを持っている。命令に関しては1次キャッシュがあるが、データキャッシュは無くソフトウェア制御で使うスクラッチパッドメモリ(SPM、あるいはローカルデータメモリ(LDM)とも言う)を持っている。一般にスクラッチパッドメモリ(あるいはローカルメモリ)はデータの配置や移動をプログラムに書いておく必要があり、プログラミングは面倒であるが、うまく使えばキャッシュより効率は良い。
この図から見るとGPRは1つであり、CELLプロセサのように、整数と浮動小数点データのレジスタを共用しているように見えるが、単に簡略化して書いているだけかも知れない。
次の表は3種のプロセシングエレメントの性質のまとめである。
MPEは、スーパスカラ、Out-of-Order実行を行う汎用のプロセサであり、OSなどを実行する。
CPEは2命令発行の計算コアで、コードブロック単位でOut-of-Order実行ができると書かれている。高い並列性をもつコードの実行に最適化されている。
IMPEは単一命令のインオーダ実行を行うプロセサで、高バンド幅、低レーテンシでメモリアクセスができる。
TaihuLightのメモリ階層は、次の図のようになっている。MPEはL1命令キャッシュとL1データキャッシュ、そして、L2共通キャッシュを持つ。CPEはデータキャッシュ、は持たず、ソフトウェア制御のスクラッチパッドメモリを持つ。各CPEの1次命令キャッシュはCPEクラスタで共有される2次命令キャッシュに接続されるが、スクラッチパッドメモリはメインメモリに直結されている。ここがTaihuLightのメモリ階層の大きな特徴である。
そして、キャッシュはコンシステンシー処理ユニットで一貫性が保たれている。
スクラッチパッドメモリを直結すると、メインメモリには64個のCPEが接続されることになる。従って、この部分は多数のバンクを持ち並列アクセスが可能になっていると考えられるが、詳細は不明である。
一般にはシステム制御を担当するCPUがアクセラレータへのDMAを制御するのであるが、TaihuLightの場合はCPEがスクラッチパッドメモリとメインメモリの間のデータ転送を行うDMAを起動する。転送のやり方としては、下の左の図のようにLoadA、ComputeA、StoreAが終わってからLoadB、ComputeB、StoreBを行う同期型のDMAだけでなく、右の図のようにメモリアクセスと計算を並行して行う非同期型のDMAもサポートされている。
また、メインメモリと1つのCPEのスクラッチパッドメモリの間のDMAだけでなく、メインメモリからのデータを複数のCPEのスクラッチパッドメモリに転送するマルチキャストDMAもサポートされている。これが有効に使える場面では、大幅に転送効率を高めることができる。
当然であるが、逆方向の転送にはマルチキャストは使えない。
また、SW26010では、CPEの計算パイプラインとオンチップネットワークは密に結合されており、CPEのレジスタ間でデータ転送を行う命令がある。このデータ転送は、2つのCPE間だけでなく、マルチキャストも可能である。これは並列に実行されるスレッド間で高速にデータ交換を行うには非常に役に立つ機能である。
SW26010のCPEクラスタの中では列方向の同期信号線があり、各列の同期信号を集め、さらにすべての列の同期信号を集める。そして、これらの逆方向の信号線を使って同期結果を全CPEに送るハードウェアの同期機構を持っている。
このように、TaihuLightでは、メモリウオールを解消するため、計算と並列に動作するDMAをサポートしている。このDMAは1対1転送だけでなく、マルチキャストや行方向、列方向、メッシュなどの各種転送をサポートしている。
加えて、TaihuLightでは、CPE間のレジスタ転送を行う命令をサポートしている。この命令を使うことにより、オーバヘッドの少ない小粒度の高速のレジスタ転送ができる。このレジスタ転送は、同期型と非同期型がサポートされている。
さらに、CPEの同期をサポートするハードウェアを持ち、高速の同期ができるので、同期オーバヘッドを小さくすることができる。
メモリウォール問題を解決するは言い過ぎではないかと思うが、これらの機構は高並列の処理を行う場合のオーバヘッドを減らすためには有効な機構であることは間違いない。