Hot Chips 28において、AMDは次世代コア「Zen」を発表した。発表者は、シニアフェローのMike Clark氏である。

Hot Chips 28でZenを発表するAMDのMike Clark氏

Zenの最大の売りは、現在のExcavatorコアと比較して40%も高いIPCである。つまり、同じクロックで40%高い性能を発揮するプロセサコアであるということである。

Zenは、現在のExcavatorコアより40%高い性能を発揮する次世代コア (この記事のすべての図は、Hot Chips 28でのClark氏の発表資料のコピーである)

そして、40%高い性能を、Excavatorコアと同じ電力で実現するという。

ZenはExcavatorコアより40%高い性能を、Excavatorと同じ電力で実現する

それをどのように実現したかを示すのが、次の図である。この図にはコアエンジンの改良項目が11項目、キャッシュシステムの改良項目が7項目、低電力化の改良項目が7項目の銅系25項目が並んでいる。

2スレッド/コア化、つまり2スレッドのSMT化はIPC向上にはかなり効果があり、IPC 40%向上の半分くらいは、このSMT化効果ではないかと思われる。それ以外では、分岐予測の改良やL1キャッシュのライトバック化などの貢献が大きそうである。仮にSMT化で20%の向上とみると、残りの24項目で20%の改善であるので、20%/24=0.83%であり、項目当たりの改善は0.83%である。つまり、多数の小さな改善を積みかさねて、40%の改善が実現されている。

コアの改善が11項目、キャッシュの改善が7項目、低電力化の項目が7項目。25項目の改善の積み重ねで40%の改善が実現されている

次の図にZenコアの全体像を示す。

これまでのAMDのコアは単一スレッドを実行するコアであったが、ZenのコアはIntelのCoreプロセサと同様に2スレッドを並列に実行するアーキテクチャに変った。これはIPCの向上には大きく貢献していると思われる。ただし、この改善はマルチスレッドが生きるアプリケーションでなければ役に立たない。

Zenコアは、4つのx86命令をフェッチする。分岐予測に基づき、命令キャッシュから命令をフェッチしてデコードし、Micro-opキューに格納する。そして、命令の実行は整数系と浮動小数系に分かれており、整数系は6個のスケジューラに4個のALUと2個のAGU(Address Generation Unit)が繋がっている。整数レジスタファイルは共用である。整数レジスタファイルは168エントリを持つ。単一スレッドを実行する場合は、全エントリを1つのスレッドで占有できるので、192命令がIn-Flightになることができるという深いOut-of-Order実行ができるように設計されている。一方、2スレッドで分割して使用する場合は、スレッドごとには84エントリとなり、従来のプロセサより少ないレジスタ数となる。

浮動小数系は単一のスケジューラで、2個の乗算器(MUL)と2個の加算器(ADD)を動かしている。これで128FMACを実行する。

ロードストアユニットは2個で、72個のOut-of-Orderのロードをサポートする。2つのAGUが生成したアドレスはLoad/Storeキューに送られ、1次データキャッシュをアクセスする。

1次命令キャッシュは64KB、4way、1次データキャッシュは32KB、8wayである。そして、2次キャッシュは512KB、8wayで、Zenコアには含まれないが、チップ全体としては大容量(8MB)の3次キャッシュが付く。

Zenは2スレッドのSMTコアとなった。実行ユニットは整数演算4個、ロードストアユニットが2個、浮動小数点ユニットが2ペアで、これは一般的な構成である

Zenコアの分岐予測は、ハッシュ・パーセプトロンを使っている。TLBを通してVAに変換してからキャッシュを読む方式で、L0 TLBは8エントリ、L1TLBは64エントリ、L2 TLBは512エントリと3階層のTLBを備えている。BTB(Branch Target Buffer)もL1とL2の2階層で、各エントリは2つの分岐を記憶する。リターンスタックは32エントリで、さらに、間接分岐を扱うITA(Indirect Target Array)を持つ。

命令キャッシュは64KBで4wayとなっており、マイクロOPをキャッシュするためにマイクロTagを持っている。

Zenコアの命令フェッチ部の構造

バイト単位の命令バッファから、命令の切れ目を見つけて、4つのx86命令を切り出してデコードする。また、Opキャッシュから読み出したマイクロ命令とあわせて、マイクロOpキューに入れ、命令によってはマイクロコードROMを読み出したり、Stack Engine Memfileを読み出して命令を取り出してディスパッチに送る。デコーダは、整数演算部には最大6マイクロOp、FP部には最大4マイクロOpを送る。

Zenコアのデコード部の構造

整数演算部には4つのALUの命令キューと2つのAGUの命令キューがあり、各キューは14エントリとなっている。レジスタファイルは168エントリと大きいのであるが、SMTの2スレッドでシェアされていると考えられるので、スレッドあたりで見るとそれほど大きくはない。