[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#1120350: marked as done (trixie-pu: package rocm-hipamd/5.7.1-6+deb13u1)



Your message dated Sat, 15 Nov 2025 11:21:45 +0000
with message-id <736c7150dc08501cc89945035c406eaf9688e144.camel@adam-barratt.org.uk>
and subject line Closing requests for updates included in 13.2
has caused the Debian Bug report #1120350,
regarding trixie-pu: package rocm-hipamd/5.7.1-6+deb13u1
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
1120350: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1120350
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
Tags: trixie
X-Debbugs-Cc: rocm-hipamd@packages.debian.org,cgmb@slerp.xyz
Control: affects -1 + src:rocm-hipamd
User: release.debian.org@packages.debian.org
Usertags: pu

[ Reason ]

This update fixes #1116585, which can cause a compilation error for
software using bfloat16 functionality on AMD GPUs, which is quite common
with AI software, for example.

The issue was discovered by the reverse dependency src:ggml FTBFSing in
newer versions making use of this functionality.

[ Impact ]

Current versions of ggml cannot be built on trixie.

However, that is just one specific example that we discovered. This
could affect any other software making use of bfloat16.

[ Tests ]

rocm-hipamd itself does not ship tests, but I have tested this fix first
with llama.cpp and ggml in unstable, and then with HEAD versions of
llama.cpp and ggml on trixie.

The compile-time issue is resolved, and I did not encounter any adverse
effects at run-time.

[ Risks ]

This change is pretty minimal. It just adds a patch that marks a handful
of functions as inline.

Upstream has improved upon this more extensively in newer versions, but
those changes would be too significant for a stable update.

[ Checklist ]
  [x] *all* changes are documented in the d/changelog
  [x] I reviewed all changes and I approve them
  [x] attach debdiff against the package in (old)stable
  [x] the issue is verified as fixed in unstable

[ Changes ]

1. Add a patch fixing #1116585, causing compilation errors in other
   software
2. Fix smaller documentation bugs.

[ Other info ]

I've attached the full debdiff, but also the patch in question, to
highlight the only non-documentation change.

Best,
Christian
From: Cordell Bloor <cgmb@debian.org>
Date: Sat, 4 Oct 2025 00:28:49 -0600
Subject: inline bf16 functions

Resolves multiple-definition errors observed when building
libraries and applications:

  ggml: https://github.com/ggml-org/llama.cpp/pull/15296
  mscclpp: https://github.com/microsoft/mscclpp/issues/349

Bug-Debian: https://bugs.debian.org/1116585
---
 hipamd/include/hip/amd_detail/amd_hip_bf16.h | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/hipamd/include/hip/amd_detail/amd_hip_bf16.h b/hipamd/include/hip/amd_detail/amd_hip_bf16.h
index 50b8a18..fd526cf 100644
--- a/hipamd/include/hip/amd_detail/amd_hip_bf16.h
+++ b/hipamd/include/hip/amd_detail/amd_hip_bf16.h
@@ -134,7 +134,7 @@ __HOST_DEVICE__ inline float __bfloat162float(__hip_bfloat16 a) {
  * \ingroup HIP_INTRINSIC_BFLOAT16_CONV
  * \brief Converts float to bfloat16
  */
-__HOST_DEVICE__ __hip_bfloat16 __float2bfloat16(float f) {
+__HOST_DEVICE__ inline __hip_bfloat16 __float2bfloat16(float f) {
   __hip_bfloat16 ret;
   union {
     float fp32;
@@ -178,7 +178,7 @@ __HOST_DEVICE__ __hip_bfloat16 __float2bfloat16(float f) {
  * \ingroup HIP_INTRINSIC_BFLOAT162_CONV
  * \brief Converts and moves bfloat162 to float2
  */
-__HOST_DEVICE__ float2 __bfloat1622float2(const __hip_bfloat162 a) {
+__HOST_DEVICE__ inline float2 __bfloat1622float2(const __hip_bfloat162 a) {
   return float2{__bfloat162float(a.x), __bfloat162float(a.y)};
 }
 
@@ -206,7 +206,7 @@ __device__ unsigned short int __bfloat16_as_ushort(const __hip_bfloat16 h) { ret
  * \ingroup HIP_INTRINSIC_BFLOAT162_CONV
  * \brief Convert double to __hip_bfloat16
  */
-__HOST_DEVICE__ __hip_bfloat16 __double2bfloat16(const double a) {
+__HOST_DEVICE__ inline __hip_bfloat16 __double2bfloat16(const double a) {
   return __float2bfloat16((float)a);
 }
 
@@ -214,7 +214,7 @@ __HOST_DEVICE__ __hip_bfloat16 __double2bfloat16(const double a) {
  * \ingroup HIP_INTRINSIC_BFLOAT162_CONV
  * \brief Convert float2 to __hip_bfloat162
  */
-__HOST_DEVICE__ __hip_bfloat162 __float22bfloat162_rn(const float2 a) {
+__HOST_DEVICE__ inline __hip_bfloat162 __float22bfloat162_rn(const float2 a) {
   return __hip_bfloat162{__float2bfloat16(a.x), __float2bfloat16(a.y)};
 }
 
@@ -244,7 +244,7 @@ __device__ __hip_bfloat162 __high2bfloat162(const __hip_bfloat162 a) {
  * \ingroup HIP_INTRINSIC_BFLOAT162_CONV
  * \brief Converts high 16 bits of __hip_bfloat162 to float and returns the result
  */
-__HOST_DEVICE__ float __high2float(const __hip_bfloat162 a) { return __bfloat162float(a.y); }
+__HOST_DEVICE__ inline float __high2float(const __hip_bfloat162 a) { return __bfloat162float(a.y); }
 
 /**
  * \ingroup HIP_INTRINSIC_BFLOAT162_CONV
@@ -272,7 +272,7 @@ __device__ __hip_bfloat162 __low2bfloat162(const __hip_bfloat162 a) {
  * \ingroup HIP_INTRINSIC_BFLOAT162_CONV
  * \brief Converts low 16 bits of __hip_bfloat162 to float and returns the result
  */
-__HOST_DEVICE__ float __low2float(const __hip_bfloat162 a) { return __bfloat162float(a.x); }
+__HOST_DEVICE__ inline float __low2float(const __hip_bfloat162 a) { return __bfloat162float(a.x); }
 
 /**
  * \ingroup HIP_INTRINSIC_BFLOAT162_CONV
diff -Nru rocm-hipamd-5.7.1/debian/changelog rocm-hipamd-5.7.1/debian/changelog
--- rocm-hipamd-5.7.1/debian/changelog	2025-05-13 13:50:23.000000000 +0200
+++ rocm-hipamd-5.7.1/debian/changelog	2025-10-12 21:41:23.000000000 +0200
@@ -1,3 +1,15 @@
+rocm-hipamd (5.7.1-6+deb13u1) trixie; urgency=medium
+
+  [ Cordell Bloor ]
+  * Add d/p/0041-inline-bf16-functions.patch to mark functions defined
+    in amd_hip_bf16.h as inline. This change prevents multiple
+    definition errors during linking for programs that include
+    <hip/hip_bf16.h> in more than one translation unit (Closes: #1116585)
+  * Fix hipcc manpage title (Closes: #1107681)
+  * Fix spelling error in roc-obj-ls manpage
+
+ -- Christian Kastner <ckk@debian.org>  Sun, 12 Oct 2025 21:41:23 +0200
+
 rocm-hipamd (5.7.1-6) unstable; urgency=medium
 
   * Revert "tests: allow deprecation warnings via allow-stderr restriction"
diff -Nru rocm-hipamd-5.7.1/debian/hipcc.1 rocm-hipamd-5.7.1/debian/hipcc.1
--- rocm-hipamd-5.7.1/debian/hipcc.1	2025-05-13 13:24:13.000000000 +0200
+++ rocm-hipamd-5.7.1/debian/hipcc.1	2025-10-12 21:41:23.000000000 +0200
@@ -1,56 +1,62 @@
-.TH HIPCONFIG "1" "May 2025" "hipcc 5.7.31921" "User Commands"
+.TH HIPCC "1" "May 2025" "hipcc 5.7.31921" "User Commands"
 .SH NAME
 hipcc \- HIP compiler driver
 .SH SYNOPSIS
-usage: hipcc [OPTIONS]
+usage: hipcc [OPTIONS] FILENAME ...
 .SH DESCRIPTION
-The hipcc script wraps clang or nvcc, depending on the value of the
-.RB $ HIP_PLATFORM
-reported by hipconfig. When building for the AMD platform, the options given to hipcc
-are passed through to clang. The hipcc script adds number of additional options to those
-explicitly given, including "\-x hip" to force the compilation language to HIP, "\-O3"
-when no optimization level is otherwise specified, and the autodetected target GPU
-architecture when no target has been otherwise specified.
+The hipcc script wraps clang or nvcc depending on the value of the
+.RB HIP_PLATFORM
+reported by hipconfig. When building for the AMD platform, the options given to
+hipcc are forwarded to clang. The hipcc script adds additional options to the
+list of arguments being forwarded, including
+.I \-x hip
+to force the compilation language to HIP,
+.I \-O3
+when no optimization level is specified, and
+.I \-\-offload-arch
+with an autodetected GPU architecture if
+no target architecture is specified.
 .SH ENVIRONMENT
 .TP
 .B HIPCC_VERBOSE
-The 
-.RB $ HIPCC_VERBOSE
-variable can enable additional output.
-.B 0x1 \- the clang command being invoked
-.B 0x2 \- the paths to HIP components
-.B 0x3 \- the arguments hipcc was called with
+This environment variable can enable additional output. The following flags
+control the level of verbosity to be printed:
+.IP \(bu 4
+.B 0x1
+The clang command being invoked.
+.IP \(bu 4
+.B 0x2
+The paths to HIP components.
+.IP \(bu 4
+.B 0x3
+The arguments hipcc was called with.
 .TP
 .B HIPCC_COMPILE_FLAGS_APPEND
-The contents of
-.B $ HIPCC_COMPILE_FLAGS_APPEND
-are added to the end of the argument list that is passed to clang when compiling.
-.TP
-The contents of
-.B $ HIPCC_LINK_FLAGS_APPEND
-are added to the end of the argument list that is passed to clang when linking.
+The contents of this variable are added to the end of the argument list that is
+passed to clang when compiling.
+.TP
+.B HIPCC_LINK_FLAGS_APPEND
+The contents of this variable are added to the end of the argument list that is
+passed to clang when linking.
 .TP
 .B DEVICE_LIB_PATH
-The 
-.RB $ DEVICE_LIB_PATH
-variable is used to override the path to the rocm\-device\-libs.
+This variable is used to override the path to the ROCm device libraries.
 .TP
 .B HIP_LIB_PATH
-The 
-.RB $ HIP_LIB_PATH
-variable is used to override the path to the HIP Runtime library directory.
+This variable is used to override the path to the directory containing the HIP runtime library.
 .TP
 .B HIP_CLANG_HCC_COMPAT_MODE
-The 
-.RB $ HIP_CLANG_HCC_COMPAT_MODE
-variable is used to specify if clang should allow half floats in arguments and return and
-if __HIP_HCC_COMPAT_MODE__ should be defined.
+This variable is used to specify if clang should enable options that make it
+more compatible with the old hcc compiler. This includes allowing the half
+float type to be used in function signatures as arguments or return values.
+When in this mode, the
+.B __HIP_HCC_COMPAT_MODE__
+preprocessor macro will also be defined.
 .TP
 .B HIP_CLANG_LAUNCHER
-The 
-.RB $ HIP_CLANG_LAUNCHER
-variable specifies a path to an executable to use for launching HIP clang.
-This can be useful for making use of a compiler caching tool.
+This environment variable specifies a path to an executable to use for
+launching HIP clang, which can be useful for making use of a compiler caching
+tool.
 .SH SEE ALSO
 .sp
 \fBhipconfig(1)\fP
diff -Nru rocm-hipamd-5.7.1/debian/patches/0041-inline-bf16-functions.patch rocm-hipamd-5.7.1/debian/patches/0041-inline-bf16-functions.patch
--- rocm-hipamd-5.7.1/debian/patches/0041-inline-bf16-functions.patch	1970-01-01 01:00:00.000000000 +0100
+++ rocm-hipamd-5.7.1/debian/patches/0041-inline-bf16-functions.patch	2025-10-12 21:41:23.000000000 +0200
@@ -0,0 +1,73 @@
+From: Cordell Bloor <cgmb@debian.org>
+Date: Sat, 4 Oct 2025 00:28:49 -0600
+Subject: inline bf16 functions
+
+Resolves multiple-definition errors observed when building
+libraries and applications:
+
+  ggml: https://github.com/ggml-org/llama.cpp/pull/15296
+  mscclpp: https://github.com/microsoft/mscclpp/issues/349
+
+Bug-Debian: https://bugs.debian.org/1116585
+---
+ hipamd/include/hip/amd_detail/amd_hip_bf16.h | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/hipamd/include/hip/amd_detail/amd_hip_bf16.h b/hipamd/include/hip/amd_detail/amd_hip_bf16.h
+index 50b8a18..fd526cf 100644
+--- a/hipamd/include/hip/amd_detail/amd_hip_bf16.h
++++ b/hipamd/include/hip/amd_detail/amd_hip_bf16.h
+@@ -134,7 +134,7 @@ __HOST_DEVICE__ inline float __bfloat162float(__hip_bfloat16 a) {
+  * \ingroup HIP_INTRINSIC_BFLOAT16_CONV
+  * \brief Converts float to bfloat16
+  */
+-__HOST_DEVICE__ __hip_bfloat16 __float2bfloat16(float f) {
++__HOST_DEVICE__ inline __hip_bfloat16 __float2bfloat16(float f) {
+   __hip_bfloat16 ret;
+   union {
+     float fp32;
+@@ -178,7 +178,7 @@ __HOST_DEVICE__ __hip_bfloat16 __float2bfloat16(float f) {
+  * \ingroup HIP_INTRINSIC_BFLOAT162_CONV
+  * \brief Converts and moves bfloat162 to float2
+  */
+-__HOST_DEVICE__ float2 __bfloat1622float2(const __hip_bfloat162 a) {
++__HOST_DEVICE__ inline float2 __bfloat1622float2(const __hip_bfloat162 a) {
+   return float2{__bfloat162float(a.x), __bfloat162float(a.y)};
+ }
+ 
+@@ -206,7 +206,7 @@ __device__ unsigned short int __bfloat16_as_ushort(const __hip_bfloat16 h) { ret
+  * \ingroup HIP_INTRINSIC_BFLOAT162_CONV
+  * \brief Convert double to __hip_bfloat16
+  */
+-__HOST_DEVICE__ __hip_bfloat16 __double2bfloat16(const double a) {
++__HOST_DEVICE__ inline __hip_bfloat16 __double2bfloat16(const double a) {
+   return __float2bfloat16((float)a);
+ }
+ 
+@@ -214,7 +214,7 @@ __HOST_DEVICE__ __hip_bfloat16 __double2bfloat16(const double a) {
+  * \ingroup HIP_INTRINSIC_BFLOAT162_CONV
+  * \brief Convert float2 to __hip_bfloat162
+  */
+-__HOST_DEVICE__ __hip_bfloat162 __float22bfloat162_rn(const float2 a) {
++__HOST_DEVICE__ inline __hip_bfloat162 __float22bfloat162_rn(const float2 a) {
+   return __hip_bfloat162{__float2bfloat16(a.x), __float2bfloat16(a.y)};
+ }
+ 
+@@ -244,7 +244,7 @@ __device__ __hip_bfloat162 __high2bfloat162(const __hip_bfloat162 a) {
+  * \ingroup HIP_INTRINSIC_BFLOAT162_CONV
+  * \brief Converts high 16 bits of __hip_bfloat162 to float and returns the result
+  */
+-__HOST_DEVICE__ float __high2float(const __hip_bfloat162 a) { return __bfloat162float(a.y); }
++__HOST_DEVICE__ inline float __high2float(const __hip_bfloat162 a) { return __bfloat162float(a.y); }
+ 
+ /**
+  * \ingroup HIP_INTRINSIC_BFLOAT162_CONV
+@@ -272,7 +272,7 @@ __device__ __hip_bfloat162 __low2bfloat162(const __hip_bfloat162 a) {
+  * \ingroup HIP_INTRINSIC_BFLOAT162_CONV
+  * \brief Converts low 16 bits of __hip_bfloat162 to float and returns the result
+  */
+-__HOST_DEVICE__ float __low2float(const __hip_bfloat162 a) { return __bfloat162float(a.x); }
++__HOST_DEVICE__ inline float __low2float(const __hip_bfloat162 a) { return __bfloat162float(a.x); }
+ 
+ /**
+  * \ingroup HIP_INTRINSIC_BFLOAT162_CONV
diff -Nru rocm-hipamd-5.7.1/debian/patches/series rocm-hipamd-5.7.1/debian/patches/series
--- rocm-hipamd-5.7.1/debian/patches/series	2025-05-13 12:09:20.000000000 +0200
+++ rocm-hipamd-5.7.1/debian/patches/series	2025-10-12 21:41:23.000000000 +0200
@@ -20,3 +20,4 @@
 0038-fix-FindHIP-search-for-HIP_CLANG_PATH.patch
 0039-fix-roc-obj-help.patch
 0040-self-sufficient-bf16-header.patch
+0041-inline-bf16-functions.patch
diff -Nru rocm-hipamd-5.7.1/debian/roc-obj-ls.1 rocm-hipamd-5.7.1/debian/roc-obj-ls.1
--- rocm-hipamd-5.7.1/debian/roc-obj-ls.1	2025-05-13 12:15:39.000000000 +0200
+++ rocm-hipamd-5.7.1/debian/roc-obj-ls.1	2025-10-12 21:41:23.000000000 +0200
@@ -5,7 +5,7 @@
 .B roc-obj-ls
 [\fI\,-v|h\/\fR] \fI\,executable\/\fR...
 .SH DESCRIPTION
-List the URIs of the code objects embedded in the specfied host executables.
+List the URIs of the code objects embedded in the specified host executables.
 .SH OPTIONS
 \fB\-v\fR      Verbose output (includes Entry ID)
 .TP

--- End Message ---
--- Begin Message ---
Package: release.debian.org
Version: 13.2

Hi,

The updates referenced in each of these bugs were included in today's
13.2 trixie point release.

Regards,

Adam

--- End Message ---

Reply to: