This is an automated email from the ASF dual-hosted git repository.
tqchen pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tvm.git
The following commit(s) were added to refs/heads/main by this push:
new ae7b8d9aed [Codegen, Cuda] Add overload for fp8x4 e5m2 <-> half4
conversion (#16787)
ae7b8d9aed is described below
commit ae7b8d9aeddd81c862e03255b7628bf5932c24ec
Author: Wuwei Lin <[email protected]>
AuthorDate: Tue Mar 26 05:58:18 2024 -0700
[Codegen, Cuda] Add overload for fp8x4 e5m2 <-> half4 conversion (#16787)
---
src/target/source/literal/cuda_half_t.h | 23 ++++++++++++++++++++++-
1 file changed, 22 insertions(+), 1 deletion(-)
diff --git a/src/target/source/literal/cuda_half_t.h
b/src/target/source/literal/cuda_half_t.h
index bf3e83928e..27d44d9f7f 100644
--- a/src/target/source/literal/cuda_half_t.h
+++ b/src/target/source/literal/cuda_half_t.h
@@ -410,7 +410,28 @@ struct __align__(8) half4 {
result.__x =
(static_cast<__uint32_t>(lo_part.__x) |
(static_cast<__uint32_t>(hi_part.__x) << 16));
return result;
- })";
+ }
+ __host__ __device__ explicit half4(const __nv_fp8x4_e5m2& fp8x4) {
+ __nv_fp8x2_e5m2 lo_part, hi_part;
+ lo_part.__x = static_cast<__nv_fp8x2_storage_t>(fp8x4.__x & 0xFFFF);
+ hi_part.__x = static_cast<__nv_fp8x2_storage_t>((fp8x4.__x >> 16) &
0xFFFF);
+ __half2 lo_half2 = static_cast<__half2>(lo_part);
+ __half2 hi_half2 = static_cast<__half2>(hi_part);
+ x = reinterpret_cast<__half*>(&lo_half2)[0];
+ y = reinterpret_cast<__half*>(&lo_half2)[1];
+ z = reinterpret_cast<__half*>(&hi_half2)[0];
+ w = reinterpret_cast<__half*>(&hi_half2)[1];
+ }
+ __host__ __device__ explicit operator __nv_fp8x4_e5m2() const {
+ __nv_fp8x4_e5m2 result;
+ __half2 lo_half2 = *reinterpret_cast<const __half2*>(&x);
+ __half2 hi_half2 = *reinterpret_cast<const __half2*>(&z);
+ __nv_fp8x2_e5m2 lo_part(lo_half2), hi_part(hi_half2);
+ result.__x =
+ (static_cast<__uint32_t>(lo_part.__x) |
(static_cast<__uint32_t>(hi_part.__x) << 16));
+ return result;
+ }
+ )";
}
stream << R"(
};