[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
This commit is contained in:
Taylor Yeonbok Lee 2023-08-29 21:54:32 -07:00 committed by GitHub
parent 36b9de1f25
commit e8f1df495c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 26 additions and 6 deletions

View File

@ -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

View File

@ -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 {

View File

@ -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 {

View File

@ -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) {