Coelacanth's Dream

【雑記】 Smart Access Memory を巡って錯綜する情報

端的に書きたい。

まず、Ryzen 3000シリーズとそれ以前の AMD CPU で Smart Access Memory がサポートされない理由として、TechPowerUP が full-rate _pdep_u32/64 と呼ばれる PCIe物理層が実装されていないからとしている。

だが、_pdep_u32/64 は PDEP命令を利用する組み込み関数で、指定したオペランドの連続する下位ビットを、ビットマスクに応じて取り出し、コピーするというもの。1
PCIe物理層ではない。
記事はソースとして、ある Twitterユーザーのツイートを挙げているが、何故プロセッサエミュレーターである QEMU が根拠となるのか分からない。
そして、PEXT/PDEP命令が Zen 3 以前ではマイクロコード実装だったが、Zen 3 からネイティブに実装されたことを根拠にしている。
そのこと自体は事実だが、やはり何故 Smart Access Memory に結びつくのかが分からない。

そして、Smart Access Memory / Resizeable-PCI BAR は自分が書いたように、AMD CPU では Bulldozer(15h) 世代から Linux ではサポートされているし、Ryzen 5 2600 (Zen+/17h)RX 560 (Polaris11) でも動作した。
Linux環境と Ryzen 5 2600、Radeon RX 560 で “Smart Access Memory” 機能を試す | Coelacanth’s Dream AMD Smart Access Memory 再調査 ―― Bulldozer世代の CPU/APU でも有効可能 | Coelacanth’s Dream

Linux と Windows で実装が違うことが考えられるが、Smart Access Memory の実態が PCIe の仕様にある Resizeable-PCI BAR を利用したものである以上そう変わるとも思えない。
なら何故 Ryzen 3000シリーズ とそれ以前の Ryzen CPU でサポートしないのかは単にマーケティングとサポートに掛かるコストの問題のように思う。

Linuxを使う自環境では動作したが、これを Windowsに移した時も同様に Smart Access Memory / Resizeable PCI BAR が動作するかは不明。
ただ、そもそもそれが動作しているかを確かめる方法が乏しいし、クローズドな Windows の中身がどうなってるかなんて知りっこない。

参考リンク