torchaudio/csrc/rnnt/gpu/half.cuh (28 lines of code) (raw):

#pragma once #ifdef USE_C10_HALF #include "c10/util/Half.h" #endif // USE_C10_HALF #include <torchaudio/csrc/rnnt/macros.h> namespace torchaudio { namespace rnnt { struct alignas(sizeof(__half)) Half { __half x; HOST_AND_DEVICE Half() = default; FORCE_INLINE HOST_AND_DEVICE Half(float f) { x = __float2half_rn(f); if (isinf(__half2float(x))) { x = __float2half_rz(f); // round toward 0. } } FORCE_INLINE HOST_AND_DEVICE operator float() const { return __half2float(x); } FORCE_INLINE HOST_AND_DEVICE Half(__half f) { x = f; } FORCE_INLINE HOST_AND_DEVICE operator __half() const { return x; } }; } // namespace rnnt } // namespace torchaudio