Skip to content

Add an mxfp8-input version of the gemm_proj_rope_mxfp8 kernel. - #438

Merged
Anerudhan merged 5 commits into
NVIDIA:developfrom
chaseblock:fusions
Jul 28, 2026
Merged

Add an mxfp8-input version of the gemm_proj_rope_mxfp8 kernel.#438
Anerudhan merged 5 commits into
NVIDIA:developfrom
chaseblock:fusions

Conversation

@chaseblock

@chaseblock chaseblock commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

This also modifies the existing kernel (renaming it to _bf16in) and its API so that the correct version of the kernel is selected.

Before submitting

  • I agree to license this contribution under the terms of LICENSE.txt.
  • I ran pre-commit run and committed any formatting changes.

Affected area

  • FE OSS kernels or CuTeDSL

Summary

Updating the gemm_proj_rope_mxfp8 with a second kernel specialized for mxfp8 inputs (instead of bf16).

Why

Some training recipes perform the projections in bf16, and some in mxfp8. We want to support fusion for both.

API and compatibility impact

This does change the name of the existing kernel (for better disambiguation), but the wrapper name remains the same.

Summary by CodeRabbit

  • New Features
    • Added two SM100 GEMM+RoPE+MXFP8 variants: BF16-input and MXFP8-input.
    • Updated the wrapper to dispatch by x/w dtype, with MXFP8 requiring x_scale/w_scale, and producing dual-direction MXFP8 outputs.
  • Documentation
    • Updated shapes, dtype/scale requirements, and wrapper/class usage examples for both input paths.
  • Bug Fixes
    • Strengthened support validation, including RoPE shape checks and variant-specific constraints.
  • Tests
    • Refactored test coverage into BF16-input and MXFP8-input suites and added wrapper contract tests.

This also modifies the existing kernel (renaming it to _bf16in)
and its API so that the correct version of the kernel is selected.
@coderabbitai

coderabbitai Bot commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 0dc1c06f-7130-4dde-914b-3ab42eb875f9

📥 Commits

Reviewing files that changed from the base of the PR and between d8ff4d0 and c6610c0.

📒 Files selected for processing (2)
  • python/cudnn/gemm_proj_rope_mxfp8/gemm_proj_rope_mxfp8_bf16in.py
  • python/cudnn/gemm_proj_rope_mxfp8/gemm_proj_rope_mxfp8_mxfp8in.py
🚧 Files skipped from review as they are similar to previous changes (2)
  • python/cudnn/gemm_proj_rope_mxfp8/gemm_proj_rope_mxfp8_bf16in.py
  • python/cudnn/gemm_proj_rope_mxfp8/gemm_proj_rope_mxfp8_mxfp8in.py

📝 Walkthrough

Walkthrough

The fused GEMM+RoPE+MXFP8 API now supports separate BF16-input and MXFP8-input SM100 paths. It adds dtype-based wrapper dispatch, a dedicated MXFP8 CUTLASS kernel, updated exports and validation, expanded tests, and documentation for both input formats.

Changes

GEMM RoPE MXFP8 input variants

Layer / File(s) Summary
API classes and dtype dispatch
python/cudnn/gemm_proj_rope_mxfp8/api.py, python/cudnn/gemm_proj_rope_mxfp8/__init__.py, python/cudnn/__init__.py, python/cudnn/gemm_proj_rope_mxfp8/gemm_proj_rope_mxfp8_bf16in.py
Adds BF16-input and MXFP8-input API classes, shared validation, separate caches, dtype-based wrapper dispatch, removes the old run path, and updates lazy/public exports.
MXFP8 kernel implementation
python/cudnn/gemm_proj_rope_mxfp8/gemm_proj_rope_mxfp8_mxfp8in.py
Adds scaled MXFP8 GEMM, RoPE, quantization, packing, TMA/MMA processing, and host launch logic.
Variant validation and reference coverage
test/python/fe_api/gemm/test_gemm_proj_rope_mxfp8.py, test/python/fe_api/gemm/test_gemm_proj_rope_mxfp8_utils.py
Splits tests by input precision and adds MXFP8 quantization helpers, wrapper contract checks, cache coverage, and reference validation.
Public API documentation
docs/fe-oss-apis/gemm_fusions/gemm_proj_rope_mxfp8.md
Documents both input paths, tensor contracts, wrapper usage, divisibility rules, and module provenance.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Caller
  participant Wrapper
  participant API
  participant Kernel
  Caller->>Wrapper: provide x, w, and optional scales
  Wrapper->>API: dispatch by input dtype
  API->>Kernel: compile and execute selected path
  Kernel-->>Wrapper: produce row/column MXFP8 outputs and scales
  Wrapper-->>Caller: return output tensors
