diff options
Diffstat (limited to 'tensorflow/core/grappler/costs/op_level_cost_estimator.cc')
-rw-r--r-- | tensorflow/core/grappler/costs/op_level_cost_estimator.cc | 135 |
1 files changed, 71 insertions, 64 deletions
diff --git a/tensorflow/core/grappler/costs/op_level_cost_estimator.cc b/tensorflow/core/grappler/costs/op_level_cost_estimator.cc index d34eecd009..5b303f6ccb 100644 --- a/tensorflow/core/grappler/costs/op_level_cost_estimator.cc +++ b/tensorflow/core/grappler/costs/op_level_cost_estimator.cc @@ -65,6 +65,7 @@ constexpr char kAvgPool[] = "AvgPool"; constexpr char kAvgPoolGrad[] = "AvgPoolGrad"; constexpr char kFusedBatchNorm[] = "FusedBatchNorm"; constexpr char kFusedBatchNormGrad[] = "FusedBatchNormGrad"; +constexpr char kQuantizedMatMulV2[] = "QuantizedMatMulV2"; static const Costs::Duration kMinComputeTime(1); @@ -226,6 +227,7 @@ OpLevelCostEstimator::OpLevelCostEstimator() { {kMatMul, wrap(&OpLevelCostEstimator::PredictMatMul)}, {kSparseMatMul, wrap(&OpLevelCostEstimator::PredictMatMul)}, {kBatchMatMul, wrap(&OpLevelCostEstimator::PredictBatchMatMul)}, + {kQuantizedMatMulV2, wrap(&OpLevelCostEstimator::PredictMatMul)}, {kNoOp, wrap(&OpLevelCostEstimator::PredictNoOp)}, {kGuaranteeConst, wrap(&OpLevelCostEstimator::PredictNoOp)}, @@ -268,67 +270,70 @@ OpLevelCostEstimator::OpLevelCostEstimator() { EIGEN_COST(scalar_product_op<float>) + EIGEN_COST(scalar_max_op<float>) + EIGEN_COST(scalar_min_op<float>) + EIGEN_COST(scalar_round_op<float>); - elementwise_ops_ = {// Unary ops alphabetically sorted - {"Acos", EIGEN_COST(scalar_acos_op<float>)}, - {"Asin", EIGEN_COST(scalar_asin_op<float>)}, - {"Atan", EIGEN_COST(scalar_atan_op<float>)}, - {"Atan2", EIGEN_COST(scalar_quotient_op<float>) + - EIGEN_COST(scalar_atan_op<float>)}, - {"Ceil", EIGEN_COST(scalar_ceil_op<float>)}, - {"Cos", EIGEN_COST(scalar_cos_op<float>)}, - {"Dequantize", EIGEN_COST(scalar_product_op<float>)}, - {"Erf", 1}, - {"Erfc", 1}, - {"Exp", EIGEN_COST(scalar_exp_op<float>)}, - {"Expm1", EIGEN_COST(scalar_expm1_op<float>)}, - {"Floor", EIGEN_COST(scalar_floor_op<float>)}, - {"Inv", EIGEN_COST(scalar_inverse_op<float>)}, - {"InvGrad", 1}, - {"Lgamma", 1}, - {"Log", EIGEN_COST(scalar_log_op<float>)}, - {"Log1p", EIGEN_COST(scalar_log1p_op<float>)}, - {"Neg", EIGEN_COST(scalar_opposite_op<float>)}, - {"QuantizeV2", quantize_v2_cost}, - {"Reciprocal", EIGEN_COST(scalar_inverse_op<float>)}, - {"Rint", 1}, - {"Round", EIGEN_COST(scalar_round_op<float>)}, - {"Rsqrt", EIGEN_COST(scalar_rsqrt_op<float>)}, - {"Sqrt", EIGEN_COST(scalar_sqrt_op<float>)}, - {"Square", EIGEN_COST(scalar_square_op<float>)}, - {"Tanh", EIGEN_COST(scalar_tanh_op<float>)}, - {"Relu", EIGEN_COST(scalar_max_op<float>)}, - {"Sigmoid", EIGEN_COST(scalar_sigmoid_op<float>)}, - {"Sign", EIGEN_COST(scalar_sign_op<float>)}, - {"Sin", EIGEN_COST(scalar_sin_op<float>)}, - {"Tan", EIGEN_COST(scalar_tan_op<float>)}, - // Binary ops alphabetically sorted - {"Add", EIGEN_COST(scalar_sum_op<float>)}, - {"ApproximateEqual", 1}, - {"BiasAdd", EIGEN_COST(scalar_sum_op<float>)}, - {"Div", EIGEN_COST(scalar_quotient_op<float>)}, - {"Equal", 1}, - {"FloorDiv", EIGEN_COST(scalar_quotient_op<float>)}, - {"FloorMod", EIGEN_COST(scalar_mod_op<float>)}, - {"Greater", 1}, - {"GreaterEqual", 1}, - {"Less", 1}, - {"LessEqual", 1}, - {"LogicalAnd", EIGEN_COST(scalar_boolean_and_op)}, - {"LogicalNot", 1}, - {"LogicalOr", EIGEN_COST(scalar_boolean_or_op)}, - {"Maximum", EIGEN_COST(scalar_max_op<float>)}, - {"Minimum", EIGEN_COST(scalar_min_op<float>)}, - {"Mod", EIGEN_COST(scalar_mod_op<float>)}, - {"Mul", EIGEN_COST(scalar_product_op<float>)}, - {"NotEqual", 1}, - {"QuantizedAdd", EIGEN_COST(scalar_sum_op<float>)}, - {"QuantizedMul", EIGEN_COST(scalar_product_op<float>)}, - {"RealDiv", EIGEN_COST(scalar_quotient_op<float>)}, - {"ReluGrad", EIGEN_COST(scalar_max_op<float>)}, - {"SquareDifference", 1}, - {"Sub", EIGEN_COST(scalar_difference_op<float>)}, - {"TruncateDiv", EIGEN_COST(scalar_quotient_op<float>)}, - {"TruncateMod", EIGEN_COST(scalar_mod_op<float>)}}; + elementwise_ops_ = { + // Unary ops alphabetically sorted + {"Acos", EIGEN_COST(scalar_acos_op<float>)}, + {"Asin", EIGEN_COST(scalar_asin_op<float>)}, + {"Atan", EIGEN_COST(scalar_atan_op<float>)}, + {"Atan2", EIGEN_COST(scalar_quotient_op<float>) + + EIGEN_COST(scalar_atan_op<float>)}, + {"Ceil", EIGEN_COST(scalar_ceil_op<float>)}, + {"Cos", EIGEN_COST(scalar_cos_op<float>)}, + {"Dequantize", EIGEN_COST(scalar_product_op<float>)}, + {"Erf", 1}, + {"Erfc", 1}, + {"Exp", EIGEN_COST(scalar_exp_op<float>)}, + {"Expm1", EIGEN_COST(scalar_expm1_op<float>)}, + {"Floor", EIGEN_COST(scalar_floor_op<float>)}, + {"Inv", EIGEN_COST(scalar_inverse_op<float>)}, + {"InvGrad", 1}, + {"Lgamma", 1}, + {"Log", EIGEN_COST(scalar_log_op<float>)}, + {"Log1p", EIGEN_COST(scalar_log1p_op<float>)}, + {"Neg", EIGEN_COST(scalar_opposite_op<float>)}, + {"QuantizeV2", quantize_v2_cost}, + {"Reciprocal", EIGEN_COST(scalar_inverse_op<float>)}, + {"Rint", 1}, + {"Round", EIGEN_COST(scalar_round_op<float>)}, + {"Rsqrt", EIGEN_COST(scalar_rsqrt_op<float>)}, + {"Sqrt", EIGEN_COST(scalar_sqrt_op<float>)}, + {"Square", EIGEN_COST(scalar_square_op<float>)}, + {"Tanh", EIGEN_COST(scalar_tanh_op<float>)}, + {"Relu", EIGEN_COST(scalar_max_op<float>)}, + {"Sigmoid", EIGEN_COST(scalar_sigmoid_op<float>)}, + {"QuantizedSigmoid", EIGEN_COST(scalar_sigmoid_op<float>)}, + {"Sign", EIGEN_COST(scalar_sign_op<float>)}, + {"Sin", EIGEN_COST(scalar_sin_op<float>)}, + {"Tan", EIGEN_COST(scalar_tan_op<float>)}, + // Binary ops alphabetically sorted + {"Add", EIGEN_COST(scalar_sum_op<float>)}, + {"ApproximateEqual", 1}, + {"BiasAdd", EIGEN_COST(scalar_sum_op<float>)}, + {"QuantizedBiasAdd", EIGEN_COST(scalar_sum_op<float>)}, + {"Div", EIGEN_COST(scalar_quotient_op<float>)}, + {"Equal", 1}, + {"FloorDiv", EIGEN_COST(scalar_quotient_op<float>)}, + {"FloorMod", EIGEN_COST(scalar_mod_op<float>)}, + {"Greater", 1}, + {"GreaterEqual", 1}, + {"Less", 1}, + {"LessEqual", 1}, + {"LogicalAnd", EIGEN_COST(scalar_boolean_and_op)}, + {"LogicalNot", 1}, + {"LogicalOr", EIGEN_COST(scalar_boolean_or_op)}, + {"Maximum", EIGEN_COST(scalar_max_op<float>)}, + {"Minimum", EIGEN_COST(scalar_min_op<float>)}, + {"Mod", EIGEN_COST(scalar_mod_op<float>)}, + {"Mul", EIGEN_COST(scalar_product_op<float>)}, + {"NotEqual", 1}, + {"QuantizedAdd", EIGEN_COST(scalar_sum_op<float>)}, + {"QuantizedMul", EIGEN_COST(scalar_product_op<float>)}, + {"RealDiv", EIGEN_COST(scalar_quotient_op<float>)}, + {"ReluGrad", EIGEN_COST(scalar_max_op<float>)}, + {"SquareDifference", 1}, + {"Sub", EIGEN_COST(scalar_difference_op<float>)}, + {"TruncateDiv", EIGEN_COST(scalar_quotient_op<float>)}, + {"TruncateMod", EIGEN_COST(scalar_mod_op<float>)}}; #undef EIGEN_COST @@ -675,7 +680,7 @@ int64 OpLevelCostEstimator::CountMatMulOperations( } ops = m_dim * n_dim * k_dim * 2; - VLOG(1) << "Operations for Matmul" << ops; + VLOG(1) << "Operations for Matmul: " << ops; if (mat_mul != nullptr) { mat_mul->m = m_dim; @@ -972,8 +977,10 @@ int64 OpLevelCostEstimator::CalculateTensorElementCount( int64 OpLevelCostEstimator::CalculateTensorSize( const OpInfo::TensorProperties& tensor, bool* found_unknown_shapes) const { - return CalculateTensorElementCount(tensor, found_unknown_shapes) * - DataTypeSize(BaseType(tensor.dtype())); + int64 count = CalculateTensorElementCount(tensor, found_unknown_shapes); + int size = DataTypeSize(BaseType(tensor.dtype())); + VLOG(2) << "Count: " << count << " DataTypeSize: " << size; + return count * size; } int64 OpLevelCostEstimator::CalculateInputSize( |