Coelacanth's Dream

ECC に対応する Radeon Pro W6800 と過去のパッチ

こうした個人的なデータベースも兼ねたブログをやっていると、そう言えばあれはどうなった?という気掛かりを抱えることがままある。
その 1つが Sienna Cichlid/Navi21 に向けた、ECC機能で検出されたメモリエラーを記録し、レポートする機能を追加するパッチだった。パッチが投稿されたのは 2020/07/27、気付けば 1年近く前だ。 そして、そのパッチにはわずかではあるが HBMメモリに関係する記述があり、下リンク先のようなタイトルを付けた。

だが、 Sienna Cichlid/Navi21 が対応するメモリタイプは GDDR6 で、実際に発表された製品も GDDR6メモリのみを採用している。

記憶の片隅に置きながらそれ以上調べることはせず、新しい情報が公開されるのを待っていたが、現地時間 2021/06/08 付で Sienna Cichlid/Navi21 をベースに、GDDR6メモリを採用しながら ECC機能に対応した Radeon PRO W6800 が発表されたことから再度調べてみようという気になった。

調べ直した結論から言えば、そのパッチから Sienna Cichlid/Navi21 が HBM(2)メモリに対応するといったようなことは読み取れなかった。
つまりこの記事は、過去の自分に向かってお前は間抜けだと言うためのものとなる。

使われていない定数

Sienna Cichlid/Navi21 が HBM(2)メモリに対応しているのではないかという考えは、以下引用部の UMC_V8_7_HBM_MEMORY_CHANNEL_WIDTH から起こったが、端的に書くと、この定数は AMD GPU ドライバーのソースコード中のどこにも使われていない。
同様の定数は Vega20Arcturus/MI100 に向けたコードにもあるが、そちらも使われていない。
恐らく、将来的に使うことを想定して定義したがそのまま使われなかった、あるいは内部で開発中には使っていたのかもしれないが、パッチを公開する段階では使われなくなったものと思われる。
それをそのまま残し、Sienna Cichlid/Navi21 に向けたパッチを作成する時にベースにしたため使われない定数が引き継がれたのだろう。
また、他の定数に関しても、UMC (Unified Memory Controller) あたりのメモリチャネルインスタンス? を求めるためのもので、GPU全体のメモリチャネル・バス幅・メモリコントローラー数はわからない。

 /* HBM  Memory Channel Width */
 #define UMC_V8_7_HBM_MEMORY_CHANNEL_WIDTH	128
 /* number of umc channel instance with memory map register access */
 #define UMC_V8_7_CHANNEL_INSTANCE_NUM		2
 /* number of umc instance with memory map register access */
 #define UMC_V8_7_UMC_INSTANCE_NUM		8
 /* total channel instances in one umc block */
 #define UMC_V8_7_TOTAL_CHANNEL_NUM	(UMC_V8_7_CHANNEL_INSTANCE_NUM * UMC_V8_7_UMC_INSTANCE_NUM)
 /* UMC regiser per channel offset */
 #define UMC_V8_7_PER_CHANNEL_OFFSET_SIENNA	0x400

一応、HBM(2)メモリは ECC用のチェックビットを内蔵した仕様の製品があることも、考えをわずかでも後押ししていたが、GDDR6メモリであってもアルゴリズムによって ECC機能に対応できる。
Radeon PRO W6800 における ECC機能対応は以下のドキュメントで解説されており、各 GDDR6メモリチップの一部容量をチェックビットの格納用に確保する方法を取っている。
この方法では、使用可能なメモリ容量と実効メモリ帯域にオーバーヘッドが発生するはずだが、ドキュメント中では触れられていない。
また、シングルビットエラーの修正とマルチビットエラーの検出に対応するとしており、SECDEDコードを用いていると思われる。

NVIDIA GPU も Quadro シリーズの一部は ECC機能に対応しているが、採用しているアルゴリズムは明かされていない。

GPU における ECC機能については、Hisa Ando 氏がマイナビニュースでの連載で詳細に解説しており、大変参考にさせていただいた。

Hisa Ando氏は個人サイトでも、前の週に起こったプロセサ関係の話題を紹介しており、そうした話題に興味がある方にはぜひ薦めたい。