福田昭のセミコン業界最前線

「メモリの壁」がいつまでも存在し続ける理由

「Hitting the Memory Wall: Implications of the Obvious」の始まり部分。ACM SIGARCH Computer Architecture News(vol.23, issue1, pp.20-24)から抜粋したもの

「メモリの壁」問題の始まり

 「メモリの壁(Memory Wall)」あるいは「メモリギャップ」という単語は、本コラムを読まれている方のほとんどがご存知だろう。ただしメモリの壁の意味は、この30年でずいぶんと変わってしまった。かつてのメモリの壁とは、CPUとメモリ(DRAM)の動作速度に差があり、この差が壁となってCPUを搭載するシステムの性能を低下させることを意味していた。

 メモリの壁の存在と拡大が懸念され始めたのは、1990年代半ばである。今から約30年前のことだ。米バージニア大学のコンピュータサイエンス学科に所属するWulf氏とMcKee氏が1994年12月に執筆し、1995年3月発行のACM SIGARCH Computer Architecture Newsに掲載された論文「Hitting the Memory Wall: Implications of the Obvious(メモリの壁にぶつかっている: その明白な影響)」が「メモリの壁」問題の将来的な影響を論じた最初の報告だとされる。

 論文では、CPUとDRAMの動作速度の向上ペースはいずれも指数関数的であるものの、その向上ペースには違いがあること。そしてCPUの向上ペースがDRAMの向上ペースを上回っていることから、前者の動作速度に後者が追い付けなくなりつつあること。そして両者の差は今後、拡大し続けること、などを指摘している。

 論文では続けてキャッシュメモリとDRAMの2階層メモリ構成について検討する。キャッシュのアクセス時間は短く、DRAMのアクセス時間は長い。キャッシュにヒットすればCPUは待つことなく、データを読める。しかしキャッシュにヒットしない、すなわちキャッシュミスすることもある。そうなるとDRAMからデータを読み込むことになり、データがCPUに到着するまでの間、CPUは何もできずに、ただ待つことになってしまう。すなわち計算資源の消費量というコストが増加する。

 論文では、1995年時点の平均的なメモリアクセス時間を1クロックサイクルとし、CPUの年平均速度向上率、キャッシュミスとヒットのコスト差の初期値、キャッシュのヒット率などを仮定した。これを元に、平均的なメモリアクセスのクロックサイクル数と、キャッシュミスとヒットの比率で表わしたコストを1995年から2010年まで推定した。するとアクセスのサイクル数とコストはいずれも時間経過とともに指数関数的に増大するという、かなり悲観的な予測が得られた。

平均的なメモリアクセスのクロックサイクル数と、キャッシュミスとヒットの比率で表わしたコストを1995年から2010年まで推定した結果の例。グラフの最上部横軸は年号で、右端の数字はCPUの年平均速度向上率で50%と100%。縦軸はメモリアクセスの平均サイクル数で、初期値は1。キャッシュミスとヒットのコスト差の初期値は4と仮定して計算したもの。曲線の添付数字はキャッシュのヒット率。左のグラフはヒット率を99.0%~99.8%と非常に高く設定した場合。右のグラフはヒット率を90%~98%と低めに設定した場合で、低めといっても絶対値としては相当に高い。「Hitting the Memory Wall: Implications of the Obvious」、ACM SIGARCH Computer Architecture News(vol.23, issue1, pp.20-24)から抜粋したもの

 メモリの壁と呼ばれてはいないものの、1990年の時点ですでに、CPUとDRAMの速度向上ペースは問題視されていた。日立製作所の技術誌「日立評論」の1990年1月号には、MPU(マイクロプロセッサ)のクロック周波数向上とDRAMのアクセス時間短縮の実績が1982年から1988年までグラフとしてまとめられている。

 そのグラフではMPUの動作周波数が6年で4倍に上昇したのに対し、256Kbit品と1Mbit品のDRAMのアクセス時間は3分の1、周波数に換算すると3倍にとどまっている。1982年~1983年の当初はMPUから1クロックでDRAMにアクセスできたのが、1980年代後半には2クロック~3クロックを要するようになった。

