先日正体不明の GPUID: gfx1013 を LLVM に追加するパッチを取り上げたが、そのパッチに進展があった。 だがそれも gfx1013 の正体を明かしてくれるどころか、謎を深める奇妙なものだった。
RDN/GFX10.1世代に新たな GPUID、gfx1013? | Coelacanth’s Dream
Index
gfx1013 は APU に割り当てられている?
パッチを投稿した bcahoon (Brendon Cahoon) 氏がレビューを受けて追加したコメント、コードに反映した内容によると、gfx1013 は APU に割り当てられた GPUID だという。1
``gfx1013`` ``amdgcn`` APU - cumode - Absolute - *rocm-amdhsa* *TBA* - wavefrontsize64 flat - *pal-amdhsa* - xnack scratch - *pal-amdpal* .. TODO:: Add product names.
RDNA/GFX10.1/Navi1x 世代はこれまで dGPU しか存在せず、オープンソースドライバーにおいてはそれらのみをサポートしていたが、今回で、コンパイラバックエンドである LLVM部とはいえ RDNA/GFX10.1 世代の APU サポートが開始されたことになる。
レイトレーシング命令をサポート?
同様にコメントとパッチの内容から読み取れるものだが、gfx1013 は RDNA 2/GFX10.3 世代でサポートしているレイトレーシング処理を行うための命令 image_bvh_intersect_ray/image_bvh64_intersect_ray
、サンプラーを用いずにコンポーネントから最大 4個のサンプルをロードする image_msaa_load
をサポートしているようだ。
繰り返しになるがそれら命令は RDNA 2/GFX10.3 世代でサポートされた命令であり、GPUIDのフォーマット上では RDNA/GFX10.1 世代となる gfx1013 がサポートしているのはやはり奇妙な話だ。
また、前回はどう活用されるのか不明とした GFX_10A
命令フォーマット (GFX10_AEncoding
) だが、それら 2種の命令サポートの有無を判定するのに用いられている。
RDNA 2/GFX10.3 世代のサポート時には GFX10_BEncoding
が追加されており、それが命令サポートの判定に用いられていた。また、RDNA 2/GFX10.3 世代では V_MAC_LEGACY_F32/V_MAD_LEGACY_F32
命令が削除され、V_FMAC_LEGACY_F32/V_FMA_LEGACY_F32
に置き換わられており、その置き換え処理にも用いられている。2
GFX10_BEncoding
に関する変更は無いため、gfx1013 は RDNA/GFX10.1 同様に V_MAC_LEGACY_F32/V_MAD_LEGACY_F32
をサポートしているものと思われる。
レイトレーシングをサポートする AMD APU が存在しない訳ではなく、Xbox Series S|X 、PS5 といったゲーム機向け APU/SoC が該当するものとして思い浮かぶが、そういったものは公開されていない情報が多く、現時点では他オープンソースドライバー等に AMD のソフトウェアエンジニア方によるサポートは追加されていないため、自分が持ち合わせている情報もほとんど無く、判断するには乏しい。
仮にそうだとしても今になって LLVM にサポートが追加されるというタイミングに対する疑問が生まれる。
RDNA 2 APU である VanGogh、Yellow Carp もレイトレーシング命令自体はサポートしているものと思われるが、それらは同時に RDNA 2/GFX10.3 世代においてドット積命令等、他の命令/機能もサポートしているため、 gfx1013 からは外れると考えられる。
gfx1013 の詳細が一部明らかにされはしたが、やはり対応命令、機能的には Navi10/gfx1010 をベースに、レイトレーシング命令を追加でサポートした APU の正体は何なのか、という謎は残る。