Loading

Possibly related PRs

  • NVIDIA/cudnn-frontend#367: Refactors the same GEMM+RoPE+MXFP8 API surface and introduces the corresponding dtype-specific classes and exports.

Suggested labels: cat-feature, mod-backend

Suggested reviewers: anerudhan

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 34.09% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title matches the main change: adding an MXFP8-input kernel variant and related API update.
Description check ✅ Passed The description covers the required sections and is mostly complete, with only minor gaps like Related issues and detailed Testing.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🧹 Nitpick comments (7)
python/cudnn/gemm_proj_rope_mxfp8/gemm_proj_rope_mxfp8_mxfp8in.py (3)

642-644: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Unused host-side computation.

acc_shape/tCtAcc_fake are computed here but never used — the kernel recomputes them from tiled_mma (Lines 280-281). Safe to delete.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@python/cudnn/gemm_proj_rope_mxfp8/gemm_proj_rope_mxfp8_mxfp8in.py` around
lines 642 - 644, Remove the unused host-side acc_shape and tCtAcc_fake
computations near NUM_TMEM_COLS; the kernel already recomputes the required
fragments from tiled_mma, so leave NUM_TMEM_COLS and the surrounding setup
unchanged.

392-398: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Dead assignment.

tCtSFB_mma = tCtSFB on Line 392 is unconditionally overwritten on Line 398; drop it.

🧹 Proposed cleanup
             tCtAcc = tCtAcc_base[(None, None, None, acc_empty.index)]
-            tCtSFB_mma = tCtSFB
             offset = cutlass.Int32((n_idx % 2) * 2)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@python/cudnn/gemm_proj_rope_mxfp8/gemm_proj_rope_mxfp8_mxfp8in.py` around
lines 392 - 398, Remove the redundant initial assignment to tCtSFB_mma in the
surrounding tensor setup; retain the later cute.make_tensor assignment using
shifted_sfb_ptr as the sole initialization.

109-145: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Duplicated inline-asm reciprocal snippet.

Lines 122-130 in _e8m0 are a byte-for-byte copy of _e8m0_inv; have _e8m0 call it so the PTX exists in one place.

♻️ Proposed dedup
     sbyte32 = cutlass.Int32(packed_i16) & cutlass.Int32(0xFF)
-    inv_bits = _llvm_dialect.inline_asm(
-        _mlir_ir.F32Type.get(),
-        [_Int32Sym(sbyte32).ir_value()],
-        "{ .reg .s32 t; sub.s32 t, 254, $1; shl.b32 t, t, 23; mov.b32 $0, t; }",
-        "=f,r",
-        has_side_effects=False,
-        is_align_stack=False,
-        asm_dialect=_llvm_dialect.AsmDialect.AD_ATT,
-    )
-    return cutlass.Float32(inv_bits), sbyte32
+    return _e8m0_inv(sbyte32), sbyte32

Note this requires moving _e8m0_inv above _e8m0.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@python/cudnn/gemm_proj_rope_mxfp8/gemm_proj_rope_mxfp8_mxfp8in.py` around
lines 109 - 145, Move _e8m0_inv above _e8m0, then replace the duplicated
inv_bits inline-assembly block in _e8m0 with a call to _e8m0_inv(sbyte32).
Preserve _e8m0’s returned Float32 reciprocal value and sbyte32 unchanged,
leaving the reciprocal PTX implementation solely in _e8m0_inv.
test/python/fe_api/gemm/test_gemm_proj_rope_mxfp8.py (2)

29-40: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Consider demoting the 4096-token MXFP8 sweep out of L0.

Both MXFP8-input tests compile a fresh SM100 kernel and run the full PyTorch reference oracle for tokens=2048 and 4096. Keeping 2048 at L0 and moving 4096 to a higher level would keep the fast tier fast.

As per coding guidelines: "Mark every new Python test with a level from L0 through L4; keep L0 tests fast and place large parameter sweeps at higher levels."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@test/python/fe_api/gemm/test_gemm_proj_rope_mxfp8.py` around lines 29 - 40,
The parameterized MXFP8-input tests
test_gemm_proj_rope_mxfp8_mxfp8in_compile_execute and
test_gemm_proj_rope_mxfp8_mxfp8in_wrapper should keep the 2048-token case at L0
while assigning the 4096-token case to an appropriate higher test level,
preserving both existing test variants.