MPUとDRAMの速度推移。「日立評論」の1990年1月号、p.95「高速化と大容量化の進むダイナミックRAM」から抜粋したもの

メモリの壁の深刻化とキャッシュの階層化

 メモリの壁が学会論文で提唱されたのが1995年。IntelのCPU「Pentium」の動作周波数は1994年秋に100MHz、1995年半ばに133MHz、1996年半ばに200MHzと急激に上昇していた。一方でDRAMの動作周波数は、1992年に製品化された「ファストページモード」品が22MHz、1995年に製品化された「EDO(Extended Data Out)」品が33MHzと向上したものの、CPUに比べるとかなり低い。

 速度差を埋めるべく半導体メモリの業界団体JEDECは、クロック同期の高速DRAM技術「シンクロナスDRAM(SDRAM)」を1993年に標準規格化した。SDRAMが1996年以降に普及したことで、DRAMの動作周波数は66MHz~100MHzと1997年~1998年に大きく向上した。しかし、IntelのCPU「Pentium II」の動作周波数は同じ時期に233MHz~400MHzと急速な上昇が続いていた。

メモリ(DRAM)とMPU(CPU)の高速化トレンド。「日立評論」の1997年11月号、pp.75-80「MPUの高速化を支える大容量・超高速SDRAMモジュール」から抜粋したもの

 CPU側はDRAMとの速度差を埋めるため、2次キャッシュを用意した。たとえば1997年5月に発表された「Pentium II」プロセッサでは、アクセス時間が2クロックサイクルの512KB SRAMを2次キャッシュとして外付けした。厳密には、同じ回路基板にプロセッサダイとキャッシュダイを搭載したモジュールである。

 2次キャッシュが外付けであることは、半導体メモリベンダーにとっての事業機会を意味した。たとえば日立製作所は2次キャッシュ向けのバーストモードを備えた1MbitシンクロナスSRAMを1995年に製品化している。アクセス時間は15nsと短く、66MHzで動作する。クロック133MHzのプロセッサからは2クロックサイクルでアクセスできることになる。

「日立評論」の1996年1月号、p.49「Pentiumプロセッサ対応のキャッシュメモリ」の説明ページ(上部のみ)

プロセッサの周波数は7年で100MHzから1GHzに急上昇

 CPUの動作周波数は、1990年代を通じて急速に上昇していった。半導体集積回路の国際学会ISSCCで発表されたプロセッサのクロック周波数は1994年に100MHz前後だった。それが7年後の2001年には1GHzと10倍に上昇した。年平均の上昇率は1.39倍に達する。

国際学会ISSCCで発表されたプロセッサのクロック周波数推移。1993年~2009年の開催年ベース。ISSCC実行委員会が報道関係者向けに配布した2009年のISSCC用プレスキットから

 DRAMとの速度差はさらに広がり、そのギャップを埋めるためにCPUはキャッシュをさらに活用するようになった。先述のように1990年代半ばには、2次キャッシュは同一パッケージへの封止あるいはモジュール化による外付けだった。2000年にはキャッシュ容量の拡大と2次キャッシュの内蔵、3次キャッシュの外付けを並行して導入するようになってきた。

 たとえば2000年のISSCCにはIntelが、256KBの2次キャッシュをオンダイで内蔵した第2世代の「Pentium III」の技術概要を発表した(論文番号MP5.7)。同じISSCCではMotorolaが、256KBの2次キャッシュをオンダイで搭載するとともに2MBの外付け3次キャッシュをサポートするPowerPCプロセッサの技術概要を発表した(同MP5.3)。

プロセッサの性能向上策は周波数からマルチコアへ

 1990年代には「7年で10倍」の超ハイペースでCPUのクロックは上昇した。2001年にクロック周波数はおおよそ1GHzに達したので、上昇ペースがそのままであれば、2008年には10GHzに達したはずだ。しかし実際には2005年以降、クロック周波数の上昇は急速に鈍化した。鈍化の要因はいくつかあるものの、消費電力の上昇ペースを緩和させようとしたことが大きい。

 代替案として浮上したのがマルチコア化による性能向上である。CPUコアを2つ載せるデュアルコアから、4つ載せるクアッドコア、8個載せるオクタコアへと、CPUが内蔵するCPUコア数は増加していった。2018年に開催された国際学会ISSCCでは、28個と数多くのCPUコアをモノリシック集積したサーバー用CPU、開発コード名「Skylake-SP」をIntelが発表した(論文番号2.1)。

