Rename scalar_round_op_google -> scalar_round_half_to_even_op to document its semantics.
PiperOrigin-RevId: 286034751 Change-Id: I11f7a8a4407163b8fe75f236a4e9f8cf8323376e
This commit is contained in:
parent
ab1c41685c
commit
340c0f3905
@ -546,7 +546,7 @@ struct functor_traits<google_floor_mod<Scalar>> {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
template <typename Scalar, bool IsInteger = Eigen::NumTraits<Scalar>::IsInteger>
|
template <typename Scalar, bool IsInteger = Eigen::NumTraits<Scalar>::IsInteger>
|
||||||
struct scalar_round_op_google {
|
struct scalar_round_half_to_even_op {
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar
|
||||||
operator()(const Scalar& x) const {
|
operator()(const Scalar& x) const {
|
||||||
EIGEN_STATIC_ASSERT((!NumTraits<Scalar>::IsComplex),
|
EIGEN_STATIC_ASSERT((!NumTraits<Scalar>::IsComplex),
|
||||||
@ -569,7 +569,7 @@ struct scalar_round_op_google {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename Scalar>
|
template <typename Scalar>
|
||||||
struct scalar_round_op_google<Scalar, true> {
|
struct scalar_round_half_to_even_op<Scalar, true> {
|
||||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar
|
||||||
operator()(const Scalar& x) const {
|
operator()(const Scalar& x) const {
|
||||||
return x;
|
return x;
|
||||||
@ -581,7 +581,7 @@ struct scalar_round_op_google<Scalar, true> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename Scalar>
|
template <typename Scalar>
|
||||||
struct functor_traits<scalar_round_op_google<Scalar>> {
|
struct functor_traits<scalar_round_half_to_even_op<Scalar>> {
|
||||||
enum {
|
enum {
|
||||||
Cost = Eigen::NumTraits<Scalar>::IsInteger ? 0
|
Cost = Eigen::NumTraits<Scalar>::IsInteger ? 0
|
||||||
: 4 * NumTraits<Scalar>::AddCost,
|
: 4 * NumTraits<Scalar>::AddCost,
|
||||||
@ -960,12 +960,12 @@ template <typename T>
|
|||||||
struct floor : base<T, Eigen::internal::scalar_floor_op<T>> {};
|
struct floor : base<T, Eigen::internal::scalar_floor_op<T>> {};
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct round : base<T, Eigen::internal::scalar_round_op_google<T>> {};
|
struct round : base<T, Eigen::internal::scalar_round_half_to_even_op<T>> {};
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct ceil : base<T, Eigen::internal::scalar_ceil_op<T>> {};
|
struct ceil : base<T, Eigen::internal::scalar_ceil_op<T>> {};
|
||||||
|
|
||||||
/** this should go in Eigen
|
/** TODO(tokarip): This should go in Eigen
|
||||||
* \brief Template functor to compute the round to int value of a scalar
|
* \brief Template functor to compute the round to int value of a scalar
|
||||||
*/
|
*/
|
||||||
template <typename Scalar>
|
template <typename Scalar>
|
||||||
|
@ -81,7 +81,8 @@ void ClampScaleAndRound(const Device& d, ConstVec input, T min_range,
|
|||||||
switch (round_mode) {
|
switch (round_mode) {
|
||||||
case ROUND_HALF_TO_EVEN:
|
case ROUND_HALF_TO_EVEN:
|
||||||
ClampScaleAndRound(d, input, min_range, max_range, scale, inverse_scale,
|
ClampScaleAndRound(d, input, min_range, max_range, scale, inverse_scale,
|
||||||
Eigen::internal::scalar_round_op_google<T>(), output);
|
Eigen::internal::scalar_round_half_to_even_op<T>(),
|
||||||
|
output);
|
||||||
break;
|
break;
|
||||||
case ROUND_HALF_UP:
|
case ROUND_HALF_UP:
|
||||||
ClampScaleAndRound(d, input, min_range, max_range, scale, inverse_scale,
|
ClampScaleAndRound(d, input, min_range, max_range, scale, inverse_scale,
|
||||||
@ -107,7 +108,7 @@ void ScaleAndRound(const Device& d, ConstVec input, T scale, T inverse_scale,
|
|||||||
switch (round_mode) {
|
switch (round_mode) {
|
||||||
case ROUND_HALF_TO_EVEN:
|
case ROUND_HALF_TO_EVEN:
|
||||||
ScaleAndRound(d, input, scale, inverse_scale,
|
ScaleAndRound(d, input, scale, inverse_scale,
|
||||||
Eigen::internal::scalar_round_op_google<T>(), output);
|
Eigen::internal::scalar_round_half_to_even_op<T>(), output);
|
||||||
break;
|
break;
|
||||||
case ROUND_HALF_UP:
|
case ROUND_HALF_UP:
|
||||||
ScaleAndRound(d, input, scale, inverse_scale,
|
ScaleAndRound(d, input, scale, inverse_scale,
|
||||||
|
@ -276,16 +276,15 @@ class QuantizeV2Op : public OpKernel {
|
|||||||
min_range = min_output_value / scale_factor;
|
min_range = min_output_value / scale_factor;
|
||||||
max_range = max_output_value / scale_factor;
|
max_range = max_output_value / scale_factor;
|
||||||
if (round_mode_ == ROUND_HALF_TO_EVEN) {
|
if (round_mode_ == ROUND_HALF_TO_EVEN) {
|
||||||
// scalar_round_op_google implements "round-half-to-even".
|
|
||||||
output.device(d) =
|
output.device(d) =
|
||||||
(input.cwiseMin(max_range).cwiseMax(min_range) * scale_factor)
|
(input.cwiseMin(max_range).cwiseMax(min_range) * scale_factor)
|
||||||
.unaryExpr(Eigen::internal::scalar_round_op_google<float>())
|
.unaryExpr(
|
||||||
|
Eigen::internal::scalar_round_half_to_even_op<float>())
|
||||||
.template cast<T>();
|
.template cast<T>();
|
||||||
} else if (round_mode_ == ROUND_HALF_AWAY_FROM_ZERO) {
|
} else if (round_mode_ == ROUND_HALF_AWAY_FROM_ZERO) {
|
||||||
// scalar_round_op implements "round-half-away-from-zero".
|
|
||||||
output.device(d) =
|
output.device(d) =
|
||||||
(input.cwiseMin(max_range).cwiseMax(min_range) * scale_factor)
|
(input.cwiseMin(max_range).cwiseMax(min_range) * scale_factor)
|
||||||
.unaryExpr(Eigen::internal::scalar_round_op<float>())
|
.round()
|
||||||
.template cast<T>();
|
.template cast<T>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user