diff options
Diffstat (limited to 'src/backends/backendsCommon')
-rw-r--r-- | src/backends/backendsCommon/CpuTensorHandle.cpp | 10 | ||||
-rw-r--r-- | src/backends/backendsCommon/CpuTensorHandle.hpp | 13 | ||||
-rw-r--r-- | src/backends/backendsCommon/ITensorHandle.hpp | 17 | ||||
-rw-r--r-- | src/backends/backendsCommon/test/TensorCopyUtils.cpp | 150 | ||||
-rw-r--r-- | src/backends/backendsCommon/test/TensorCopyUtils.hpp | 4 |
5 files changed, 31 insertions, 163 deletions
diff --git a/src/backends/backendsCommon/CpuTensorHandle.cpp b/src/backends/backendsCommon/CpuTensorHandle.cpp index 46a7cb8251..fe0c634e7c 100644 --- a/src/backends/backendsCommon/CpuTensorHandle.cpp +++ b/src/backends/backendsCommon/CpuTensorHandle.cpp @@ -84,6 +84,16 @@ void ScopedCpuTensorHandle::Allocate() } } +void ScopedCpuTensorHandle::CopyOutTo(void* memory) const +{ + memcpy(memory, GetTensor<void>(), GetTensorInfo().GetNumBytes()); +} + +void ScopedCpuTensorHandle::CopyInFrom(const void* memory) +{ + memcpy(GetTensor<void>(), memory, GetTensorInfo().GetNumBytes()); +} + void ScopedCpuTensorHandle::CopyFrom(const ScopedCpuTensorHandle& other) { CopyFrom(other.GetTensor<void>(), other.GetTensorInfo().GetNumBytes()); diff --git a/src/backends/backendsCommon/CpuTensorHandle.hpp b/src/backends/backendsCommon/CpuTensorHandle.hpp index 4138812822..ae13d6c439 100644 --- a/src/backends/backendsCommon/CpuTensorHandle.hpp +++ b/src/backends/backendsCommon/CpuTensorHandle.hpp @@ -31,11 +31,6 @@ public: return m_TensorInfo; } - virtual ITensorHandle::Type GetType() const override - { - return ITensorHandle::Cpu; - } - virtual void Manage() override {} virtual ITensorHandle* GetParent() const override { return nullptr; } @@ -66,6 +61,10 @@ protected: void SetConstMemory(const void* mem) { m_Memory = mem; } private: + // Only used for testing + void CopyOutTo(void *) const override {} + void CopyInFrom(const void*) override {} + ConstCpuTensorHandle(const ConstCpuTensorHandle& other) = delete; ConstCpuTensorHandle& operator=(const ConstCpuTensorHandle& other) = delete; @@ -119,6 +118,10 @@ public: virtual void Allocate() override; private: + // Only used for testing + void CopyOutTo(void* memory) const override; + void CopyInFrom(const void* memory) override; + void CopyFrom(const ScopedCpuTensorHandle& other); void CopyFrom(const void* srcMemory, unsigned int numBytes); }; diff --git a/src/backends/backendsCommon/ITensorHandle.hpp b/src/backends/backendsCommon/ITensorHandle.hpp index 02f4ed6e5a..176b021d76 100644 --- a/src/backends/backendsCommon/ITensorHandle.hpp +++ b/src/backends/backendsCommon/ITensorHandle.hpp @@ -12,13 +12,6 @@ class TensorShape; class ITensorHandle { public: - enum Type - { - Cpu, - CL, - Neon - }; - virtual ~ITensorHandle(){} /// Indicate to the memory manager that this resource is active. @@ -29,10 +22,6 @@ public: /// This is used to compute overlapping lifetimes of resources. virtual void Allocate() = 0; - /// Get the type backend associated with the tensor handle. - /// \return Type enum - virtual ITensorHandle::Type GetType() const = 0; - /// Get the parent tensor if this is a subtensor. /// \return a pointer to the parent tensor. Otherwise nullptr if not a subtensor. virtual ITensorHandle* GetParent() const = 0; @@ -64,10 +53,14 @@ public: /// \return a TensorShape filled with the strides for each dimension virtual TensorShape GetStrides() const = 0; - /// Get the number of elements for each dimension orderd from slowest iterating dimension + /// Get the number of elements for each dimension ordered from slowest iterating dimension /// to fastest iterating dimension. /// \return a TensorShape filled with the number of elements for each dimension. virtual TensorShape GetShape() const = 0; + + // Testing support to be able to verify and set tensor data content + virtual void CopyOutTo(void* memory) const = 0; + virtual void CopyInFrom(const void* memory) = 0; }; } diff --git a/src/backends/backendsCommon/test/TensorCopyUtils.cpp b/src/backends/backendsCommon/test/TensorCopyUtils.cpp index acc28c9c03..ba7208cc40 100644 --- a/src/backends/backendsCommon/test/TensorCopyUtils.cpp +++ b/src/backends/backendsCommon/test/TensorCopyUtils.cpp @@ -4,158 +4,20 @@ // #include "TensorCopyUtils.hpp" - #include <Half.hpp> -#ifdef ARMCOMPUTECL_ENABLED -#include <cl/ClTensorHandle.hpp> -#endif - -#if ARMCOMPUTENEON_ENABLED -#include <neon/NeonTensorHandle.hpp> -#endif - -#if ARMCOMPUTECLENABLED || ARMCOMPUTENEON_ENABLED -#include <aclCommon/ArmComputeTensorUtils.hpp> -#endif - -#include <backendsCommon/CpuTensorHandle.hpp> - -#include <boost/cast.hpp> - -#include <algorithm> -#include <cstring> - -void CopyDataToITensorHandle(armnn::ITensorHandle* tensorHandle, const void* mem) +void CopyDataToITensorHandle(armnn::ITensorHandle* tensorHandle, const void* memory) { - switch (tensorHandle->GetType()) - { - case armnn::ITensorHandle::Cpu: - { - auto handle = boost::polymorphic_downcast<armnn::ScopedCpuTensorHandle*>(tensorHandle); - memcpy(handle->GetTensor<void>(), mem, handle->GetTensorInfo().GetNumBytes()); - break; - } -#ifdef ARMCOMPUTECL_ENABLED - case armnn::ITensorHandle::CL: - { - using armnn::armcomputetensorutils::CopyArmComputeITensorData; - auto handle = boost::polymorphic_downcast<armnn::IClTensorHandle*>(tensorHandle); - handle->Map(true); - switch(handle->GetDataType()) - { - case arm_compute::DataType::F32: - CopyArmComputeITensorData(static_cast<const float*>(mem), handle->GetTensor()); - break; - case arm_compute::DataType::QASYMM8: - CopyArmComputeITensorData(static_cast<const uint8_t*>(mem), handle->GetTensor()); - break; - case arm_compute::DataType::F16: - CopyArmComputeITensorData(static_cast<const armnn::Half*>(mem), handle->GetTensor()); - break; - default: - { - throw armnn::UnimplementedException(); - } - } - handle->Unmap(); - break; - } -#endif -#if ARMCOMPUTENEON_ENABLED - case armnn::ITensorHandle::Neon: - { - using armnn::armcomputetensorutils::CopyArmComputeITensorData; - auto handle = boost::polymorphic_downcast<armnn::INeonTensorHandle*>(tensorHandle); - switch (handle->GetDataType()) - { - case arm_compute::DataType::F32: - CopyArmComputeITensorData(static_cast<const float*>(mem), handle->GetTensor()); - break; - case arm_compute::DataType::QASYMM8: - CopyArmComputeITensorData(static_cast<const uint8_t*>(mem), handle->GetTensor()); - break; - default: - { - throw armnn::UnimplementedException(); - } - } - break; - } -#endif - default: - { - throw armnn::UnimplementedException(); - } - } + tensorHandle->CopyInFrom(memory); } -void CopyDataFromITensorHandle(void* mem, const armnn::ITensorHandle* tensorHandle) +void CopyDataFromITensorHandle(void* memory, const armnn::ITensorHandle* tensorHandle) { - switch (tensorHandle->GetType()) - { - case armnn::ITensorHandle::Cpu: - { - auto handle = boost::polymorphic_downcast<const armnn::ScopedCpuTensorHandle*>(tensorHandle); - memcpy(mem, handle->GetTensor<void>(), handle->GetTensorInfo().GetNumBytes()); - break; - } -#ifdef ARMCOMPUTECL_ENABLED - case armnn::ITensorHandle::CL: - { - using armnn::armcomputetensorutils::CopyArmComputeITensorData; - auto handle = boost::polymorphic_downcast<const armnn::IClTensorHandle*>(tensorHandle); - const_cast<armnn::IClTensorHandle*>(handle)->Map(true); - switch(handle->GetDataType()) - { - case arm_compute::DataType::F32: - CopyArmComputeITensorData(handle->GetTensor(), static_cast<float*>(mem)); - break; - case arm_compute::DataType::QASYMM8: - CopyArmComputeITensorData(handle->GetTensor(), static_cast<uint8_t*>(mem)); - break; - case arm_compute::DataType::F16: - CopyArmComputeITensorData(handle->GetTensor(), static_cast<armnn::Half*>(mem)); - break; - default: - { - throw armnn::UnimplementedException(); - } - } - const_cast<armnn::IClTensorHandle*>(handle)->Unmap(); - break; - } -#endif -#if ARMCOMPUTENEON_ENABLED - case armnn::ITensorHandle::Neon: - { - using armnn::armcomputetensorutils::CopyArmComputeITensorData; - auto handle = boost::polymorphic_downcast<const armnn::INeonTensorHandle*>(tensorHandle); - switch (handle->GetDataType()) - { - case arm_compute::DataType::F32: - CopyArmComputeITensorData(handle->GetTensor(), static_cast<float*>(mem)); - break; - case arm_compute::DataType::QASYMM8: - CopyArmComputeITensorData(handle->GetTensor(), static_cast<uint8_t*>(mem)); - break; - default: - { - throw armnn::UnimplementedException(); - } - } - break; - } -#endif - default: - { - throw armnn::UnimplementedException(); - } - } + tensorHandle->CopyOutTo(memory); } -void AllocateAndCopyDataToITensorHandle(armnn::ITensorHandle* tensorHandle, const void* mem) +void AllocateAndCopyDataToITensorHandle(armnn::ITensorHandle* tensorHandle, const void* memory) { tensorHandle->Allocate(); - CopyDataToITensorHandle(tensorHandle, mem); + CopyDataToITensorHandle(tensorHandle, memory); } diff --git a/src/backends/backendsCommon/test/TensorCopyUtils.hpp b/src/backends/backendsCommon/test/TensorCopyUtils.hpp index 2187523edb..36f6369c0f 100644 --- a/src/backends/backendsCommon/test/TensorCopyUtils.hpp +++ b/src/backends/backendsCommon/test/TensorCopyUtils.hpp @@ -8,8 +8,8 @@ #include <backendsCommon/ITensorHandle.hpp> -void CopyDataToITensorHandle(armnn::ITensorHandle* tensorHandle, const void* mem); +void CopyDataToITensorHandle(armnn::ITensorHandle* tensorHandle, const void* memory); void CopyDataFromITensorHandle(void* mem, const armnn::ITensorHandle* tensorHandle); -void AllocateAndCopyDataToITensorHandle(armnn::ITensorHandle* tensorHandle, const void* mem);
\ No newline at end of file +void AllocateAndCopyDataToITensorHandle(armnn::ITensorHandle* tensorHandle, const void* memory);
\ No newline at end of file |