From 77605826a353981d41f0ee346850d411770535f8 Mon Sep 17 00:00:00 2001 From: Nikhil Raj Date: Mon, 3 Sep 2018 11:25:56 +0100 Subject: IVGCVSW-1713 Create a minimum unit test to compare the results before and after passing the FP16 flag in the Android-nn-driver Change-Id: If8d4ca12421c3bee2526eec98f11d393af822373 --- test/DriverTestHelpers.hpp | 90 ++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 76 insertions(+), 14 deletions(-) (limited to 'test/DriverTestHelpers.hpp') diff --git a/test/DriverTestHelpers.hpp b/test/DriverTestHelpers.hpp index 03dbeb98..ce09ee68 100644 --- a/test/DriverTestHelpers.hpp +++ b/test/DriverTestHelpers.hpp @@ -10,6 +10,7 @@ #include "../ArmnnDriver.hpp" #include +#include namespace android { @@ -72,9 +73,31 @@ android::sp AddPoolAndGetData(uint32_t size, Request& request); void AddPoolAndSetData(uint32_t size, Request& request, const float* data); -void AddOperand(::android::hardware::neuralnetworks::V1_0::Model& model, const Operand& op); +template +void AddOperand(HalModel& model, const Operand& op) +{ + model.operands.resize(model.operands.size() + 1); + model.operands[model.operands.size() - 1] = op; +} + +template +void AddIntOperand(HalModel& model, int32_t value) +{ + DataLocation location = {}; + location.offset = model.operandValues.size(); + location.length = sizeof(int32_t); + + Operand op = {}; + op.type = OperandType::INT32; + op.dimensions = hidl_vec{}; + op.lifetime = OperandLifeTime::CONSTANT_COPY; + op.location = location; -void AddIntOperand(::android::hardware::neuralnetworks::V1_0::Model& model, int32_t value); + model.operandValues.resize(model.operandValues.size() + location.length); + *reinterpret_cast(&model.operandValues[location.offset]) = value; + + AddOperand(model, op); +} template OperandType TypeToOperandType(); @@ -85,8 +108,8 @@ OperandType TypeToOperandType(); template<> OperandType TypeToOperandType(); -template -void AddTensorOperand(::android::hardware::neuralnetworks::V1_0::Model& model, +template +void AddTensorOperand(HalModel& model, hidl_vec dimensions, T* values, OperandType operandType = OperandType::TENSOR_FLOAT32) @@ -113,28 +136,67 @@ void AddTensorOperand(::android::hardware::neuralnetworks::V1_0::Model& model, *(reinterpret_cast(&model.operandValues[location.offset]) + i) = values[i]; } - AddOperand(model, op); + AddOperand(model, op); } -void AddInputOperand(::android::hardware::neuralnetworks::V1_0::Model& model, +template +void AddInputOperand(HalModel& model, hidl_vec dimensions, - ::android::hardware::neuralnetworks::V1_0::OperandType operandType = OperandType::TENSOR_FLOAT32); + OperandType operandType = OperandType::TENSOR_FLOAT32) +{ + Operand op = {}; + op.type = operandType; + op.dimensions = dimensions; + op.lifetime = OperandLifeTime::MODEL_INPUT; -void AddOutputOperand(::android::hardware::neuralnetworks::V1_0::Model& model, + AddOperand(model, op); + + model.inputIndexes.resize(model.inputIndexes.size() + 1); + model.inputIndexes[model.inputIndexes.size() - 1] = model.operands.size() - 1; +} + +template +void AddOutputOperand(HalModel& model, hidl_vec dimensions, - ::android::hardware::neuralnetworks::V1_0::OperandType operandType = OperandType::TENSOR_FLOAT32); + OperandType operandType = OperandType::TENSOR_FLOAT32) +{ + Operand op = {}; + op.type = operandType; + op.scale = operandType == OperandType::TENSOR_QUANT8_ASYMM ? 1.f / 255.f : 0.f; + op.dimensions = dimensions; + op.lifetime = OperandLifeTime::MODEL_OUTPUT; -android::sp PrepareModel(const ::android::hardware::neuralnetworks::V1_0::Model& model, - armnn_driver::ArmnnDriver& driver); + AddOperand(model, op); + + model.outputIndexes.resize(model.outputIndexes.size() + 1); + model.outputIndexes[model.outputIndexes.size() - 1] = model.operands.size() - 1; +} android::sp PrepareModelWithStatus(const ::android::hardware::neuralnetworks::V1_0::Model& model, armnn_driver::ArmnnDriver& driver, - ErrorStatus & prepareStatus, - ErrorStatus expectedStatus=ErrorStatus::NONE); + ErrorStatus& prepareStatus, + ErrorStatus expectedStatus = ErrorStatus::NONE); + +#if defined(ARMNN_ANDROID_NN_V1_1) // Using ::android::hardware::neuralnetworks::V1_1. + +android::sp PrepareModelWithStatus(const ::android::hardware::neuralnetworks::V1_1::Model& model, + armnn_driver::ArmnnDriver& driver, + ErrorStatus& prepareStatus, + ErrorStatus expectedStatus = ErrorStatus::NONE); + +#endif + +template +android::sp PrepareModel(const HalModel& model, + armnn_driver::ArmnnDriver& driver) +{ + ErrorStatus prepareStatus = ErrorStatus::NONE; + return PrepareModelWithStatus(model, driver, prepareStatus); +} ErrorStatus Execute(android::sp preparedModel, const Request& request, - ErrorStatus expectedStatus=ErrorStatus::NONE); + ErrorStatus expectedStatus = ErrorStatus::NONE); android::sp ExecuteNoWait(android::sp preparedModel, const Request& request); -- cgit v1.2.1