From ddd79f5a1e92bfea85ad2104f15c991952f65ef8 Mon Sep 17 00:00:00 2001 From: Georgios Pinitas Date: Fri, 15 Jan 2021 09:42:26 +0000 Subject: Release winograd transformed weights if not needed on NEON GEMM function used within NEWinogradLayer re-transforms the weights after the original winograd transformation leading to double allocation of the weights. Release appropriately and retain only one copy of the weights, the last transformed one. Signed-off-by: Georgios Pinitas Change-Id: I60459bfe370bff453150dfe9536cd9e7a5b56def Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/4862 Tested-by: Arm Jenkins Reviewed-by: Michele Di Giorgio Comments-Addressed: Arm Jenkins --- src/runtime/NEON/functions/NEWinogradConvolutionLayer.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'src/runtime/NEON/functions/NEWinogradConvolutionLayer.cpp') diff --git a/src/runtime/NEON/functions/NEWinogradConvolutionLayer.cpp b/src/runtime/NEON/functions/NEWinogradConvolutionLayer.cpp index bd3bdd6a26..21a4b7973a 100644 --- a/src/runtime/NEON/functions/NEWinogradConvolutionLayer.cpp +++ b/src/runtime/NEON/functions/NEWinogradConvolutionLayer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2020 Arm Limited. + * Copyright (c) 2017-2021 Arm Limited. * * SPDX-License-Identifier: MIT * @@ -766,8 +766,14 @@ void NEWinogradConvolutionLayer::prepare() // Transform weights _kernel_storage.allocator()->allocate(); NEScheduler::get().schedule(_transform_weights_kernel.get(), Window::DimX); - _weights_hwio.allocator()->free(); + + _gemm_function.prepare(); + if(!_kernel_storage.is_used()) + { + _kernel_storage.allocator()->free(); + } + _is_prepared = true; } } -- cgit v1.2.1