IVGCVSW-1946: Remove armnn/src from the include paths
[platform/upstream/armnn.git] / src / backends / cl / workloads / ClWorkloadUtils.hpp
1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 #pragma once
6
7 #include <Half.hpp>
8
9 #include <aclCommon/ArmComputeTensorUtils.hpp>
10 #include <cl/OpenClTimer.hpp>
11 #include <backendsCommon/CpuTensorHandle.hpp>
12
13 #include <arm_compute/runtime/CL/CLFunctions.h>
14
15 #include <sstream>
16
17 #define ARMNN_SCOPED_PROFILING_EVENT_CL(name) \
18     ARMNN_SCOPED_PROFILING_EVENT_WITH_INSTRUMENTS(armnn::Compute::GpuAcc, \
19                                                   name, \
20                                                   armnn::OpenClTimer(), \
21                                                   armnn::WallClockTimer())
22
23 namespace armnn
24 {
25
26 template <typename T>
27 void CopyArmComputeClTensorData(arm_compute::CLTensor& dstTensor, const T* srcData)
28 {
29     {
30         ARMNN_SCOPED_PROFILING_EVENT_CL("MapClTensorForWriting");
31         dstTensor.map(true);
32     }
33
34     {
35         ARMNN_SCOPED_PROFILING_EVENT_CL("CopyToClTensor");
36         armcomputetensorutils::CopyArmComputeITensorData<T>(srcData, dstTensor);
37     }
38
39     dstTensor.unmap();
40 }
41
42 inline void InitializeArmComputeClTensorData(arm_compute::CLTensor& clTensor,
43                                              const ConstCpuTensorHandle* handle)
44 {
45     BOOST_ASSERT(handle);
46
47     armcomputetensorutils::InitialiseArmComputeTensorEmpty(clTensor);
48     switch(handle->GetTensorInfo().GetDataType())
49     {
50         case DataType::Float16:
51             CopyArmComputeClTensorData(clTensor, handle->GetConstTensor<armnn::Half>());
52             break;
53         case DataType::Float32:
54             CopyArmComputeClTensorData(clTensor, handle->GetConstTensor<float>());
55             break;
56         case DataType::QuantisedAsymm8:
57             CopyArmComputeClTensorData(clTensor, handle->GetConstTensor<uint8_t>());
58             break;
59         case DataType::Signed32:
60             CopyArmComputeClTensorData(clTensor, handle->GetConstTensor<int32_t>());
61             break;
62         default:
63             BOOST_ASSERT_MSG(false, "Unexpected tensor type.");
64     }
65 };
66
67 inline RuntimeException WrapClError(const cl::Error& clError, const CheckLocation& location)
68 {
69     std::stringstream message;
70     message << "CL error: " << clError.what() << ". Error code: " << clError.err();
71
72     return RuntimeException(message.str(), location);
73 }
74
75 inline void RunClFunction(arm_compute::IFunction& function, const CheckLocation& location)
76 {
77     try
78     {
79         function.run();
80     }
81     catch (cl::Error& error)
82     {
83         throw WrapClError(error, location);
84     }
85 }
86
87 } //namespace armnn