このページで得られる理解: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.
BASE_ARCHITECTURES に登録済みで、ビルド対象として扱われる。Cijk_* family の実在を確認済み(wavefront_size=32、v_mfma なし)。BASE_ARCHITECTURES and treated as build targets.Cijk_* family confirmed via disassembly (wavefront_size=32, no v_mfma).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/.
→ 次の問い:「登録されている」は「ビルドされた kernel がある」ことを意味するが、「使われる」ことを意味しない。どの世代に向けて kernel が存在するのか?
→ Next question: "Registered" means "a built kernel exists" — not that it will be used. Which generations have kernels built for them?
観測ポイント:どの 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 |
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 向け Tensile kernel が実際に bundle に存在し、逆アセンブリで確認できるか。
Observation point: Whether gfx1201 Tensile kernels actually exist in the live bundle and can be confirmed via disassembly.
/usr/local/lib/ollama/rocm/rocblas/library/)に gfx1201 ターゲットのファイルが 56 本存在(Phase C 確認)。Kernels.so-000-gfx1201.hsaco(standalone ELF AMD GPU object)が含まれることを確認。Cijk_S_GA(sgpr:14, vgpr:10)・Cijk_S_PostGSU3(sgpr:21, vgpr:11)等を確認。いずれも wavefront_size=32。v_mfma 命令は現行 inspect ウィンドウでは検出なし(matrix multiply-accumulate の未使用を示唆するが、inspect window が全 kernel をカバーしているわけではない)。/usr/local/lib/ollama/rocm/rocblas/library/) (Phase C confirmed).Kernels.so-000-gfx1201.hsaco (standalone ELF AMD GPU object) confirmed present.Cijk_S_GA (sgpr:14, vgpr:10) and Cijk_S_PostGSU3 (sgpr:21, vgpr:11), both wavefront_size=32.v_mfma instructions in the current inspection window (suggests matrix multiply-accumulate not used, but window does not cover all kernels).| 項目Item | 確認値Confirmed Value | ソースSource |
|---|---|---|
| gfx1201 ファイル数gfx1201 file count | 56(Kernels.so + TensileLibrary variants) | Phase C 実機確認 |
| wavefront_size | 32 | Phase E 逆アセンブリ / Disassembly |
| 主要 kernel familyPrimary kernel families | Cijk_S_GA・Cijk_S_PostGSU3・Cijk_S_PostGSU3_VW2 | Phase E 逆アセンブリ / Disassembly |
| v_mfma | inspect window 内では未検出Not detected in inspect window | Phase E |
| 示せること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 |
Cijk_* dispatch が実際に起きているか。rocprofv3 による直接観測が有効な世代のため、確認可能なはず。Cijk_* family を含むか(ビルド済み hsaco の inventory)。v_mfma の欠如が inspect window の限界なのか、gfx1201 向けビルドの設計上の選択なのか。Cijk_* dispatch actually occurs on gfx900 (MI25). Since rocprofv3 direct observation is available on this generation, it should be confirmable.Cijk_* families the gfx942 (MI300X) Tensile kernel bundle actually contains (hsaco inventory).v_mfma reflects the inspect window's limits or a deliberate design choice in the gfx1201 build.