diff --git a/paddle/fluid/imperative/prepared_operator.cc b/paddle/fluid/imperative/prepared_operator.cc index 2caa5319094fe966a663d4f4231c26297b40e549..d9a21c9247b9363b0f1cbcdf6c8d62bb6242c183 100644 --- a/paddle/fluid/imperative/prepared_operator.cc +++ b/paddle/fluid/imperative/prepared_operator.cc @@ -25,6 +25,7 @@ #include "paddle/fluid/platform/device/xpu/xpu_op_list.h" #endif #include "paddle/fluid/platform/device/gpu/gpu_info.h" +#include "paddle/fluid/platform/profiler.h" DECLARE_bool(check_nan_inf); DECLARE_bool(run_pten_kernel); @@ -505,12 +506,21 @@ static void PreparedOpRunImpl( // TODO(zjl): remove scope in dygraph framework::Scope scope; - DygraphInferShapeContext infer_shape_ctx( - &ins, &outs, &attrs, &default_attrs, op.Type(), &kernel_type); - op.Info().infer_shape_(&infer_shape_ctx); + { + platform::RecordEvent record_event(op.Type() + " infer_shape", + platform::EventRole::kInnerOp); + DygraphInferShapeContext infer_shape_ctx( + &ins, &outs, &attrs, &default_attrs, op.Type(), &kernel_type); + op.Info().infer_shape_(&infer_shape_ctx); + } + + { + platform::RecordEvent record_event(op.Type() + " compute", + platform::EventRole::kInnerOp); - func(DygraphExecutionContext(op, scope, *dev_ctx, ctx, ins, outs, - attrs, default_attrs)); + func(DygraphExecutionContext(op, scope, *dev_ctx, ctx, ins, outs, + attrs, default_attrs)); + } if (FLAGS_check_nan_inf) { framework::details::CheckOpHasNanOrInfInDygraph( @@ -551,18 +561,27 @@ static void PreparedOpRunPtImpl( const NameVarMap& ins, const NameVarMap& outs, const framework::AttributeMap& attrs, const framework::AttributeMap& default_attrs) { - DygraphInferShapeContext infer_shape_ctx( - &ins, &outs, &attrs, &default_attrs, op.Type(), &kernel_type); - op.Info().infer_shape_(&infer_shape_ctx); + { + platform::RecordEvent record_event(op.Type() + " infer_shape", + platform::EventRole::kInnerOp); + DygraphInferShapeContext infer_shape_ctx( + &ins, &outs, &attrs, &default_attrs, op.Type(), &kernel_type); + op.Info().infer_shape_(&infer_shape_ctx); + } + + { + platform::RecordEvent record_event(op.Type() + " compute", + platform::EventRole::kInnerOp); - PreparePtenData(pt_kernel, pt_kernel_signature, ins); + PreparePtenData(pt_kernel, pt_kernel_signature, ins); - pten::KernelContext pt_kernel_context; - BuildDygraphPtenKernelContext(pt_kernel_signature, pt_kernel, ins, - outs, attrs, default_attrs, dev_ctx, - &pt_kernel_context); + pten::KernelContext pt_kernel_context; + BuildDygraphPtenKernelContext(pt_kernel_signature, pt_kernel, ins, + outs, attrs, default_attrs, dev_ctx, + &pt_kernel_context); - pt_kernel(&pt_kernel_context); + pt_kernel(&pt_kernel_context); + } if (FLAGS_benchmark) { dev_ctx->Wait(); diff --git a/paddle/fluid/pybind/op_function_generator.cc b/paddle/fluid/pybind/op_function_generator.cc index 5587952facc530c6847a8949ae17c08c7cb09a9c..957c0b0ee6d1d09fa6b4ed78595295e5b43544f5 100644 --- a/paddle/fluid/pybind/op_function_generator.cc +++ b/paddle/fluid/pybind/op_function_generator.cc @@ -123,6 +123,7 @@ static PyObject * %s(PyObject *self, PyObject *args, PyObject *kwargs) PyThreadState *tstate = nullptr; try { + platform::RecordEvent op_type_record_event("%s pybind_imperative_func"); %s framework::AttributeMap attrs; ConstructAttrMapFromPyArgs("%s", args, %d, PyTuple_GET_SIZE(args) , attrs); @@ -371,8 +372,8 @@ std::string GenerateOpFunctionsBody( // generate op funtcion body auto op_function_str = paddle::string::Sprintf( - OP_FUNCTION_TEMPLATE, func_name, ins_cast_str, op_type, input_args_num, - inplace_strategy_str, outs_initializer, ins_initializer, + OP_FUNCTION_TEMPLATE, func_name, op_type, ins_cast_str, op_type, + input_args_num, inplace_strategy_str, outs_initializer, ins_initializer, ins_initializer_with_null + outs_initializer_with_null + view_strategy_str, op_type, inplace_mapping_str, return_str); @@ -461,6 +462,7 @@ int main(int argc, char* argv[]) { #endif std::vector headers{"\"paddle/fluid/imperative/tracer.h\"", + "\"paddle/fluid/platform/profiler.h\"", "\"pybind11/detail/common.h\"", ""};