はじめに
最近、話題となっているAdvanced Micro Devices(AMD)のRadeon RX 6000シリーズに新たに搭載されたSmart Access Memory(SAM)機能について、いろいろと情報が錯綜しているようなので、私なりに整理してみたいと思います。
目次
- はじめに
- 目次
- Smart Access Memory(SAM)とは?
- SAMはAMDのGPUとCPUの組み合わせ専用の機能ですか?
- WindowsにおいてGPUがResizable BARを使用にするために必要な要件は何ですか?
- 「BIOSではなくUEFI」というのはどういう意味ですか?
- NVIDIAもSAM相当の機能を実現できますか?
- まとめ
Smart Access Memory(SAM)とは?
これはAMDがRadeon RX 6000シリーズ※1に搭載した、Resizable BAR(後述)を使用したCPU(Central Processing Unit)側からGPU(Graphics Processing Unit)側へのメモリー・アクセスを最適化するための機能につけた名称です。
SAMはAMDのGPUとCPUの組み合わせ専用の機能ですか?
いいえ、違います。
PCI Express 2.0に対するヒューレット・パッカード(HP)とAMDによる共同の追加提案である「Resizable Base Address Registers (BAR) 」を用います。この提案はPCI Express 2.1で標準仕様として取り込まれています※2。近年では仮想化関連でもこの機能が活用されています※3。
このResizable BARを用いてAMDがRadeon RX 6000シリーズで導入した最適化技術のことをAMDはSAMと呼んでいるわけです。
WindowsにおいてGPUがResizable BARを使用にするために必要な要件は何ですか?
以下の要件が必要になるでしょう:
- PCI Express 2.1以降※4
- アドレス空間の関係から事実上64-bit環境が必要※5
- Microsoft Windows 10※6
- Basic Input/Output System(BIOS)ではなくUnified Extensible Firmware Interface(UEFI)を採用していること。
- UEFIがResizable BARを取り扱える状態となっていること。
- UEFIがBIOSとの後方互換を提供するためのCSMを有効にしていないこと(共存不可)※7
- GPUがPCI Expressとソフトウェア互換な方法で接続されていること※8。
- GPUがResizable BARをサポートしていること。
- GPUのデバイス・ドライバーがResizable BARをサポートしていること。
- 現時点(2020年12月14日)では最上位モデルの「Radeon RX 6900 XT」、それに続くモデルとして「Radeon RX 6800 XT」、「Radeon RX 6800」の計3モデルがリリースされています。
- 必須実装ではありません。
- 例:PCI-SIG が標準化したシングル・ルート I/O 仮想化 (SR-IOV) 仕様
- Resizable BARが標準に取り込まれたのが同規格以降のため
- 広いウィンドウを開くためには広いアドレス空間が必要
- Windows Display Driver Model(WDDM) 2.0以降がResizable BARをサポートしているため
- UEFIの設定画面などにおいてもResizable BARを有効にする設定と同時にCSMを有効にするような設定にはできないようになっているはず
- Resizable BARはPCI Expressの規格のため
- CSMはUEFIの規格上は必ずサポートされるものではなく、サポートする場合であってもオプションや組み合わせによっては無効となっていることが多々ある
- 率直に言って、検索エンジン最適化(SEO / Search Engine Optimization)の圧力がとても大きいのではないかと感じています。検索ワードに引っ掛かり表示されるページ以外は検索者にとって存在しないのと同義ですから。
- つまり、PCI-Expressは法的意味のある商標法的にも適切ではない
- 本メモ執筆時点では時間の関係もありAMDの公開している仕様書を細かくチェックしていません。
「BIOSではなくUEFI」というのはどういう意味ですか?
UEFIとBIOSは異なる規格のソフトウェア・モジュールです。Resizable BARを使用するためにはUEFIが必要ということです。
BIOSとUEFIの違いについて
BIOSは現在のPCの系統の最初のIBM PCから拡張を重ね続けてきたパソコン向けファームウェア規格の1つで、32-bitのx86シリーズまでを規格としてサポートしています。
一方でUEFIはBIOSと入れ替えることを前提に新たに開発されたパソコンを含む幅広いコンピューター向けのファームウェア規格の1つで、32-bitのx86シリーズに制約されない多くのアーキテクチャーをサポートしています。その中にはAMD64/Intel64も当然のことながら含まれます。
UEFIはBIOSとは全く異なるファームウェアであり、互換性はありません。x86環境において、起動対象のOSあるいは拡張カードがBIOSを必要とする場合には、互換性を維持するためのソフトウェア・モジュールであるCompatibility Supported Module(CSM)を用いることができることがあります※9が、これを用いるとBIOSの制限事項も互換性を維持するためにUEFI環境へ持ち込むことになります。このため、Resizable BARを使用できなくなります。
このようにUEFIをBIOSと呼ぶのは、macOSをWindowsと呼んだり、AndroidをiOSと呼んだりするのと同レベルで不適切です。
しかし、残念ながら多くのPCユーザー(自作PCユーザーと同義語でもある)はこの違いを理解することができませんでした。結果として、現在はUEFI BIOSと呼んでみたり、UEFIのことをBIOSと呼んでみたりすることが続いています。この現実を受け入れて、マザーボード・ベンダーもマーケティング上の都合もあって両者を意図的に混ぜる形での表記をしているようです※10。
とはいえ、今回のように純粋な技術的話題ではUEFIとBIOSが別のものであることを理解したうえで呼び分ける必要があります。
似たような話題
似たような話題としては「グラフィックス・ボード」あるいは「グラボ」という呼び方に関するものもあります。
PCI Express規格では同規格によってメインのボードに追加される回路のことを「Add-in card」と表記しており、「Add-in board」とはしていません。したがって、「グラフィックス・ボード」や「グラボ」は規格上は適切な呼び名とは言えず、「グラフィックス・カード」が規格上適切ということになります。実際、海外のベンダーのサイトを見ると、「Graphics Card」に分類されていることがほとんどとなっています。日本語への外来語輸入カタカナ言葉はいろいろと難しいものがあります。
さらに蛇足になりますが、「PCI Express」を「PCI-Express」と「-」ありで表記しているものを散見することがありますが、これも誤りです。同規格を制定しているPCI-SIGは「PCI Express」としており、同表記で商標登録をしています。※11
そして、このPCI Expressの短縮表記としては「PCIe」を公式に推奨しています。「PCI-Ex」や「PCI-E」などの表記は公式との差異があり、適切とはいいがたいでしょう。
NVIDIAもSAM相当の機能を実現できますか?
Resizable BARはPCI Express 2.1以降の通常の1つの機能でもあり、またWindows 10がサポートする機能の1つでもあるため、名称は異なることになるのではないかと思われますが、似たような機能を搭載したり実現したりすることは問題なく可能です。
なお、既存のGPUでそれが可能かどうかはGPUとドライバーの設計によりますので、NVIDIAの発表を待つ必要があるでしょう。
現在のところNVIDIAはAmpereアーキテクチャーは対応しているとしています。同アーキテクチャーのGPUを所有している方々は期待をしてもよさそうです。
まとめ
Resizable BARはヒューレット・パッカードとAMDの提案により、2009年3月4日にリリースされたPCI Express 2.1※12に含まれることとなりました。そしてその後Microsoftが2015年7月29日にリリースしたWindows 10の初版からGPU向けの公式サポートを追加しました※13。それを実際に採用したRadeon RX 6000シリーズの登場までにはさらに約5年の歳月を要したことになります。
これはかつてドッグイヤーと評されていたIT業界ではかなりの遅さであったのではないかと思います。
このように下地が用意されていた機能を最初に取り入れたのがAMDだというのはなかなか興味深いことであるように思います。GPUに対して非常にアグレッシブに取り組んできたNVIDIAでもなく、PCI Expressの事実上の総元締めでもあるIntelでもない点が面白いと感じるのです。
ではなぜそのようになったのか、想像を膨らませてみましょう。
AMD日本法人によるAMD HEROESに以下のような記述があります:
NVIDIAがこの機能に先鞭を付けられなかったのは、ひとえにマザーボードメーカーとの協業が必須であり、必然的にチップセットを握っているAMDに話を持ちかけざるを得ないからだろう。素人目にもそれは無理だろうとわかる話ではあるので、プラットフォーム全体を手がけられるAMDが先に手をつけたのはごく自然の流れではないだろうか。
引用元:「Radeon RX 6800 XT/6800」で強いRadeonが久々に戻ってきた!【前編】 (2/7) | AMD HEROES
これはある程度事実を指摘していると私には思えました。
IntelはResizable BARを実際に自社のCPUなどに実装したとしても、それをマザーボード向けのリファレンス・ソフトウェアでは有効にせず、仕様書に載せるだけの対応としたようです。これは、同機能が互換性上の問題を持っているという特性があることを考慮に入れ、同時にそれを活用するハードウェアが存在していない状態では有効にするという動機が見受けられません。ですから、Intelは同機能を回路上に実装し、仕様書にも掲載したものの、それらを含むリファレンス・ソフトウェアではデフォルトで無効とする対応を取っていたのでしょう。そして、それはこれまで何らの問題を生み出しませんでした。
NVIDIAにしてみれば、市場に存在するマザーボードが対応していないことから積極的にResizable BARをサポートする意欲がわかなかったのではないかと思われます。合わせて考えるならば、仮に同機能を使用した実装をテストした結果として、互換性の問題を考慮に入れたうえでマザーボードのベンダーに対して働きかけるモチベーションを生むほどの性能差がなかったのではないかとも考えることができるように思います。しかし、ライバルであるAMDが同機能を積極的に使用したということにより、引けない状態となったのではないでしょうか?
そして実際にResizable BARを使用する実装をしたAMDにしてみれば、CPUとチップセットを提供する立場上、そのリファレンスの回路デザインの提供とともにリファレンス・ソフトウェアをも提供することになります。この立場をもって、特定の段階(AMD Zen 3アーキテクチャーの導入)においてResizable BARをデフォルトでONにしたり、あるいはユーザーの選択で制御することができるようなリファレンス・ソフトウェアを提供し、またマザーボードのベンダーに対してはその目的を告知しないまま、その機能を有効にするように働きかけをしたのではないでしょうか?
その結果として、AMD Zen 3アーキテクチャーを採用したプラットフォームにおいてAMD Radeon RX 6000シリーズとの組み合わせでSAMが使用できるという状態を生み出すことに成功したのではないかと考えられます。
このため、これらのプラットフォームを提供したマザーボードのベンダーも当初はSAMをサポートするマザーボードとして、Intelのものを用意することができなかったのではないでしょうか?
そして、その後に動作要件を理解をした結果として、IntelプラットフォームのマザーボードにおいてもResizable BARを有効にすることでRadeon RX 6000シリーズでSAMを使用できることを確認し、各ベンダーがUEFIの更新版の提供をし始めたが2020年12月13日(日)現在の状況ではないかと思われます。
AMDにしても、IntelプラットフォームでSAMがサポートできる状況が生まれることはRadeonシリーズの販売面から必ずしもマイナスにはならないとともに、NVIDIAもこの機能を使用することでパフォーマンスが上がるのであれば、業界全体として良い方向へと向かうのではないかと思います。
また、AMDのZen 3以前のプラットフォームにおいても、Resizable BARをハードウェア的に省略していないのであれば有効にできる可能性があるかもしれません。もっとも、Resizable BARをサポートしないというPCI ExpressのIPデザイン仕様書もある程度見受けられるため、絶対に実装していると想定することはできないかもしれません。※14
いずれにしても、Intel、AMD、NVIDIAおよび各マザーボード・ベンダーの今後の対応に注目していく必要がありそうです。