41 template < typename T1, typename T2, typename std::enable_if < std::is_integral<T1>::value &&!std::is_same<T1, T2>::value,
int >
::type >
50 #pragma omp parallel for
52 for(
int i = 0; i <
src.num_elements(); ++i)
54 result[i] =
src[i] << shift;
61 #pragma omp parallel for
63 for(
int i = 0; i <
src.num_elements(); ++i)
65 T1 val =
src[i] >> shift;
72 template < typename T1, typename T2, typename std::enable_if < is_floating_point<T1>::value &&(!std::is_same<T1, T2>::value &&!std::is_same<T2, bfloat16>::value),
int >::
type >
82 for(
int i = 0; i <
src.num_elements(); ++i)
85 result[i] = utils::cast::saturate_cast<T2>(val);
90 for(
int i = 0; i <
src.num_elements(); ++i)
92 result[i] =
static_cast<T2
>(
src[i]);
98 template < typename T1, typename T2, typename std::enable_if < std::is_same<T1, bfloat16>::value || std::is_same<T2, bfloat16>::value,
int >
::type >
101 SimpleTensor<T2> result(
src.shape(), dt_out);
105 for(
int i = 0; i <
src.num_elements(); ++i)
107 result[i] =
static_cast<T2
>(
src[i]);