IVGCVSW-4512 Add BFloat16 Debug Workload
authorNarumol Prangnawarat <narumol.prangnawarat@arm.com>
Thu, 12 Mar 2020 14:24:13 +0000 (14:24 +0000)
committerNarumol Prangnawarat <narumol.prangnawarat@arm.com>
Fri, 13 Mar 2020 10:26:39 +0000 (10:26 +0000)
Signed-off-by: Narumol Prangnawarat <narumol.prangnawarat@arm.com>
Change-Id: Id179cb4774a4565e5e905e5fe4c34299178644de

src/backends/backendsCommon/test/layerTests/DebugTestImpl.cpp
src/backends/backendsCommon/test/layerTests/DebugTestImpl.hpp
src/backends/reference/RefLayerSupport.cpp
src/backends/reference/RefWorkloadFactory.cpp
src/backends/reference/test/RefLayerTests.cpp
src/backends/reference/workloads/Debug.cpp
src/backends/reference/workloads/RefDebugWorkload.cpp
src/backends/reference/workloads/RefDebugWorkload.hpp

index 149779b..42fe487 100644 (file)
@@ -309,6 +309,34 @@ LayerTestResult<float, 1> Debug1dFloat32Test(
     return Debug1dTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
 }
 
+LayerTestResult<armnn::BFloat16, 4> Debug4dBFloat16Test(
+    armnn::IWorkloadFactory& workloadFactory,
+    const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
+{
+    return Debug4dTest<armnn::DataType::BFloat16>(workloadFactory, memoryManager);
+}
+
+LayerTestResult<armnn::BFloat16, 3> Debug3dBFloat16Test(
+    armnn::IWorkloadFactory& workloadFactory,
+    const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
+{
+    return Debug3dTest<armnn::DataType::BFloat16>(workloadFactory, memoryManager);
+}
+
+LayerTestResult<armnn::BFloat16, 2> Debug2dBFloat16Test(
+    armnn::IWorkloadFactory& workloadFactory,
+    const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
+{
+    return Debug2dTest<armnn::DataType::BFloat16>(workloadFactory, memoryManager);
+}
+
+LayerTestResult<armnn::BFloat16, 1> Debug1dBFloat16Test(
+    armnn::IWorkloadFactory& workloadFactory,
+    const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
+{
+    return Debug1dTest<armnn::DataType::BFloat16>(workloadFactory, memoryManager);
+}
+
 LayerTestResult<uint8_t, 4> Debug4dUint8Test(
     armnn::IWorkloadFactory& workloadFactory,
     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
index 7582663..cf4b237 100644 (file)
@@ -7,6 +7,8 @@
 
 #include "LayerTestResult.hpp"
 
+#include <BFloat16.hpp>
+
 #include <armnn/backends/IBackendInternal.hpp>
 #include <backendsCommon/WorkloadFactory.hpp>
 
@@ -26,6 +28,22 @@ LayerTestResult<float, 1> Debug1dFloat32Test(
     armnn::IWorkloadFactory& workloadFactory,
     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
 
+LayerTestResult<armnn::BFloat16, 4> Debug4dBFloat16Test(
+    armnn::IWorkloadFactory& workloadFactory,
+    const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
+
+LayerTestResult<armnn::BFloat16, 3> Debug3dBFloat16Test(
+    armnn::IWorkloadFactory& workloadFactory,
+    const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
+
+LayerTestResult<armnn::BFloat16, 2> Debug2dBFloat16Test(
+    armnn::IWorkloadFactory& workloadFactory,
+    const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
+
+LayerTestResult<armnn::BFloat16, 1> Debug1dBFloat16Test(
+    armnn::IWorkloadFactory& workloadFactory,
+    const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
+
 LayerTestResult<uint8_t, 4> Debug4dUint8Test(
     armnn::IWorkloadFactory& workloadFactory,
     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
index 9dc576c..94128fe 100644 (file)
@@ -495,8 +495,9 @@ bool RefLayerSupport::IsDebugSupported(const TensorInfo& input,
 {
     bool supported = true;
 
-    std::array<DataType, 7> supportedTypes =
+    std::array<DataType, 8> supportedTypes =
     {
+        DataType::BFloat16,
         DataType::Float16,
         DataType::Float32,
         DataType::QAsymmU8,
index 1d82421..aebf19b 100644 (file)
@@ -203,6 +203,10 @@ std::unique_ptr<IWorkload> RefWorkloadFactory::CreateConvolution2d(const Convolu
 std::unique_ptr<IWorkload> RefWorkloadFactory::CreateDebug(const DebugQueueDescriptor& descriptor,
                                                            const WorkloadInfo& info) const
 {
+    if (IsBFloat16(info))
+    {
+        return std::make_unique<RefDebugBFloat16Workload>(descriptor, info);
+    }
     if (IsFloat16(info))
     {
         return std::make_unique<RefDebugFloat16Workload>(descriptor, info);
index a6bfe35..73b2a05 100644 (file)
@@ -1417,6 +1417,11 @@ ARMNN_AUTO_TEST_CASE(Debug3dFloat32, Debug3dFloat32Test)
 ARMNN_AUTO_TEST_CASE(Debug2dFloat32, Debug2dFloat32Test)
 ARMNN_AUTO_TEST_CASE(Debug1dFloat32, Debug1dFloat32Test)
 
+ARMNN_AUTO_TEST_CASE(Debug4dBFloat16, Debug4dBFloat16Test)
+ARMNN_AUTO_TEST_CASE(Debug3dBFloat16, Debug3dBFloat16Test)
+ARMNN_AUTO_TEST_CASE(Debug2dBFloat16, Debug2dBFloat16Test)
+ARMNN_AUTO_TEST_CASE(Debug1dBFloat16, Debug1dBFloat16Test)
+
 ARMNN_AUTO_TEST_CASE(Debug4dUint8, Debug4dUint8Test)
 ARMNN_AUTO_TEST_CASE(Debug3dUint8, Debug3dUint8Test)
 ARMNN_AUTO_TEST_CASE(Debug2dUint8, Debug2dUint8Test)
index 49e9e02..aadbc76 100644 (file)
@@ -5,6 +5,7 @@
 
 #include "Debug.hpp"
 
+#include <BFloat16.hpp>
 #include <Half.hpp>
 
 #include <boost/numeric/conversion/cast.hpp>
@@ -88,6 +89,12 @@ void Debug(const TensorInfo& inputInfo,
     std::cout << " }" << std::endl;
 }
 
+template void Debug<BFloat16>(const TensorInfo& inputInfo,
+                          const BFloat16* inputData,
+                          LayerGuid guid,
+                          const std::string& layerName,
+                          unsigned int slotIndex);
+
 template void Debug<Half>(const TensorInfo& inputInfo,
                           const Half* inputData,
                           LayerGuid guid,
index af714a3..72b03ef 100644 (file)
@@ -44,6 +44,7 @@ void RefDebugWorkload<DataType>::RegisterDebugCallback(const DebugCallbackFuncti
     m_Callback = func;
 }
 
+template class RefDebugWorkload<DataType::BFloat16>;
 template class RefDebugWorkload<DataType::Float16>;
 template class RefDebugWorkload<DataType::Float32>;
 template class RefDebugWorkload<DataType::QAsymmU8>;
index 5a2a1cd..1ccbcc5 100644 (file)
@@ -37,6 +37,7 @@ private:
     DebugCallbackFunction m_Callback;
 };
 
+using RefDebugBFloat16Workload   = RefDebugWorkload<DataType::BFloat16>;
 using RefDebugFloat16Workload   = RefDebugWorkload<DataType::Float16>;
 using RefDebugFloat32Workload   = RefDebugWorkload<DataType::Float32>;
 using RefDebugQAsymmU8Workload  = RefDebugWorkload<DataType::QAsymmU8>;