Repository navigation
fix(miopen): resolve uint64_t typedef conflict with system headers on LP64 Linux - #12623
Merged
schung-amd merged 6 commits intoSep 29, 2026
Merged
schung-amd merged 6 commits into
schung-amd merged 6 commits into
Conversation
… LP64 Linux miopen_cstdint.hpp typedefs uint64_t as __hip_internal::uint64_t (unsigned long long), but on LP64 Linux <stdint.h> defines uint64_t as unsigned long. These are distinct C++ types despite being the same width, causing a hard compilation error when both definitions are visible during MIOpen's runtime kernel compilation (comgr/HIPRTC JIT path). Use platform-appropriate types: unsigned long on LP64 (Linux/macOS) and unsigned long long on LLP64 (Windows), matching what the system <stdint.h> provides on each platform. Fixes: ROCm/TheRock#6258 Co-Authored-By: Claude <noreply@anthropic.com>
✅ All Checks Passed — Ready for Review
📖 Need help? See the Policy FAQ for details on every check and how to fix failures. |
Pre-commit check failed⛔ pre-commit failed Please run locally:
This repo uses |
Rename test suites to CPU_MiopenCstdintLP64_NONE to match the required pattern: (CPU|GPU)_<Name>_<Datatype>. Co-Authored-By: Claude <noreply@anthropic.com>
|
🎉 All checks passed! This PR is ready for review. |
averinevg
reviewed
Sep 28, 2026
averinevg
left a comment
Contributor
There was a problem hiding this comment.
Thanks for the fix. Left some comments.
- Use __UINT64_TYPE__ / __INT64_TYPE__ compiler builtins instead of __LP64__ guards (reviewer suggestion) - Switch test to SPDX license header - Rewrite test to exercise the real comgr JIT path via Handle::AddKernel with inline kernel source including miopen_cstdint.hpp Co-Authored-By: Claude <noreply@anthropic.com>
…flict The original bug requires both system <stdint.h> and miopen_cstdint.hpp to be visible during JIT compilation. Include <stdint.h> explicitly in the test kernel source to ensure the typedef conflict would be triggered with the old code, matching the MIOpenNeuron.cpp failure pattern. Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
schung-amd
deleted the
users/schung-amd/fix-miopen-cstdint-lp64-typedef-conflict
branch
September 29, 2026 14:36
Contributor
TheRock Submodule Bump ActivityNewest first
|
mattwill-amd
pushed a commit
that referenced
this pull request
Oct 14, 2026
JIRA ID: ALMIOPEN-2913 ## Motivation Only 5 of the 30 commits that landed against `projects/miopen` since the 3.6.2 version bump (`2d20a8f775e`, #12211) were reflected in `CHANGELOG.md`. The remaining 25 were reviewed and the 15 externally-visible ones documented, so the ROCm 10.2.0 section accurately reflects what shipped. 14 entries added (two of the fixes share one entry), plus a duplicate-heading fix. ### Added * [Conv] NHWC (channel-last) support in the GEMM convolution solvers, with new im2col/col2im kernels (#8693) * [Conv] Cross-architecture AI heuristics for immediate mode (`MIOPEN_FIND_MODE=2`), extending data-driven selection to Navi (#9680) * [Conv] Missing 3x3 stride-1 pad-1 tile-28 CK depthwise backward-data instance — ALMIOPEN-2423 (#11271) ### Changed * [Conv] `ConvHipConv` held out of the AI perf-config picker until its model is retrained — ALMIOPEN-2494 (#13337) * [Conv] CK byte-span gate lifted for forward and backward-data, now that CK fixes the 32-bit offset overflow itself — ALMIOPEN-2645 (#12396) ### Optimized * [Conv] `ConvDirectNaiveConv`: per-direction kernel files, float accumulators, spatial tiling, bfloat16 path — ALMIOPEN-2485/2486 (#7529) * Kernel cache reuses cached SQLite connections instead of reopening per load/store — ALMIOPEN-2598 (#11933) ### Resolved Issues * [Conv] Incorrect backward-weights results from the gfx950 direct kernel at `waves_q == 1` (missing cross-lane ordering on LDS staging reuse) — ROCM-31508 (#12406) * [Conv] Up to 8x slower hipconv `direct`/`direct_l1`/`direct_wgrad` under ROCm 10.1's full AMDGCN LTO default; fixed with `-fno-offload-lto` — ROCM-31334 (#12328) * [Conv] gfx942 multi-node training throughput regression from backward GEMM on small-batch 1x1 NHWC shapes — ROCM-31155 (#13232) * [Conv] Invalid CK perf-config entries in the gfx1201 and gfx1100 system databases — ROCM-29026 (#12088, #12117) * [BatchNorm] JIT compilation failures on non-GFX9 targets; Welford DPP assembly restricted to GFX9 — ALMIOPEN-2838 (#12889) * Out-of-bounds write in `miopenLoadSolution` when a serialized solution carries more than three work dimensions — ROCM-31082 (#12242) * `uint64_t` typedef conflict between `miopen_cstdint.hpp` and system `<stdint.h>` on LP64 Linux (#12623) ## Technical Details Single-file change to `projects/miopen/CHANGELOG.md`. The 10.2.0 section had **two** `### Resolved Issues` headings. The two entries under the trailing one (`ConvHipConv` gfx1250 crash/LDS race, and the perf-db reload config loss) were merged into the first, and the trailing heading removed — this accounts for the 2 removed bullets in the diff. Section order is now `Resolved Issues → Added → Changed → Optimized → Removed`, matching the 3.6.1 section. `Optimized` is new to this release section. Already documented, so untouched: #12874 (reduce int32 rejection), #12000 / #13016 / #13213 (hipconv v0.3.1 / v0.3.2 / v0.4.0), #11761 (gfx803 removal). ## Notes Deliberately excluded as not externally visible (10 commits): * **hipDNN convolution forwarding (#12276)** — `MIOPEN_ENABLE_HIPDNN_WRAPPER` defaults to `OFF` (`projects/miopen/CMakeLists.txt:162`), so no shipped build compiles the forwarding code and the runtime `MIOPEN_HIPDNN_FORWARDING` flag has nothing to enable. * **Test-only**: #13289 (gfx1250 depthwise test applicability, ALMIOPEN-2841), #11610 (hipDNN parity harness), #12660 (Jenkins status post). * **Internal kernel-math cleanup, generated ISA unchanged**: #13312 (drop direct `__ocml` calls), #13190 (remove broken single-argument `__half` overloads). * **Add/revert pairs, net no change**: #12466 + #13066 (gfx1101 Navi system DBs), #12496 + #12800 (gfx1250 in the dev image arch lists). ## Risk Assessment Documentation-only change to a single Markdown file; no code, build, or runtime impact. **Risk Level: 🟢 Low** ## Test Plan None required — Markdown-only. Verified that the entry topics are not already documented elsewhere in the file, that no content was lost when merging the duplicate heading, and that every new entry maps to a commit in `2d20a8f775e..origin/develop -- projects/miopen`. ## Test Result 16 bullets added, 2 relocated — 14 net-new entries covering 15 commits. Duplicate heading removed; section ordering matches 3.6.1. Co-authored-by: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Motivation
miopen_cstdint.hppcauses a hard compilation error on LP64 Linux (all 64-bit Linux and macOS) when system<stdint.h>is also visible during MIOpen's runtime kernel compilation (comgr/HIPRTC JIT path).The header typedefs
uint64_tas__hip_internal::uint64_t(unsigned long long), but on LP64 platforms<stdint.h>definesuint64_tasunsigned long. These are distinct C++ types despite being the same width (8 bytes), so the compiler rejects the redefinition:This affects any GPU target where MIOpen JIT-compiles kernels at runtime (i.e. when pre-compiled kernel databases are missing). It is most commonly hit on consumer GPUs like gfx1032 that lack
.fdb.txtentries, but can affect any target under the right conditions. 29 MIOpen kernel files include this header.Reported in ROCm/TheRock#6258
Technical Details
On LP64 platforms (64-bit Linux, macOS):
unsigned long= 64-bit, used by system<stdint.h>foruint64_tunsigned long long= 64-bit, used by__hip_internal::uint64_tOn LLP64 platforms (Windows):
unsigned long= 32-bitunsigned long long= 64-bit, matches systemuint64_tThe fix uses
__LP64__(defined by GCC/Clang on LP64 platforms) to select the correct underlying type for each platform, matching what the system<stdint.h>provides. This is consistent with the existingWIN32guard intest/gtest/CMakeLists.txt(line 341) which already passes-U__LP64__on Windows builds.Reproducer
Minimal reproduction — compile with any HIP-capable clang:
This is what happens when comgr compiles a MIOpen kernel that includes both system headers and
miopen_cstdint.hpp. The reporter hit it via theMIOpenNeuron.cppkernel on gfx1032, but any of the 29 kernel files that includemiopen_cstdint.hppcan trigger it.Other scenarios that can trigger this:
.fdb.txt), forcing JITIssue Tracking
GitHub issue: ROCm/TheRock#6258
Test Plan
Added
test/gtest/miopen_cstdint_lp64.cpp— a compile-time regression test that includes both<cstdint>andmiopen_cstdint.hppwith theMIOPEN_HIP_RUNTIME_COMPILEpath active, and verifies viastd::is_samethat the resultinguint64_t/int64_ttypes match the system definitions. The test is auto-discovered by the existingfile(GLOB TESTS *.cpp)in the gtest CMakeLists.txt.Test Result
Verified locally on Ubuntu 24.04 (LP64), ROCm 10.0 (amdclang 23.0.0git), gfx1100:
typedef redefinition with different typeserror<stdint.h>🤖 Generated with Claude Code