half.cuh 701 Bytes
Newer Older
Caroline Chen's avatar
Caroline Chen committed
1
2
3
4
5
6
#pragma once

#ifdef USE_C10_HALF
#include "c10/util/Half.h"
#endif // USE_C10_HALF

7
#include <libtorchaudio/rnnt/macros.h>
Caroline Chen's avatar
Caroline Chen committed
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

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