| 98 | |
| 99 | template <int32_t N, bool DO_SCALE = false> |
| 100 | DEVICE_FUNCTION void toFloat(float (&dst)[2 * N], int32_t (&src)[N], float scale = 1.f) |
| 101 | { |
| 102 | #pragma unroll |
| 103 | for (int32_t i = 0; i < N; ++i) |
| 104 | { |
| 105 | uint16_t lo, hi; |
| 106 | asm volatile("mov.b32 {%0, %1}, %2;" : "=h"(lo), "=h"(hi) : "r"(src[i])); |
| 107 | asm volatile("cvt.f32.f16 %0, %1;" : "=f"(dst[2 * i + 0]) : "h"(lo)); |
| 108 | asm volatile("cvt.f32.f16 %0, %1;" : "=f"(dst[2 * i + 1]) : "h"(hi)); |
| 109 | } |
| 110 | } |
| 111 | |
| 112 | template <int32_t N, bool DO_SCALE = false> |
| 113 | DEVICE_FUNCTION void toFloat(float (&dst)[4 * N], int32_t (&src)[N], float scale = 1.f) |
no outgoing calls
no test coverage detected