From 9c67d3883adaa8a65e3567579cf99937deaab21a Mon Sep 17 00:00:00 2001 From: Giorgio Arena Date: Fri, 20 Aug 2021 15:24:03 +0100 Subject: Remove map/unmap overhead for input/output accessor when using DummyAccessor Don't map/unmap when the tensor data is not accessed in the input or output accessor. This is so to avoid measuring CPU overhead when benchmarking on the GPU backend. Resolve COMPMID-4712 Change-Id: I5baba1b93e7a51fe13525bcce6c0cfdecb14493e Signed-off-by: Giorgio Arena Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/6140 Comments-Addressed: Arm Jenkins Reviewed-by: Georgios Pinitas Tested-by: Arm Jenkins --- src/graph/Tensor.cpp | 24 ++++++++++++++++-------- src/graph/Utils.cpp | 11 +++++++++++ src/graph/backends/CL/CLDeviceBackend.cpp | 5 +++++ src/graph/backends/NEON/NEDeviceBackend.cpp | 5 +++++ src/graph/detail/ExecutionHelpers.cpp | 4 +++- 5 files changed, 40 insertions(+), 9 deletions(-) (limited to 'src/graph') diff --git a/src/graph/Tensor.cpp b/src/graph/Tensor.cpp index f69d49d016..3d4723430f 100644 --- a/src/graph/Tensor.cpp +++ b/src/graph/Tensor.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018-2019 Arm Limited. + * Copyright (c) 2018-2019,2021 Arm Limited. * * SPDX-License-Identifier: MIT * @@ -80,20 +80,28 @@ bool Tensor::call_accessor() return false; } - // Map tensor - _handle->map(true); + const bool access_data = _accessor->access_tensor_data(); - // Return in case of null backend buffer - if(_handle->tensor().buffer() == nullptr) + if(access_data) { - return false; + // Map tensor + _handle->map(true); + + // Return in case of null backend buffer + if(_handle->tensor().buffer() == nullptr) + { + return false; + } } // Call accessor bool retval = _accessor->access_tensor(_handle->tensor()); - // Unmap tensor - _handle->unmap(); + if(access_data) + { + // Unmap tensor + _handle->unmap(); + } return retval; } diff --git a/src/graph/Utils.cpp b/src/graph/Utils.cpp index 37af1bff93..ceb5ba95de 100644 --- a/src/graph/Utils.cpp +++ b/src/graph/Utils.cpp @@ -116,6 +116,17 @@ void release_default_graph_context(GraphContext &ctx) } } +void sync_backends() +{ + for(const auto &backend : backends::BackendRegistry::get().backends()) + { + if(backend.second->is_backend_supported()) + { + backend.second->sync(); + } + } +} + void setup_requested_backend_context(GraphContext &ctx, Target target) { if(backends::BackendRegistry::get().contains(target)) diff --git a/src/graph/backends/CL/CLDeviceBackend.cpp b/src/graph/backends/CL/CLDeviceBackend.cpp index b6b25cc7d0..01e5ab1730 100644 --- a/src/graph/backends/CL/CLDeviceBackend.cpp +++ b/src/graph/backends/CL/CLDeviceBackend.cpp @@ -221,6 +221,11 @@ std::shared_ptr CLDeviceBackend::create_weights_ma auto weights_mgr = std::make_shared(); return weights_mgr; } + +void CLDeviceBackend::sync() +{ + CLScheduler::get().sync(); +} } // namespace backends } // namespace graph } // namespace arm_compute diff --git a/src/graph/backends/NEON/NEDeviceBackend.cpp b/src/graph/backends/NEON/NEDeviceBackend.cpp index 9efa3ac0c8..47ef2c2394 100644 --- a/src/graph/backends/NEON/NEDeviceBackend.cpp +++ b/src/graph/backends/NEON/NEDeviceBackend.cpp @@ -175,6 +175,11 @@ std::shared_ptr NEDeviceBackend::create_weights_ma auto weights_mgr = std::make_shared(); return weights_mgr; } + +void NEDeviceBackend::sync() +{ + // nop +} } // namespace backends } // namespace graph } // namespace arm_compute diff --git a/src/graph/detail/ExecutionHelpers.cpp b/src/graph/detail/ExecutionHelpers.cpp index 5be3706cfe..ac800df76c 100644 --- a/src/graph/detail/ExecutionHelpers.cpp +++ b/src/graph/detail/ExecutionHelpers.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018-2020 Arm Limited. + * Copyright (c) 2018-2021 Arm Limited. * * SPDX-License-Identifier: MIT * @@ -265,6 +265,8 @@ bool call_all_output_node_accessors(ExecutionWorkload &workload) is_valid = is_valid && valid_output; }); + sync_backends(); + return is_valid; } } // namespace detail -- cgit v1.2.1