From aca60e9a20706125ac43aaa7ff23a3ac007e65f8 Mon Sep 17 00:00:00 2001 From: Tao Luo Date: Fri, 26 Apr 2019 09:07:54 +0800 Subject: [PATCH] remove unnecessary prepare_data (#17080) test=develop --- paddle/fluid/framework/operator.cc | 5 +++++ paddle/fluid/framework/operator.h | 1 + 2 files changed, 6 insertions(+) diff --git a/paddle/fluid/framework/operator.cc b/paddle/fluid/framework/operator.cc index 78410c0d09..de8766809c 100644 --- a/paddle/fluid/framework/operator.cc +++ b/paddle/fluid/framework/operator.cc @@ -1023,6 +1023,7 @@ Scope* OperatorWithKernel::PrepareData( std::vector* transfered_inplace_vars, RuntimeContext* ctx) const { Scope* new_scope = nullptr; + if (!need_prepare_data_) return new_scope; std::unordered_set no_buffer_ins; if (info_) { @@ -1115,6 +1116,10 @@ Scope* OperatorWithKernel::PrepareData( SetTensorToVariable(*var, out, trans_var); } } + // If new_scope = nullptr, it means that for each input of this Op, there is + // no TransformData. Thus, PrepareData could be skipped at the rest iterations + // of this Op's execution to save the elapsed time. + if (!new_scope) need_prepare_data_ = false; return new_scope; } diff --git a/paddle/fluid/framework/operator.h b/paddle/fluid/framework/operator.h index 489b660996..d94326563f 100644 --- a/paddle/fluid/framework/operator.h +++ b/paddle/fluid/framework/operator.h @@ -506,6 +506,7 @@ class OperatorWithKernel : public OperatorBase { mutable std::unique_ptr kernel_func_; mutable std::unique_ptr runtime_ctx_; mutable const Scope* pre_scope_ = nullptr; + mutable bool need_prepare_data_ = true; mutable bool enable_cache_runtime_context = false; mutable bool enable_cache_expected_kernel = false; mutable bool all_kernels_must_compute_runtime_shape = false; -- GitLab