From 317cae526ba7b58891b6f054bb10af3b6e22d5a3 Mon Sep 17 00:00:00 2001 From: Nattapat Chaimanowong Date: Thu, 28 Mar 2019 10:29:12 +0000 Subject: IVGCVSW-2866 Implement RegisterDebugCallback for RefDebugWorkload Change-Id: I9144fb6b7d05561b5b8fd9db5dbe31c9257f10ca Signed-off-by: Nattapat Chaimanowong --- src/armnn/test/DebugCallbackTest.cpp | 98 ++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 src/armnn/test/DebugCallbackTest.cpp (limited to 'src/armnn') diff --git a/src/armnn/test/DebugCallbackTest.cpp b/src/armnn/test/DebugCallbackTest.cpp new file mode 100644 index 0000000000..0b1abbf2dc --- /dev/null +++ b/src/armnn/test/DebugCallbackTest.cpp @@ -0,0 +1,98 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include +#include +#include +#include +#include + +#include + +BOOST_AUTO_TEST_SUITE(DebugCallback) + +namespace +{ + +using namespace armnn; + +INetworkPtr CreateSimpleNetwork() +{ + INetworkPtr net(INetwork::Create()); + + IConnectableLayer* input = net->AddInputLayer(0, "Input"); + + ActivationDescriptor descriptor; + descriptor.m_Function = ActivationFunction::ReLu; + IConnectableLayer* activationLayer = net->AddActivationLayer(descriptor, "Activation:ReLu"); + + IConnectableLayer* output = net->AddOutputLayer(0); + + input->GetOutputSlot(0).Connect(activationLayer->GetInputSlot(0)); + activationLayer->GetOutputSlot(0).Connect(output->GetInputSlot(0)); + + input->GetOutputSlot(0).SetTensorInfo(TensorInfo({ 1, 1, 1, 5 }, DataType::Float32)); + activationLayer->GetOutputSlot(0).SetTensorInfo(TensorInfo({ 1, 1, 1, 5 }, DataType::Float32)); + + return net; +} + +BOOST_AUTO_TEST_CASE(RuntimeRegisterDebugCallback) +{ + INetworkPtr net = CreateSimpleNetwork(); + + IRuntime::CreationOptions options; + IRuntimePtr runtime(IRuntime::Create(options)); + + // Optimize the network with debug option + OptimizerOptions optimizerOptions(false, true); + std::vector backends = { "CpuRef" }; + IOptimizedNetworkPtr optNet = Optimize(*net, backends, runtime->GetDeviceSpec(), optimizerOptions); + + NetworkId netId; + BOOST_TEST(runtime->LoadNetwork(netId, std::move(optNet)) == Status::Success); + + // Set up callback function + int callCount = 0; + std::vector tensorShapes; + std::vector slotIndexes; + auto mockCallback = [&](LayerGuid guid, unsigned int slotIndex, ITensorHandle* tensor) + { + slotIndexes.push_back(slotIndex); + tensorShapes.push_back(tensor->GetShape()); + callCount++; + }; + + runtime->RegisterDebugCallback(netId, mockCallback); + + std::vector inputData({-2, -1, 0, 1, 2}); + std::vector outputData(5); + + InputTensors inputTensors + { + {0, ConstTensor(runtime->GetInputTensorInfo(netId, 0), inputData.data())} + }; + OutputTensors outputTensors + { + {0, Tensor(runtime->GetOutputTensorInfo(netId, 0), outputData.data())} + }; + + runtime->EnqueueWorkload(netId, inputTensors, outputTensors); + + // Check that the callback was called twice + BOOST_TEST(callCount == 2); + + // Check that tensor handles passed to callback have correct shapes + const std::vector expectedShapes({TensorShape({1, 1, 1, 5}), TensorShape({1, 1, 1, 5})}); + BOOST_TEST(tensorShapes == expectedShapes); + + // Check that slot indexes passed to callback are correct + const std::vector expectedSlotIndexes({0, 0}); + BOOST_TEST(slotIndexes == expectedSlotIndexes); +} + +} // anonymous namespace + +BOOST_AUTO_TEST_SUITE_END() -- cgit v1.2.1