Skip to content

ROCm skinny GEMM architecture eligibility caches the first device #1183

Description

@VikashLoomba

Problem

PR #506 adds the wave32-only ROCm wvSplitK skinny GEMM. Its dispatcher currently implements:

bool SkinnyGemmArchOk(int device_index) {
  static const std::string arch = vt::rocm::DeviceArchName(device_index);
  ...
}

The function accepts a device index but caches only the first device's architecture. In a heterogeneous process, a first call on gfx11/gfx12 poisons later calls on gfx9 as eligible. The adjacent source comment says the unported wave64 arm would then produce silently wrong sums.

A fresh integration reviewer found this while rebasing #506 onto main's dual-slot GetBlas/device-hop seam. The existing focused test uses only device index 0, so it cannot detect the defect.

Required fix

  • Cache/evaluate eligibility by device, without adding a per-token HIP property probe or a hot-path global lock.
  • Add a RED-first device-hop test using a deterministic architecture resolver/cache seam, because this host's four GPUs are all gfx1100.
  • Preserve the wave32-only gfx11/gfx12 policy, unknown-architecture refusal, main's dual-slot GetBlas behavior, and all existing wvSplitK guards.
  • Mutation-prove that collapsing eligibility back to the first device makes the new test fail.

Ownership

Owning row: BACKEND-ROCM. Fix in the existing PR #506 flow before its rebased head is pushed.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions