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:
A. Unique TensorFlower 2019-12-17 12:31:25 -08:00 committed by TensorFlower Gardener
parent ab1c41685c
commit 340c0f3905
3 changed files with 11 additions and 11 deletions

View File

@ -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>

View File

@ -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,

View File

@ -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>();
} }
} }