このページの本文へ

ロードマップでわかる!当世プロセッサー事情 第668回

メモリーに演算ユニットを実装するSK HynixのGDDR6-AiM AIプロセッサーの昨今

2022年05月23日 12時00分更新

文● 大原雄介(http://www.yusuke-ohara.com/) 編集●北村/ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷

ディープラーニングに振り切ったAiMの内部構造

 内部構造であるが、16個のDRAMバンクに16個のPU(Processing Unit)が分散される形で実装され、それとは別に2KBのグローバル・バッファが中央に置かれる格好になっている。

GBが置かれるのは通常ではRaw Decoderなどが置かれる場所となる

 そのPUであるが、最大16個のデータのMAC演算が可能である。データ型はBF16なので、DRAMバンクから256bit分のデータを一気に読み出し、これをそのまままず乗算を行ない、その結果を加算して、最終的にアクティベーションするところまでを完全にパイプライン化している。

 ところで前回も書いたが、MAC演算とはY=A×X+Bという処理になる。ここでXが入力値、Aがウエイト、Bがオフセットで処理結果がYである。ウエイトにあたるA(と必要ならオフセットのB)はDRAMから取ってくるわけだが、入力にあたるXをどこから持ってくるのか? というと、パターンが2つある。

 1つはグローバル・バッファを利用する方法である。もう1つは複数のバンクからそれぞれデータを取る方法だ。大きな入力に対して、単一のウエイトを適用するようなシーンではこちらが利用できることになる。

GBを利用する方法。入力に対してさまざまなウエイトをかけて、その結果を組み合わせる場合にはこの方法が有効だ

複数のバンクからそれぞれデータを取る方法。この場合2バンクが連携して動作することになり、PUが半分休止になるわけだ

 それぞれのPUで行なえる処理が下の画像だ。そのバンクを有効にする/しない、MAC演算、活性化、乗算のみ(MAC演算はしない)といった処理命令と、後はデータの移動に関わるものだけである。

EWMULは乗算の後の加算を動かさず、乗算の結果をそのまま出力するものとなる

 DRAMセル混在ということもあり、あまり複雑な命令はサポートしていないし、BF16というデータフォーマットの時点で科学技術計算などにはかなり厳しい(なにしろ仮数部が7bitしかないから、実質2桁精度)わけで、もう完全にディープラーニングに振り切った構成になっているのはいっそ潔いというべきか。

 MAC演算の基本的な仕組みが下の画像である。16個の乗算器の出力(ここに一応出力制御とShifterが入っている)を、15個の乗算器でツリー状に加算していく形態である。

これが1つのPU内に収められている

 ちなみにこの加算器のツリーは4層になっている関係で、普通に処理をすると加算に4サイクルかかる計算である。乗算まで加えると5サイクルで実施できることになる。

レイテンシーが5サイクルという話で、スループットそのものは1サイクルである

 これをもう少し高速化したい、ということでSK Hynixが提案しているのはBWMS(Bank-Wide MA Shift)である。整数の加算であれば話は簡単なのだが、BF16の場合は浮動小数点なので、指数部(Exponent)と仮数部(Mantissa)を別々に扱う必要がある。

 例えば100+10、という計算は整数型なら計算一発である。ところが浮動小数点だとそれぞれ1.0×102+1.0×101、と表現されることになる。したがって、まず最初に指数部の桁をそろえる必要があり、10.0×101+1.0×101か、1.0×102+0.1×102と変換(どちらにするかは処理系の実装次第)してから加算する必要がある。

 これをツリー上の加算で毎回やってるから処理が増えることになる。そこで、1バンク16個分のデータについて、最初に指数部を統一してしまえば、あとは符号付7bitの加算だけで済むので、処理時間を大幅に減らせる、というものだ。これは単に性能だけでなく消費電力やエリアサイズの削減にもつながる、としている。

最初に指数部を統一してしまえば加算部のレイテンシーを2サイクルまで減らせるとする

加算の高速化により、CMD/ADD(コマンド/アドレス)と同じタイミングで処理が可能になる、としている。もともとGDDR6の場合、CMD/ADDはデータ転送レートの1/4の速度で伝送されており、これにあわせて結果を出力できるようになるわけだ

 ちなみにPUに対する処理は、CMD/ADDラインを使って送る形で実装されているようで、このあたりはHBM-PIMと発想は同じである。

 いまさら信号線を増やすわけにもいかないし、そもそもこの方式の場合はまずDRAMセルにデータを埋め(これは通常のデータ書き込み)、ついでPUに対して処理を行ない(ここが拡張部分)、最後に結果を受け取る(これは通常のデータ読み込み)という形になるから、PUの制御I/Fを別に用意するよりも、既存のCMD/ADD経由の命令を拡張する方が賢明だろう。

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン