From d437d6e41c0af3592bca2363dc3b5ee418f6c5db Mon Sep 17 00:00:00 2001 From: mberenjk <146776561+mberenjk@users.noreply.github.com> Date: Thu, 13 Feb 2025 10:34:17 -0600 Subject: [PATCH] replacing rccl_float8 with hip_fp8 and address compatibility issue (#1538) * replacing rccl_float8 with hip_fp8 and address compatibility issue with gfx942 --------- Co-authored-by: corey-derochie-amd <161367113+corey-derochie-amd@users.noreply.github.com> Co-authored-by: Marzieh Berenjkoub --- src/include/rccl_float8.h | 51 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 48 insertions(+), 3 deletions(-) diff --git a/src/include/rccl_float8.h b/src/include/rccl_float8.h index 01cab41f71..64c1b137e8 100644 --- a/src/include/rccl_float8.h +++ b/src/include/rccl_float8.h @@ -25,7 +25,7 @@ #include -#if __cplusplus < 201103L || (!defined(__HCC__) && !defined(__HIPCC__)) +#if __cplusplus < 201103L || (!defined(__HIP_PLATFORM_AMD__) && !defined(__HIPCC__)) /*! \brief Struct to represent a 8 bit floating-point number. */ typedef struct @@ -38,7 +38,52 @@ typedef struct uint8_t data; } rccl_bfloat8; -#else // __cplusplus < 201103L || (!defined(__HCC__) && !defined(__HIPCC__)) +// __cplusplus < 201103L || (!defined(__HIP_PLATFORM_AMD__) && !defined(__HIPCC__)) +#elif ROCM_VERSION >= 60200 + +#include + +#if HIP_FP8_TYPE_OCP +typedef __hip_fp8_e4m3 rccl_float8; +typedef __hip_fp8_e5m2 rccl_bfloat8; +#else +typedef __hip_fp8_e4m3_fnuz rccl_float8; +typedef __hip_fp8_e5m2_fnuz rccl_bfloat8; +#endif + +inline std::ostream& operator<<(std::ostream& os, const rccl_float8& f8) +{ + return os << float(f8); +} + +inline std::ostream& operator<<(std::ostream& os, const rccl_bfloat8& bf8) +{ + return os << float(bf8); +} + +inline __host__ __device__ float operator*(rccl_float8 a, rccl_float8 b) +{ + return float(a) * float(b); +} + +inline __host__ __device__ float operator*(rccl_bfloat8 a, rccl_bfloat8 b) +{ + return float(a) * float(b); +} + +inline __host__ __device__ float operator*(rccl_float8 a, float b) +{ + return float(a) * float(b); +} + +inline __host__ __device__ float operator*(rccl_bfloat8 a, float b) +{ + return float(a) * float(b); +} + +// For older versions of ROCm that do not include hip_fp8.h, +// we provide a local version of the header file as a fallback. +#else #define HIP_HOST_DEVICE __host__ __device__ #define HIP_HOST __host__ @@ -1016,6 +1061,6 @@ inline __host__ __device__ T explicit_downcast(Ta a, uint32_t rng) // ================================================================================================= -#endif // __cplusplus < 201103L || (!defined(__HCC__) && !defined(__HIPCC__)) +#endif #endif // ROCBLAS_FLOAT8_H