Skip to content

[Engine] HIP gfx103x: the start-up pcie_frac (bandwidth only) is too high when the CPU pool is fast; the PcieAuto refinement (opt-in there) finds 0.20 — enable it by default on gfx103x? #4007

Open

Description

@Vop3p

What I see

On gfx103x the native pack's PCIe share comes from the start-up rule only, 0.55 x min(1, probed GB/s / 20): the runtime refinement (PcieAuto) is the default on gfx12 (decode_defaults_arch_ok) and opt-in elsewhere (STRATA_PCIE_FRAC_DEFAULT=auto). The start-up rule looks at the link and not at the CPU pool, and with a fast pool the share it picks makes the GPU wait for its PCIe experts.

RX 6900 XT, Qwen3.8-Flash-Next IQ3_S pack, main 7dd5cf1, single card, benchmark.py-style 4K / 32K prompts, two runs per arm, interleaved cold starts:

machine link (probe) start-up share refined share (log) decode 4K / 32K, start-up decode 4K / 32K, refined
Windows 11, i9-10900K, PCIe 3.0 x16 12.6 GB/s 0.35 0.20 (pool 70 us per missed expert, 29.4 GB/s) 35.4, 35.5 / 37.1, 34.8 42.6, 42.5 / 43.8, 44.0
Linux, Ryzen 5 5600X, PCIe 4.0 x8 14.1 GB/s 0.39 0.25 then 0.20 (pool 84 then 77 us, 26.7 GB/s) 48.6, 48.7 / 50.5, 50.6 49.6, 49.6 / 51.0, 51.0

Prompt reads do not change (Windows 796-802 / 1,154-1,163 tok/s in every arm, Linux 951-959 / 1,134-1,137).

A fixed sweep on the Windows box agrees with the refined value: decode 4K / 32K at --pcie-frac 0 45.4 / 45.9, 0.1 44.9 / 43.6, 0.2 46.5 / 47.6, 0.3 39.1 / 40.8, 0.35 (auto) 36.4 / 36.9 (two runs each, interleaved). On Windows the share costs more than on Linux because every DMA batch is a WDDM submission (~120 µs more per batch end to end than on Linux in a HIP probe), but the refinement does not need to know that: the pool is simply faster than the link, and the formula link / (link + 1.85 x pool rate) lands on the measured best.

The 4K decode on Windows stays below the fixed 0.2 (42.6 vs 46.5) because the first update comes after 48 windows, so a short answer runs mostly at the start-up share.

Question

Would you take a change that makes PcieAuto the default on gfx103x (pcie_auto_fork_arch_ok returning true there unless STRATA_PCIE_FRAC_DEFAULT=old)? I can open it with 10 interleaved pairs on both machines. I have no gfx11 to say anything about the 7900-series reports in the code comment (one "no regression", one "never engages").

Found while measuring the prompt path on Windows for #4005.

Developed with an AI coding assistant; every number above was measured on the two machines named in the table.

Activity

  1. Niko1221 commented on Oct 29, 2026

    @Niko1221
    Owner

    Thank you. Your numbers agree with #3984: on RDNA2 with a fast CPU pool the start-up PCIe share is too high, and PcieAuto or --pcie-frac 0.2 gave +20% decode on your Windows RX 6900 XT and +13.7% on an RX 6700 XT in #3984. The start-up share was not changed in 0.2.7. Yes, please open the change that makes PcieAuto the default on gfx103x with the ten interleaved pairs on both machines; we have no gfx103x card, so those pairs are what it would be judged on.

  2. kulight commented on Oct 29, 2026

    @kulight

    A correction to the RX 6700 XT figure quoted above from #3984: the +13.7% there was measured against a hand-set --pcie-frac 0.75, not the start-up share. On that machine the start-up rule picks 0.55, and against that --pcie-frac 0.2 is about +12% in decode (45.3 → 50.6 tok/s, medians of 3, same session, all other flags fixed; full sweep with the peak at 0.2 in #3984 (comment)). Same direction, slightly smaller. That run used an abliterated IQ2_XS derivative, and PcieAuto itself was not measured there.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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