Source: Coding guidelines


149-178: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Wrapper contract test: consider asserting on the message, not just AssertionError.

All three cases only assert the exception type. Since AssertionError is also raised by unrelated internal asserts on the same call path, pytest.raises(AssertionError, match=...) would pin each case to its intended contract (dtype agreement, missing scales, scales-with-bf16).

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@test/python/fe_api/gemm/test_gemm_proj_rope_mxfp8.py` around lines 149 - 178,
The test test_wrapper_rejects_dtype_mismatch_and_missing_scales should validate
each wrapper contract via the AssertionError message, not only its type. Add
distinct pytest.raises match patterns for dtype disagreement, missing FP8
scales, and scales supplied with BF16 inputs, while preserving the existing
inputs and calls.
python/cudnn/__init__.py (1)

319-320: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Removed GemmProjRopeMxfp8Sm100 is a breaking export change.

The lazy table no longer resolves the old name, so cudnn.GemmProjRopeMxfp8Sm100 now raises AttributeError. Intentional per the PR objectives and the API is experimental; consider a temporary alias entry pointing at the bf16-input class if any downstream pins the old name.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@python/cudnn/__init__.py` around lines 319 - 320, Add a temporary lazy-export
alias for GemmProjRopeMxfp8Sm100 in the export table, resolving it to the
existing GemmProjRopeMxfp8Bf16InSm100 class so cudnn.GemmProjRopeMxfp8Sm100
remains available while preserving the current exports.
python/cudnn/gemm_proj_rope_mxfp8/api.py (1)

449-450: 🚀 Performance & Scalability | 🔵 Trivial | 💤 Low value

Module-level caches grow without bound.

_bf16in_obj_cache/_mxfp8in_obj_cache retain compiled kernels for every distinct (shape, device) key for the process lifetime. Fine for fixed training shapes, but worth a size bound or eviction if callers vary token counts. Consistent with sibling packages, so purely optional.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@python/cudnn/gemm_proj_rope_mxfp8/api.py` around lines 449 - 450, Bound the
module-level _bf16in_obj_cache and _mxfp8in_obj_cache so compiled kernels do not
accumulate indefinitely across distinct shape/device keys. Add a bounded-cache
or eviction policy consistent with sibling packages, while preserving cache
reuse for recent entries.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/fe-oss-apis/gemm_fusions/gemm_proj_rope_mxfp8.md`:
- Around line 23-27: Document the w_scale orientation consistently at both
affected sites in docs/fe-oss-apis/gemm_fusions/gemm_proj_rope_mxfp8.md: lines
23-27 and 118-131. Update the w_scale shape to state (Q_LORA // BLOCK,
NUM_HEADS·HEAD_DIM) when w_out_in=False and (NUM_HEADS·HEAD_DIM, Q_LORA //
BLOCK) when w_out_in=True, matching the wrapper’s transpose behavior and the
existing w documentation.

In `@python/cudnn/gemm_proj_rope_mxfp8/gemm_proj_rope_mxfp8_mxfp8in.py`:
- Around line 482-484: Update the address calculations in the mxfp8 input/output
path around cs_row_bytes, row_bytes, cos_base, sin_base, and the corresponding
mQrow/mQcol pointers so they use actual tensor strides rather than assuming
contiguous layouts. Alternatively, extend check_support() in api.py to reject
non-contiguous cos, sin, and output tensors before mark_layout_dynamic; apply
the same correction to the later duplicated calculations.
- Around line 65-67: Update the MXFP8 path to prevent a hardcoded K=1536 scale
stride: either derive K_SCALE_WORDS and the _relay_scale_words strides from the
actual K dimension/scale tensor shape, or add an explicit k_dim == 1536
requirement in the MXFP8 check_support validation. Ensure unsupported K
dimensions are rejected before compilation and scale indexing remains correct.
- Around line 204-217: Update the MXFP8 support validation in check_support to
require an even num_heads value, preventing the SFB relay path from processing
an out-of-range final head; preserve the existing sfb_row_base and relay-copy
logic in the kernel.

