From 098516b74a0948707119c64c641a0a8fdf529454 Mon Sep 17 00:00:00 2001 From: Georgios Pinitas Date: Thu, 25 Apr 2019 18:25:06 +0100 Subject: COMPMID-1995: Fix memory management for weights transform in CLFFT Remove memory manager from weights transformation in CLFFTConvolutionLayer. Instead move the transformation function into a unique_ptr and free once the tranformation has been performed. Change-Id: Iabd691b3d517d60fa0127e44eb37d6df873a37d3 Signed-off-by: Georgios Pinitas Reviewed-on: https://review.mlplatform.org/c/1031 Reviewed-by: Giuseppe Rossini Reviewed-by: Gian Marco Iodice Comments-Addressed: Arm Jenkins Tested-by: Arm Jenkins --- arm_compute/runtime/CL/functions/CLFFTConvolutionLayer.h | 2 +- src/runtime/CL/functions/CLFFT2D.cpp | 4 +--- src/runtime/CL/functions/CLFFTConvolutionLayer.cpp | 15 ++++++++------- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/arm_compute/runtime/CL/functions/CLFFTConvolutionLayer.h b/arm_compute/runtime/CL/functions/CLFFTConvolutionLayer.h index 0fd2cf3cb1..2fabe3454a 100644 --- a/arm_compute/runtime/CL/functions/CLFFTConvolutionLayer.h +++ b/arm_compute/runtime/CL/functions/CLFFTConvolutionLayer.h @@ -118,7 +118,7 @@ private: CLPadLayer _pad_input_func; CLPadLayer _pad_weights_func; CLFFT2D _transform_input_func; - CLFFT2D _transform_weights_func; + std::unique_ptr _transform_weights_func; CLFFT2D _itransform_output_func; CLComplexPixelWiseMultiplication _prod_func; CLReductionOperation _reduce_func; diff --git a/src/runtime/CL/functions/CLFFT2D.cpp b/src/runtime/CL/functions/CLFFT2D.cpp index 4300fb4e32..165e784786 100644 --- a/src/runtime/CL/functions/CLFFT2D.cpp +++ b/src/runtime/CL/functions/CLFFT2D.cpp @@ -85,11 +85,9 @@ Status CLFFT2D::validate(const ITensorInfo *input, const ITensorInfo *output, co void CLFFT2D::run() { - _memory_group.acquire(); + MemoryGroupResourceScope scope_mg(_memory_group); _first_pass_func.run(); _second_pass_func.run(); - - _memory_group.release(); } } // namespace arm_compute diff --git a/src/runtime/CL/functions/CLFFTConvolutionLayer.cpp b/src/runtime/CL/functions/CLFFTConvolutionLayer.cpp index 441c1c7214..6a89b9d304 100644 --- a/src/runtime/CL/functions/CLFFTConvolutionLayer.cpp +++ b/src/runtime/CL/functions/CLFFTConvolutionLayer.cpp @@ -63,7 +63,7 @@ CLFFTConvolutionLayer::CLFFTConvolutionLayer(std::shared_ptr mem _pad_input_func(), _pad_weights_func(), _transform_input_func(memory_manager), - _transform_weights_func(memory_manager), + _transform_weights_func(), _itransform_output_func(memory_manager), _prod_func(), _reduce_func(), @@ -149,7 +149,8 @@ void CLFFTConvolutionLayer::configure(ICLTensor *input, const ICLTensor *weights _pad_weights_func.configure(&_flipped_weights, &_padded_weights, padding_w); // Transform weights - _transform_weights_func.configure(&_padded_weights, &_transformed_weights, FFT2DInfo()); + _transform_weights_func = support::cpp14::make_unique(); + _transform_weights_func->configure(&_padded_weights, &_transformed_weights, FFT2DInfo()); // Pad input const PaddingList padding_in = { { 0, kernel_size.x() + pad_valid.x() - 1 }, { 0, kernel_size.y() + pad_valid.y() - 1 } }; @@ -294,7 +295,7 @@ void CLFFTConvolutionLayer::run() { prepare(); - _memory_group.acquire(); + MemoryGroupResourceScope scope_mg(_memory_group); // Transform input if(_needs_permute) @@ -327,8 +328,6 @@ void CLFFTConvolutionLayer::run() { _activation_layer_func.run(); } - - _memory_group.release(); } void CLFFTConvolutionLayer::prepare() @@ -367,11 +366,13 @@ void CLFFTConvolutionLayer::prepare() CLScheduler::get().queue().finish(); _flipped_weights.allocator()->free(); - // Transform weights to frequence domain + // Transform weights to frequency domain _transformed_weights.allocator()->allocate(); - _transform_weights_func.run(); + _transform_weights_func->run(); _padded_weights.mark_as_unused(); CLScheduler::get().queue().finish(); + // Delete object and release internal memory + _transform_weights_func.reset(); _padded_weights.allocator()->free(); _is_prepared = true; -- cgit v1.2.1