From e8f1df495c32f093a9cb41fc004e628599bf49ec Mon Sep 17 00:00:00 2001 From: Taylor Yeonbok Lee Date: Tue, 29 Aug 2023 21:54:32 -0700 Subject: [PATCH] [GPU] Fixed reordered memory cache not to contain original weight memory (#19465) * Fixed reordered memory cache not to contain original weight memory * Applied review comment * Applied review comment --- .../intel_gpu/src/graph/include/convolution_inst.h | 9 ++++++++- .../intel_gpu/src/graph/include/deconvolution_inst.h | 9 ++++++++- .../intel_gpu/src/graph/include/fully_connected_inst.h | 10 +++++++++- src/plugins/intel_gpu/src/graph/primitive_inst.cpp | 4 +--- 4 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/plugins/intel_gpu/src/graph/include/convolution_inst.h b/src/plugins/intel_gpu/src/graph/include/convolution_inst.h index 7033df0905a..c0e6ce9fd52 100644 --- a/src/plugins/intel_gpu/src/graph/include/convolution_inst.h +++ b/src/plugins/intel_gpu/src/graph/include/convolution_inst.h @@ -149,7 +149,14 @@ public: memory::ptr weights_memory() const { if (is_dynamic()) { - auto weights_mem = _reordered_weights_cache.get(*_impl_params->weights_layout); + memory::ptr weights_mem = nullptr; + auto weights_layout = *_impl_params->weights_layout; + auto weights_idx = node->get_deform_conv_dep_offset() + 1; + if (weights_layout.compatible(get_node().get_input_layout(weights_idx))) { + weights_mem = dep_memory_ptr(weights_idx); + } else { + weights_mem = _reordered_weights_cache.get(*_impl_params->weights_layout); + } OPENVINO_ASSERT(weights_mem != nullptr, "[GPU] Can't find proper weights memory buffer in cache"); return weights_mem; } else { // all weights are in one buffer diff --git a/src/plugins/intel_gpu/src/graph/include/deconvolution_inst.h b/src/plugins/intel_gpu/src/graph/include/deconvolution_inst.h index 195c00d22c3..87bdf00e686 100644 --- a/src/plugins/intel_gpu/src/graph/include/deconvolution_inst.h +++ b/src/plugins/intel_gpu/src/graph/include/deconvolution_inst.h @@ -81,7 +81,14 @@ public: memory::ptr weights_memory() const { if (is_dynamic()) { - auto weights_mem = _reordered_weights_cache.get(*_impl_params->weights_layout); + memory::ptr weights_mem = nullptr; + auto weights_layout = *_impl_params->weights_layout; + size_t weights_idx = 1; + if (weights_layout.compatible(get_node().get_input_layout(weights_idx))) { + weights_mem = dep_memory_ptr(weights_idx); + } else { + weights_mem = _reordered_weights_cache.get(*_impl_params->weights_layout); + } OPENVINO_ASSERT(weights_mem != nullptr, "[GPU] Can't find proper weights memory buffer in cache"); return weights_mem; } else { diff --git a/src/plugins/intel_gpu/src/graph/include/fully_connected_inst.h b/src/plugins/intel_gpu/src/graph/include/fully_connected_inst.h index f350cd8ef15..8258367b7f9 100644 --- a/src/plugins/intel_gpu/src/graph/include/fully_connected_inst.h +++ b/src/plugins/intel_gpu/src/graph/include/fully_connected_inst.h @@ -54,7 +54,15 @@ public: memory::ptr weights_memory() const { if (is_dynamic()) { - auto weights_mem = _reordered_weights_cache.get(*_impl_params->weights_layout); + memory::ptr weights_mem = nullptr; + auto weights_layout = *_impl_params->weights_layout; + size_t weights_idx = 1; + if (weights_layout.compatible(get_node().get_input_layout(weights_idx))) { + weights_mem = dep_memory_ptr(weights_idx); + } else { + weights_mem = _reordered_weights_cache.get(*_impl_params->weights_layout); + } + OPENVINO_ASSERT(weights_mem != nullptr, "[GPU] Can't find proper weights memory buffer in cache"); return weights_mem; } else { diff --git a/src/plugins/intel_gpu/src/graph/primitive_inst.cpp b/src/plugins/intel_gpu/src/graph/primitive_inst.cpp index 271bf2d3389..2a2283ce2c4 100644 --- a/src/plugins/intel_gpu/src/graph/primitive_inst.cpp +++ b/src/plugins/intel_gpu/src/graph/primitive_inst.cpp @@ -1137,7 +1137,6 @@ event::ptr primitive_inst::update_weights() { if (!reorder_kernel_params) { // If kernel doesn't says that it doesn't require weights reorder, but weights were reordered previously, then // incorrect memory buffer may be assigned, so reset cached weights for such case - _reordered_weights_cache.add(original_layout, original_weights_memory); _impl_params->weights_layout = optional_layout(original_layout); } else { auto expected_layout = reorder_kernel_params->get_output_layout(); @@ -1153,7 +1152,6 @@ event::ptr primitive_inst::update_weights() { GPU_DEBUG_PROFILED_STAGE_CACHE_HIT(true); GPU_DEBUG_TRACE_DETAIL << id() << ": reinterpret original weights memory from " << original_layout.to_short_string() << " to " << expected_layout.to_short_string() << std::endl; - _reordered_weights_cache.add(expected_layout, engine.reinterpret_buffer(*original_weights_memory, expected_layout)); return nullptr; } else { GPU_DEBUG_PROFILED_STAGE_CACHE_HIT(false); @@ -1186,7 +1184,7 @@ event::ptr primitive_inst::update_weights() { memory::ptr weights_memory = nullptr; if (_reordered_weights_cache.is_full()) { weights_memory = _reordered_weights_cache.get_lru_element().second; - can_reuse = weights_memory->size() <= expected_layout.bytes_count() && (weights_memory->buffer_ptr() != original_weights_memory->buffer_ptr()); + can_reuse = weights_memory->size() <= expected_layout.bytes_count(); } if (can_reuse) {