diff --git a/src/plugins/intel_gpu/src/graph/primitive_inst.cpp b/src/plugins/intel_gpu/src/graph/primitive_inst.cpp index 2aca7c6a4dc..65acce7e967 100644 --- a/src/plugins/intel_gpu/src/graph/primitive_inst.cpp +++ b/src/plugins/intel_gpu/src/graph/primitive_inst.cpp @@ -1314,19 +1314,20 @@ event::ptr primitive_inst::execute(const std::vector& events) { _mem_changed = false; const auto orig_outputs = _outputs; std::vector dependencies; - if (is_dynamic() && !has_inner_networks()) { + if ((is_dynamic() || _node->is_in_shape_of_subgraph()) && !has_inner_networks()) { do_runtime_in_place_concat(); OPENVINO_ASSERT(_node != nullptr, "[GPU] Invalid primitive_inst object for dynamic shapes case: program_node can't be null"); update_shape(); - bool can_skip_execution = false; if (_impl_params->output_layouts[0].count() == 0) { GPU_DEBUG_TRACE_DETAIL << id() << " : Skipping because output data is empty " << std::endl; can_skip_execution = true; } - if (_node->is_in_shape_of_subgraph()) { + // subgraph_input_changed can be available only shape_of is dynamic. + // shape_of_subgraph for static shape_of could be run every inference if constant propagation does not work. + if (_node->is_in_shape_of_subgraph() && dependant_shape_of_insts.front()->is_dynamic()) { bool subgraph_input_changed = false; for (size_t i = 0; i < dependant_shape_of_insts.size(); i++) { if (dependant_shape_of_insts[i]->shape_changed()) {