Tensile

このページで得られる理解:Tensile が生成した GEMM kernel は、どの世代に向けてビルドされているのか——ソースコードの登録状況と、実際に dispatch されるかどうかのギャップを記録する。

What you'll gain here: Which GPU generations Tensile-generated GEMM kernels are built for — and the gap between source registration and whether they're actually dispatched.

gfx900 / gfx942 / gfx1201: ソース登録確認 gfx900 / gfx942 / gfx1201: Source registration confirmed gfx900 / gfx1201: 実 dispatch 未確認 gfx900 / gfx1201: Actual dispatch unconfirmed

このページの結論Page Conclusion

ROCm スタックにおける位置づけPosition in the ROCm Stack

Tensile は rocBLAS(一次)と hipBLASLt(TensileLite 経由)のバックエンドカーネルジェネレータです。GPU アーキテクチャ仕様を入力に、ベンチマーク自動調整(auto-tuning)を経てアセンブリレベルの最適 kernel を出力し、hsaco として rocblas/library/ に配置します。

Tensile is the backend kernel generator for rocBLAS (primary) and hipBLASLt (via TensileLite). Given GPU architecture specifications, it produces assembly-level optimized kernels through automated benchmarking (auto-tuning), placing the resulting hsacos under rocblas/library/.

Tensile (ビルド時at build time) Cijk_*_gfx{900,942,1201}.hsaco → rocblas/library/Kernels.so-000-gfx*.hsaco 実行時(rocBLAS 経由):At runtime (via rocBLAS): rocBLAS Processor enum lookup Cijk_* kernel dispatch

→ 次の問い:「登録されている」は「ビルドされた kernel がある」ことを意味するが、「使われる」ことを意味しない。どの世代に向けて kernel が存在するのか?

→ Next question: "Registered" means "a built kernel exists" — not that it will be used. Which generations have kernels built for them?

世代横断:Tensile ソース登録状況Cross-Generation: Tensile Source Registration

観測ポイント:どの GPU 世代が Tensile のビルド対象として登録されているか。
文脈:「世代ごとの世界観」フレームで gfx900/gfx942/gfx1201 を比較するため、ソース側の登録状況を確認する。
ソース:Tensile リポジトリ / next-cmake/cmake/TensileSupportedArchitectures.cmake(line 32–51)および Tensile/Tensile/Common.py(line 320–331)

Observation point: Which GPU generations are registered as Tensile build targets.
Context: To compare gfx900/gfx942/gfx1201 under the "per-generation worldview" frame, confirm source-side registration.
Source: Tensile repository / next-cmake/cmake/TensileSupportedArchitectures.cmake (lines 32–51) and Tensile/Tensile/Common.py (lines 320–331)

世代Generation GFX BASE_ARCHITECTURESBASE_ARCHITECTURES Common.py コード名Common.py codename xnack バリアントxnack variants 世界観Worldview
GCN5 / MI25 gfx900 登録済み(line 34)Registered (line 34) vega10 なしNone fallback が主戦場——ggml-hip に gfx900 向け kernel なしFallback is the main stage — no gfx900 custom kernels in ggml-hip
RDNA4 / RX9070XT gfx1201 登録済み(line 51)Registered (line 51) gfx1201 なしNone Cijk_* 実在確認済み、dispatch は observer 制約で未確定Cijk_* confirmed present; dispatch unresolved due to observer constraints
CDNA4 / MI300X gfx942 登録済み(line 38)Registered (line 38) aquavanjaram942 gfx942:xnack+ / gfx942:xnack- 本命経路(正規ルートの確認が主)Primary path expected; canonical route confirmation is the main work
3 世代とも BASE_ARCHITECTURES に登録済み。ただし gfx900 は ggml-hip 側に custom kernel を持たないため、LLM 推論での Tensile kernel 利用は BLAS fallback 経由に限定される可能性が高い。 All three generations are registered in BASE_ARCHITECTURES. However, since ggml-hip has no gfx900 custom kernels, Tensile kernel usage in LLM inference on MI25 is likely limited to the BLAS fallback path.

→ 次の問い:gfx1201 向けに実際に生成された Tensile kernel とはどんなものか?

→ Next question: What do the actual Tensile kernels generated for gfx1201 look like?

gfx1201 実機観測(RX9070XT)gfx1201 Live Observation (RX9070XT)

観測ポイント:gfx1201 向け Tensile kernel が実際に bundle に存在し、逆アセンブリで確認できるか。

Observation point: Whether gfx1201 Tensile kernels actually exist in the live bundle and can be confirmed via disassembly.

項目Item 確認値Confirmed Value ソースSource
gfx1201 ファイル数gfx1201 file count56(Kernels.so + TensileLibrary variants)Phase C 実機確認
wavefront_size32Phase E 逆アセンブリ / Disassembly
主要 kernel familyPrimary kernel familiesCijk_S_GACijk_S_PostGSU3Cijk_S_PostGSU3_VW2Phase E 逆アセンブリ / Disassembly
v_mfmainspect window 内では未検出Not detected in inspect windowPhase E

示せること / 示せないことWhat Can and Cannot Be Shown

示せることCan Show 示せないことCannot Show
gfx900 / gfx942 / gfx1201 全世代が Tensile ビルド対象として登録されている(ソース確認)All three generations (gfx900/gfx942/gfx1201) are registered as Tensile build targets (source-confirmed) 登録 = 実際に dispatch される、ではない。catalog 上の存在と実行は別Registration ≠ actually dispatched. Catalog presence and execution are separate
gfx1201 向け Cijk_* kernel が bundle に存在すること(Phase C/E 実機確認)gfx1201 Cijk_* kernels exist in the live bundle (Phase C/E confirmed) LLM 推論中に Cijk_* が dispatch されたかは、dispatch-safe observer なしには確定不可Whether Cijk_* was dispatched during LLM inference cannot be confirmed without a dispatch-safe observer
gfx900 は ggml-hip fatbin に custom kernel を持たないこと(文字列スキャン確認)gfx900 has no custom kernels in the ggml-hip fatbin (string scan confirmed) gfx900 での BLAS 経由 Tensile dispatch の詳細(どの kernel が選ばれるか)は未観測Details of BLAS-mediated Tensile dispatch on gfx900 (which kernel is selected) remain unobserved

未確定事項Open Questions

次の観測点Next Observation Points

掲載情報は観測記録に基づきます。未確定事項は確定次第更新します。 Content is grounded in observation logs. Open questions are updated as findings solidify.