| #ifndef CAFFE2_UTILS_MATH_HALF_UTILS_H_ | |
| #define CAFFE2_UTILS_MATH_HALF_UTILS_H_ | |
| #include "caffe2/core/common.h" | |
| #include "caffe2/core/types.h" | |
| #include "caffe2/utils/conversions.h" | |
| #include "caffe2/utils/math/utils.h" | |
| namespace caffe2 { | |
| namespace math { | |
| namespace utils { | |
| struct HalfAddFunctor { | |
| MATH_UTILS_DECL at::Half operator()(const at::Half a, const at::Half b) | |
| const { | |
| return convert::To<float, at::Half>( | |
| convert::To<at::Half, float>(a) + convert::To<at::Half, float>(b)); | |
| } | |
| }; | |
| struct HalfSubFunctor { | |
| MATH_UTILS_DECL at::Half operator()(const at::Half a, const at::Half b) | |
| const { | |
| return convert::To<float, at::Half>( | |
| convert::To<at::Half, float>(a) - convert::To<at::Half, float>(b)); | |
| } | |
| }; | |
| struct HalfMulFunctor { | |
| MATH_UTILS_DECL at::Half operator()(const at::Half a, const at::Half b) | |
| const { | |
| return convert::To<float, at::Half>( | |
| convert::To<at::Half, float>(a) * convert::To<at::Half, float>(b)); | |
| } | |
| }; | |
| struct HalfDivFunctor { | |
| MATH_UTILS_DECL at::Half operator()(const at::Half a, const at::Half b) | |
| const { | |
| return convert::To<float, at::Half>( | |
| convert::To<at::Half, float>(a) / convert::To<at::Half, float>(b)); | |
| } | |
| }; | |
| } // namespace utils | |
| } // namespace math | |
| } // namespace caffe2 | |
| #endif // CAFFE2_UTILS_MATH_HALF_UTILS_H_ |