From 646bc8a52d5012486646c02e3b4940def6f85a47 Mon Sep 17 00:00:00 2001 From: David Monahan Date: Mon, 31 Jan 2022 14:29:14 +0000 Subject: IVGCVSW-6696 Add Forced Import EndToEnd tests to Ref, Neon, and CL * Created EndToEnd tests with Misaligned buffers but import is forced * Added the Aligned Tests from a previous patch to avoid merge conflicts * Previous Aligned EndToEnd test for ref has been added to backendsCommon and is now used for neon as well * Added to Ref, Neon, and Gpu Backends * Neon tests only check for copies as reconfigure has not been implemented for the Neon backend yet Signed-off-by: David Monahan Signed-off-by: Narumol Prangnawarat Change-Id: I12ddf5780201044834d6d1bbeebce60a4614efd1 --- src/backends/reference/test/RefEndToEndTests.cpp | 95 ++++-------------------- 1 file changed, 14 insertions(+), 81 deletions(-) (limited to 'src/backends/reference') diff --git a/src/backends/reference/test/RefEndToEndTests.cpp b/src/backends/reference/test/RefEndToEndTests.cpp index 7a6cf97936..2828b6eff9 100644 --- a/src/backends/reference/test/RefEndToEndTests.cpp +++ b/src/backends/reference/test/RefEndToEndTests.cpp @@ -1378,91 +1378,24 @@ TEST_CASE("RefRankEndToEndTestQSymmS8") RankEndToEnd(defaultBackends); } -TEST_CASE("RefForceImportTest") +TEST_CASE("RefForceImportWithAlignedBuffersEndToEndTest") { - using namespace armnn; - - std::vector backends = defaultBackends; - - IRuntime::CreationOptions options; - IRuntimePtr runtime(IRuntime::Create(options)); - - // Builds up the structure of the network. - INetworkPtr net(INetwork::Create()); - - IConnectableLayer* input = net->AddInputLayer(0); - - ActivationDescriptor descriptor; - descriptor.m_Function = ActivationFunction::Square; - IConnectableLayer* activationLayer = net->AddActivationLayer(descriptor); - - 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, 4 }, DataType::Float32, 0.0f, 0, true)); - activationLayer->GetOutputSlot(0).SetTensorInfo(TensorInfo({ 1, 1, 1, 4 }, DataType::Float32)); - - IOptimizedNetworkPtr optNet = Optimize(*net, backends, runtime->GetDeviceSpec()); - - // Load it into the runtime. It should pass. - NetworkId netId; - std::string ignoredErrorMessage; - - INetworkProperties networkProperties(false, MemorySource::Undefined, MemorySource::Undefined); - - CHECK(runtime->LoadNetwork(netId, std::move(optNet),ignoredErrorMessage, networkProperties) - == Status::Success); - - // Creates structures for input & output - std::vector inputData - { - 1.0f, 2.0f, 3.0f, 4.0f - }; - - std::vector outputData(4); - - std::vector expectedOutput - { - 1.0f, 4.0f, 9.0f, 16.0f - }; - - InputTensors inputTensors - { - {0,armnn::ConstTensor(runtime->GetInputTensorInfo(netId, 0), inputData.data())}, - }; - OutputTensors outputTensors - { - {0,armnn::Tensor(runtime->GetOutputTensorInfo(netId, 0), outputData.data())} - }; - - runtime->GetProfiler(netId)->EnableProfiling(true); - - std::vector importedInputIds = - runtime->ImportInputs(netId, inputTensors, MemorySource::Malloc); - std::vector importedOutputIds = - runtime->ImportOutputs(netId, outputTensors, MemorySource::Malloc); - - // Do the inference and force the import as the memory is alligned. - runtime->EnqueueWorkload(netId, inputTensors, outputTensors, importedInputIds, importedOutputIds); - - // Retrieve the Profiler.Print() output to get the workload execution - ProfilerManager& profilerManager = armnn::ProfilerManager::GetInstance(); - std::stringstream ss; - profilerManager.GetProfiler()->Print(ss);; - std::string dump = ss.str(); + ForceImportWithAlignedBuffersEndToEndTest(defaultBackends); +} - // Check there is a SyncMemGeneric workload as we exported - int count = SubStringCounter(dump, "SyncMemGeneric"); - CHECK(count == 1); +TEST_CASE("RefForceImportWithMisalignedInputBuffersEndToEndTest") +{ + ForceImportWithMisalignedInputBuffersEndToEndTest(defaultBackends); +} - // Shouldn't be any CopyMemGeneric workloads - count = SubStringCounter(dump, "CopyMemGeneric"); - CHECK(count == 0); +TEST_CASE("RefForceImportWithMisalignedOutputBuffersEndToEndTest") +{ + ForceImportWithMisalignedOutputBuffersEndToEndTest(defaultBackends); +} - // Check the output is correct - CHECK(std::equal(outputData.begin(), outputData.end(), expectedOutput.begin(), expectedOutput.end())); +TEST_CASE("RefForceImportWithMisalignedInputAndOutputBuffersEndToEndTest") +{ + ForceImportWithMisalignedInputAndOutputBuffersEndToEndTest(defaultBackends); } #if !defined(__ANDROID__) -- cgit v1.2.1