Skip to content

Commit

Permalink
[GPU] Fixed reordered memory cache not to contain original weight mem…
Browse files Browse the repository at this point in the history
…ory (openvinotoolkit#19465)

* Fixed reordered memory cache not to contain original weight memory

* Applied review comment

* Applied review comment
  • Loading branch information
yeonbok authored Aug 30, 2023
1 parent 36b9de1 commit e8f1df4
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 6 deletions.
9 changes: 8 additions & 1 deletion src/plugins/intel_gpu/src/graph/include/convolution_inst.h
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,14 @@ class typed_primitive_inst<convolution> : public typed_primitive_inst_base<convo

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
Expand Down
9 changes: 8 additions & 1 deletion src/plugins/intel_gpu/src/graph/include/deconvolution_inst.h
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,14 @@ class typed_primitive_inst<deconvolution> : public typed_primitive_inst_base<dec

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 {
Expand Down
10 changes: 9 additions & 1 deletion src/plugins/intel_gpu/src/graph/include/fully_connected_inst.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,15 @@ class typed_primitive_inst<fully_connected> : public typed_primitive_inst_base<f

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 {
Expand Down
4 changes: 1 addition & 3 deletions src/plugins/intel_gpu/src/graph/primitive_inst.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand All @@ -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);
Expand Down Expand Up @@ -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) {
Expand Down

0 comments on commit e8f1df4

Please sign in to comment.