国際学会ISSCCで発表されたプロセッサのクロック周波数推移。1994年~2018年の開催年ベース。ISSCC実行委員会が報道関係者向けに配布した2018年のISSCC用プレスキットから
国際学会ISSCCで発表されたプロセッサのCPUコア数推移。1994年~2018年の開催年ベース。ISSCC実行委員会が報道関係者向けに配布した2018年のISSCC用プレスキットから

メモリの壁が周波数から転送速度に変化

 CPUの性能向上手法が周波数の上昇に頼れなくなったことはすでに述べた。2000年代半ば以降はCPUコア数の増加や同時マルチスレッディング(SMT)、キャッシュ容量の拡大などを組み合わせることになる。たとえば2007年には、ハイエンドPC用CPUが3次キャッシュを内蔵し始めている。そしてDRAMには、入出力帯域幅、すなわちデータ転送速度の向上が求められるようになった。

 帯域幅の向上手法としてはメモリセルアレイの遅延時間短縮よりも、入出力アーキテクチャの変更を主に利用してきた。たとえばSDRAMではクロックの立ち上がりエッジに同期してデータを入出力していたのに対し、改良版のDDR(Double Data Rate) SDRAMではクロックの立ち上がりと立ち下がりの両エッジに同期してデータを入出力させることで、同じクロック周波数でもデータ転送速度を2倍に高めた。

 DDR SDRAM以降は、内部でクロック周波数を逓倍する、メモリセルアレイを分割して並列動作させる、読み出しデータをプリフェッチする、などの工夫によってデータ転送速度を高めてきた。

DRAMの世代別の最大データ転送速度の推移。曲線の上にある数字は最大データ転送速度。曲線の下は順に西暦、名称、動作周波数、入出力ピン当たりの転送速度、電源電圧。1990年のFPMはFast Page Mode、1994年のEDOはExtended Data Outの略。2000年のDDR1以降は、入出力幅64ピンでの最大データ転送速度を世代ごとに2倍に高めてきた。2017年6月に半導体規格策定団体のJEDECが、主催イベント「Server Forum」で講演したスライド

高速DRAM技術の登場は、根本的な解決とならない

 DDR2、DDR3などのSDRAMはサーバーやPCなどのメインメモリを主な用途としていた。これらの用途に製品の仕様も適応しており、要求仕様の異なる用途には適しているとはいえない。そこでグラフィックスメモリ用途に向けてDDRよりも高速なGDDR SDRAM、モバイル用途に向けてDDRよりも消費電流の少ないLPDDR SDRAMがそれぞれ2000年代に開発された。

国際学会ISSCCで公表された、入出力ピン当たりのDRAM最大データ転送速度の推移。2000年~2023年。ISSCCの論文から筆者がまとめたもの

 これら新しいDRAMに共通していえることは、登場段階では従来のDRAMと比べて大きな性能向上があるものの、その後の性能向上ペースはかなり低めであることだ。主流のDDR系の2000年~2023年における入出力ピン当たりの速度向上は年率1.15倍である。高速版といえるGDDR系は登場時点でDDR系の2倍~3倍のデータ転送速度を備えていた。ただしその後の速度向上ペースは年率1.15倍で、DDR系とほぼ変わらない。

 このことからいえるのは、アーキテクチャ変更による高速DRAM技術の開発は、帯域幅をいったんは大幅に高めるものの、その後の向上ペースは既存のDRAMと同様に、緩やかであることだ。つまり、高速なDRAMアーキテクチャの導入は一時しのぎであり、数年後にはメモリの壁にぶつかる。データ転送速度を大きく向上させ続けるためには、常にアーキテクチャの変革が求められることになる。常にメモリの壁が存在する理由でもある。