メモリ帯域とは
メモリ帯域とは、メモリと演算部との間で1秒あたりに運べるデータの量です。 単位はGB/s(ギガバイト毎秒)やTB/s(テラバイト毎秒)で、演算の速さを表すFLOPSとは別の数字として公表されます。演算器はデータが届くまで待つので、ピーク演算性能を実効性能として引き出すには、演算1回あたりに見合うバイト数を運べる帯域が要ります。帯域は演算器から遠い階層ほど細く、「富岳」のノードではAI向けの低い精度にすると演算性能だけが伸びて、1回あたりのバイト数が下がります。
帯域を演算性能で割ると、1回の演算に運べるバイト数が出る
Section titled “帯域を演算性能で割ると、1回の演算に運べるバイト数が出る”スーパーコンピュータ「富岳」の1ノードは、演算性能が通常モードの倍精度で3.072テラフロップス、メモリがHBM2 32GiB・1024GB/sです1。理化学研究所 計算科学研究センターは高いメモリバンド幅を「富岳」の特徴のひとつに挙げていて、総ノード数158,976のシステム全体では総メモリバンド幅が163PB/sに達します。
NECが2020年11月19日に単体での販売を始めたベクトルエンジン(VE)は、PCI Express規格のカード1枚に8個のコアを内蔵し、2.45テラフロップスの演算性能と1.53テラバイト/秒のメモリ帯域を実現しています2。NECは同社調べとして、このコアの単一コア性能と単一コアメモリ帯域を世界トップクラスと位置づけています。コア1個あたりの帯域を売りに数えている点に、帯域を厚く取るベクトル型の性格が表れています。
帯域を演算性能で割ると、演算1回あたりに運べるデータ量が求まります。「富岳」のノードは1フロップスあたり約0.33バイト、NECのカードは約0.62バイトです。同じSX-Aurora TSUBASAのラインアップでは、VEを8基積んだ構成が倍精度24.57TFLOPS・単精度49.15TFLOPS、最大総VEメモリ帯域12.24TB/s、最大VEメモリ容量384GBで3、大型の構成は倍精度155.71TFLOPS・86.40TB/s・3072GB、小型の構成は倍精度2.15TFLOPS・1.00TB/s・24GBです。これらを同じく割ると、8基構成は約0.50バイト、大型構成は約0.55バイト、小型構成は約0.47バイトになります。搭載数を増やしても、比はほぼ同じ帯に並びます。
比が同じ機械でも、要る帯域は計算によって違います。読み書きの量が多い計算ほど、帯域の側が先に上限へ届きます。
帯域が足りないと、演算器はデータを待つ
Section titled “帯域が足りないと、演算器はデータを待つ”高いピーク演算性能を生かして高い実効性能を得るには、十分なメモリバンド幅で演算器(ALU)へデータを供給し続ける必要があります4。カタログの演算性能は、演算器が止まらずに動き続けたときの上限です。実効性能は、その上限のうちどれだけを実際に使えたかを表し、データが届かないあいだ演算器は空回りします。演算の伸びに帯域が追いつかず、待ち時間が全体の上限になる状態がメモリの壁です。
Micronは、帯域が高いほどGPUがLLMの要する大量のデータを速く取り出して処理でき、遅延が減って全体のスループットが上がるとしています。同社は、HBM3Eを積むH200では容量と帯域の増加の組み合わせによって、前世代のHBM3を積むH100より推論スループットが1.8倍になるとしています5。
仕様表の帯域は理論上の上限で、実効値は別に測る
Section titled “仕様表の帯域は理論上の上限で、実効値は別に測る”帯域には、計算で求める理論上のピークと、実際に出た値があります。NVIDIAは、Tesla V100の理論上のピークメモリ帯域を898 GB/sと計算しています6。
実際に出た帯域は別に測ります。NVIDIAの開発ガイドでは、グローバルメモリへのアクセスについて、プログラムが要求した帯域と実際の帯域の比を、Global Memory Load EfficiencyとGlobal Memory Store Efficiencyという指標で報告します。Micronは、メモリ帯域の使用量をさらに追い込む実験に、達しうる最高の帯域使用量を示すマイクロベンチマークのBabelStreamを使っています。
帯域は、演算器から遠いほど細い
Section titled “帯域は、演算器から遠いほど細い”帯域はキャッシュにもあります。「富岳」の2GHz動作時の値で、L1データキャッシュはコアあたり読み出し256GB/s・書き込み128GB/s、L2はノードあたり読み出し4TB/s・書き込み2TB/s1、主記憶にあたるHBM2はノードあたり1024GB/sです。計算コアは1ノードに48個あるので、コアあたり256GB/sを48コア分足すとL1は12,288GB/sになります。L2の4TB/s、主記憶の1024GB/sと外側へ行くほど細くなり、L1と主記憶の差は10倍を超えます。
ストリーム処理向けの構成を3段のメモリ階層で見ても、向きは同じです。チップの外に置いたSDRAMがいちばん細く、チップに載せたストリームレジスタファイル、演算器のすぐ隣に付くローカルレジスタファイルの順に太くなります7。
速さを左右するのは、細い外側へ出る回数です。いちどアクセスした番地の近くは次にもアクセスされやすい性質を空間的局所性8と呼び、まとまった大きさの塊ごと手元へ写しておけば、その近くへのアクセスも速く済みます。同じデータを何度も使える計算ほど外へ出る回数が減り、一度きりのデータを流す計算ほど主記憶の帯域に縛られます。
AI向けの低い精度では、1フロップスあたりの帯域が下がる
Section titled “AI向けの低い精度では、1フロップスあたりの帯域が下がる”「富岳」のノードの演算性能は、通常モードの理論値で倍精度3.072テラフロップス、単精度6.144テラフロップス、半精度12.288テラフロップスです1。システム全体の表では、半精度(16ビット)に「AI学習」、整数(8ビット)に「AI推論」と用途が添えられています。
メモリ帯域は、どの精度でも同じ1024GB/sです。1フロップスあたりに運べる量は、倍精度の約0.33バイトから単精度の約0.17バイト、半精度の約0.083バイトへ下がります。演算の桁を下げて回数を稼いでも、運ぶ側の値は動きません。AI向けの装置で帯域が繰り返し話題になる背景には、この差があります。数の桁数を削る量子化は、メモリに収める数のかさのほうを小さくする手です。
帯域は、配線の本数とバンクと搭載数で広げる
Section titled “帯域は、配線の本数とバンクと搭載数で広げる”1つ目は配線を増やす方向です。「富岳」のノードはHBMの第2世代を採用しています。HBMはメモリダイを縦に積み、1本あたりは遅く動かして、配線の本数で帯域を稼ぐ形です。imecは、HBMをGPUの真上に積んで帯域を4倍にできれば、GPUの周波数を半分にしても処理量が87%まで戻ると試算しています。
2つ目はメモリを分けて並行に動かす方向です。ベクトルコンピュータではデータが規則的な構造に置かれるのでメモリアクセスも規則的になることが多く、メインメモリをマルチバンク化して高いメモリバンド幅を得られます4。データ数に対して少数の命令で実行するので、フェッチする命令数がスーパースカラプロセッサより少なく、高いデータ転送レートを保ちやすい設計です。GPUでも共有メモリは同じ大きさのバンクに分けられ、同時にアクセスできるバンクで並行アクセスの帯域を稼ぎます6。
3つ目は数を増やす方向です。NECのデータセンタモデルはVEを8基積んで最大総VEメモリ帯域を12.24TB/sにしていますが、演算性能も一緒に増えるので、1フロップスあたりのバイト数は約0.47〜0.62の帯にとどまります。
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”メモリ帯域とは何ですか?
メモリと演算部との間で1秒あたりに運べるデータの量で、単位はGB/sやTB/sです。「富岳」の1ノードのメモリはHBM2 32GiB・1024GB/sです。
演算性能とは別の指標ですか?
別の指標です。演算性能は1秒あたりの計算回数、メモリ帯域は1秒あたりに運べるバイト数を数え、実機の仕様表には2つが並んで載ります。帯域を演算性能で割ると、1回の演算に運べるバイト数が出ます。
帯域が細いと何が起きますか?
演算器がデータを待ちます。カタログ上のピーク演算性能を実効性能として引き出すには、演算器へデータを絶やさず送れるだけのメモリバンド幅が要ります。
キャッシュにも帯域はありますか?
あります。「富岳」のL1データキャッシュはコアあたり読み出し256GB/s・書き込み128GB/s、L2はノードあたり読み出し4TB/s・書き込み2TB/sで、いずれも2GHz動作時の値です。
内側と外側では、どちらが太いのですか?
内側です。コアあたり256GB/sを48コア分足すとL1データキャッシュは合計12,288GB/sになり、L2は4TB/s、主記憶は1024GB/sと、外へ行くほど細くなります。
帯域を広げるにはどうしますか?
配線の本数、メモリのバンク、搭載数を増やします。「富岳」のノードはダイを積んで配線を稼ぐHBM2を採用し、NECのベクトルエンジンを8基積んだ構成は最大総VEメモリ帯域12.24TB/sです。
AIの計算では何が変わりますか?
1フロップスあたりに運べる量が小さくなります。同じ1024GB/sに対して「富岳」のノードの演算性能は倍精度3.072テラフロップス、半精度12.288テラフロップスなので、比は約0.33バイトから約0.083バイトへ下がります。
比較・違いを学ぶ
Section titled “比較・違いを学ぶ”8件を表示
- 1理化学研究所 計算科学研究センター:システム紹介(スーパーコンピュータ「富岳」)r-ccs.riken.jp abc
- 2
- 3NEC:ラインアップ SX-Aurora TSUBASAシリーズjpn.nec.com ↩
- 4電子情報通信学会:知識の森 6群5編4章「ベクトルコンピュータ」(2010年)ieice-hbkb.org ab
- 5Micron:HBM3E H200 technical briefmicron.com ↩
- 6NVIDIA:CUDA C Best Practices Guidedocs.nvidia.com ab
- 7電子情報通信学会:知識の森 6群5編5章「専用コンピュータ」(2010年)ieice-hbkb.org ↩
- 8電子情報通信学会:知識の森 6群4編4章「記憶」ieice-hbkb.org ↩