---

Nitpick comments:
In `@python/cudnn/__init__.py`:
- Around line 319-320: Add a temporary lazy-export alias for
GemmProjRopeMxfp8Sm100 in the export table, resolving it to the existing
GemmProjRopeMxfp8Bf16InSm100 class so cudnn.GemmProjRopeMxfp8Sm100 remains
available while preserving the current exports.

In `@python/cudnn/gemm_proj_rope_mxfp8/api.py`:
- Around line 449-450: Bound the module-level _bf16in_obj_cache and
_mxfp8in_obj_cache so compiled kernels do not accumulate indefinitely across
distinct shape/device keys. Add a bounded-cache or eviction policy consistent
with sibling packages, while preserving cache reuse for recent entries.

In `@python/cudnn/gemm_proj_rope_mxfp8/gemm_proj_rope_mxfp8_mxfp8in.py`:
- Around line 642-644: Remove the unused host-side acc_shape and tCtAcc_fake
computations near NUM_TMEM_COLS; the kernel already recomputes the required
fragments from tiled_mma, so leave NUM_TMEM_COLS and the surrounding setup
unchanged.
- Around line 392-398: Remove the redundant initial assignment to tCtSFB_mma in
the surrounding tensor setup; retain the later cute.make_tensor assignment using
shifted_sfb_ptr as the sole initialization.
- Around line 109-145: Move _e8m0_inv above _e8m0, then replace the duplicated
inv_bits inline-assembly block in _e8m0 with a call to _e8m0_inv(sbyte32).
Preserve _e8m0’s returned Float32 reciprocal value and sbyte32 unchanged,
leaving the reciprocal PTX implementation solely in _e8m0_inv.

In `@test/python/fe_api/gemm/test_gemm_proj_rope_mxfp8.py`:
- Around line 29-40: The parameterized MXFP8-input tests
test_gemm_proj_rope_mxfp8_mxfp8in_compile_execute and
test_gemm_proj_rope_mxfp8_mxfp8in_wrapper should keep the 2048-token case at L0
while assigning the 4096-token case to an appropriate higher test level,
preserving both existing test variants.
- Around line 149-178: The test
test_wrapper_rejects_dtype_mismatch_and_missing_scales should validate each
wrapper contract via the AssertionError message, not only its type. Add distinct
pytest.raises match patterns for dtype disagreement, missing FP8 scales, and
scales supplied with BF16 inputs, while preserving the existing inputs and
calls.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 48d1b477-252a-4344-a1d3-941447b55f04

📥 Commits

Reviewing files that changed from the base of the PR and between d2d0d02 and 6af16cb.

📒 Files selected for processing (8)
  • docs/fe-oss-apis/gemm_fusions/gemm_proj_rope_mxfp8.md
  • python/cudnn/__init__.py
  • python/cudnn/gemm_proj_rope_mxfp8/__init__.py
  • python/cudnn/gemm_proj_rope_mxfp8/api.py
  • python/cudnn/gemm_proj_rope_mxfp8/gemm_proj_rope_mxfp8_bf16in.py
  • python/cudnn/gemm_proj_rope_mxfp8/gemm_proj_rope_mxfp8_mxfp8in.py
  • test/python/fe_api/gemm/test_gemm_proj_rope_mxfp8.py
  • test/python/fe_api/gemm/test_gemm_proj_rope_mxfp8_utils.py
💤 Files with no reviewable changes (1)
  • python/cudnn/gemm_proj_rope_mxfp8/gemm_proj_rope_mxfp8_bf16in.py

Comment thread docs/fe-oss-apis/gemm_fusions/gemm_proj_rope_mxfp8.md
Comment thread python/cudnn/gemm_proj_rope_mxfp8/gemm_proj_rope_mxfp8_mxfp8in.py Outdated
Comment thread python/cudnn/gemm_proj_rope_mxfp8/gemm_proj_rope_mxfp8_mxfp8in.py
Comment thread python/cudnn/gemm_proj_rope_mxfp8/gemm_proj_rope_mxfp8_mxfp8in.py

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
docs/fe-oss-apis/gemm_fusions/gemm_proj_rope_mxfp8.md (2)

87-114: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Import the classes used by the examples.

Both class API snippets reference GemmProjRopeMxfp8Bf16InSm100 and GemmProjRopeMxfp8Mxfp8InSm100 without importing them, so copying either example raises NameError. Add imports from the documented public package exports.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/fe-oss-apis/gemm_fusions/gemm_proj_rope_mxfp8.md` around lines 87 - 114,
Add imports for GemmProjRopeMxfp8Bf16InSm100 and GemmProjRopeMxfp8Mxfp8InSm100
from the documented public package exports before their respective class API
examples, so both snippets can run without NameError.

102-113: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Make the MXFP8 class layout contract explicit.

This direct class example omits w_out_in, while its comment claims TE-native [out, in] weights. The documented default at Line 130 applies to the wrapper, not clearly to the class API. Pass w_out_in=True explicitly or document the class default and expected w_code/w_scale layout to prevent callers from supplying a shape the class interprets incorrectly.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/fe-oss-apis/gemm_fusions/gemm_proj_rope_mxfp8.md` around lines 102 -
113, The MXFP8 class example must make the weight-layout contract explicit.
Update the GemmProjRopeMxfp8Mxfp8InSm100 constructor example to pass
w_out_in=True when using TE-native [out, in] weights, or clearly document the
class default and the expected w_code/w_scale layout; ensure the surrounding
comment matches that behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@docs/fe-oss-apis/gemm_fusions/gemm_proj_rope_mxfp8.md`:
- Around line 87-114: Add imports for GemmProjRopeMxfp8Bf16InSm100 and
GemmProjRopeMxfp8Mxfp8InSm100 from the documented public package exports before
their respective class API examples, so both snippets can run without NameError.
- Around line 102-113: The MXFP8 class example must make the weight-layout
contract explicit. Update the GemmProjRopeMxfp8Mxfp8InSm100 constructor example
to pass w_out_in=True when using TE-native [out, in] weights, or clearly
document the class default and the expected w_code/w_scale layout; ensure the
surrounding comment matches that behavior.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 7279ce38-08a2-4ed8-a7eb-2e17d1d56a47

📥 Commits

Reviewing files that changed from the base of the PR and between 6af16cb and 957a64a.

📒 Files selected for processing (4)
  • docs/fe-oss-apis/gemm_fusions/gemm_proj_rope_mxfp8.md
  • python/cudnn/gemm_proj_rope_mxfp8/api.py
  • python/cudnn/gemm_proj_rope_mxfp8/gemm_proj_rope_mxfp8_mxfp8in.py
  • test/python/fe_api/gemm/test_gemm_proj_rope_mxfp8.py
🚧 Files skipped from review as they are similar to previous changes (3)
  • python/cudnn/gemm_proj_rope_mxfp8/gemm_proj_rope_mxfp8_mxfp8in.py
  • test/python/fe_api/gemm/test_gemm_proj_rope_mxfp8.py
  • python/cudnn/gemm_proj_rope_mxfp8/api.py

@Anerudhan

Copy link
Copy Markdown
Collaborator

@cudnn-ci-bot run

@cudnn-ci-bot

Copy link
Copy Markdown

🚀 Running mirror pipeline

Branch: cudnn-gh/pr-438-d8ff4d0
Pipeline: 59834298

@Anerudhan Anerudhan added orig-nv-eng Reported or requested by NVIDIA engineering. mod-cutedsl CuTeDSL kernels, generated kernels, examples, or related integration work. cat-enhancements labels Jul 28, 2026
@Anerudhan Anerudhan added this to the Frontend 1.27.0 milestone Jul 28, 2026
@Anerudhan
Anerudhan merged commit c0b118a into NVIDIA:develop Jul 28, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cat-enhancements mod-cutedsl CuTeDSL kernels, generated kernels, examples, or related integration work. orig-nv-eng Reported or requested by NVIDIA engineering.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants