SampleDriverQuant.cpp revision 820215d28bed6c90f696cde0f282445d16da432e
1b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani/* 2b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani * Copyright (C) 2017 The Android Open Source Project 3b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani * 4b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani * Licensed under the Apache License, Version 2.0 (the "License"); 5b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani * you may not use this file except in compliance with the License. 6b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani * You may obtain a copy of the License at 7b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani * 8b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani * http://www.apache.org/licenses/LICENSE-2.0 9b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani * 10b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani * Unless required by applicable law or agreed to in writing, software 11b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani * distributed under the License is distributed on an "AS IS" BASIS, 12b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani * See the License for the specific language governing permissions and 14b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani * limitations under the License. 15b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani */ 16b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani 17b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani#define LOG_TAG "SampleDriverQuant" 18b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani 19ab61b0df4af1a504e845c7008224ebadb5400ce9Andres Morales#include "SampleDriver.h" 207ab8929cc6ecbd1ba14c0d6ecb393b31f9a6fcdaAndres Morales 2139b467482d1bf256a111c757e9b7621c6f523271Jason Monk#include "HalInterfaces.h" 22ab61b0df4af1a504e845c7008224ebadb5400ce9Andres Morales#include "Utils.h" 23ab61b0df4af1a504e845c7008224ebadb5400ce9Andres Morales 24b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani#include <android-base/logging.h> 257dbbe131683c231f6820bca4d67853649a4836f8Sudheer Shanka#include <hidl/LegacySupport.h> 262c53933e8d35ba50d0791a29e46fa3156e9cab7cJulia Reynolds#include <thread> 27ff8a68010e2f7f41da6db592f3eea836e7d9274fRussell Brenner 2839b467482d1bf256a111c757e9b7621c6f523271Jason Monknamespace android { 29b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasaninamespace nn { 30b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasaninamespace sample_driver { 31b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani 32b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasaniclass SampleDriverQuant : public SampleDriver { 33ce25af48383b26535ec07312ab0db6928bba1fe3Julia Reynoldspublic: 34b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani SampleDriverQuant() : SampleDriver("sample-quant") {} 359d1bfd1e8de6e46137a9571507c03526880d6a46Chris Wren Return<void> getCapabilities(getCapabilities_cb _hidl_cb) override; 367dbbe131683c231f6820bca4d67853649a4836f8Sudheer Shanka Return<void> getSupportedOperations(const Model& model, getSupportedOperations_cb cb) override; 377dbbe131683c231f6820bca4d67853649a4836f8Sudheer Shanka}; 387dbbe131683c231f6820bca4d67853649a4836f8Sudheer Shanka 3939b467482d1bf256a111c757e9b7621c6f523271Jason MonkReturn<void> SampleDriverQuant::getCapabilities(getCapabilities_cb cb) { 40b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani VLOG(DRIVER) << "getCapabilities()"; 41b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani Capabilities capabilities = {.float32Performance = {.execTime = 50.0f, .powerUsage = 1.0f}, 42b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani .quantized8Performance = {.execTime = 50.0f, .powerUsage = 1.0f}}; 43b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani cb(ErrorStatus::NONE, capabilities); 44b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani return Void(); 45b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani} 46b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani 47b14e1e04939ca610fd5f2439f879265450b0a6cdAmith YamasaniReturn<void> SampleDriverQuant::getSupportedOperations(const Model& model, 48b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani getSupportedOperations_cb cb) { 49b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani VLOG(DRIVER) << "getSupportedOperations()"; 500708d9e119da4c4d9424c0bc54fa458d01856bd7Udam Saini if (validateModel(model)) { 51b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani const size_t count = model.operations.size(); 52b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani std::vector<bool> supported(count); 53b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani for (size_t i = 0; i < count; i++) { 54b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani const Operation& operation = model.operations[i]; 55b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani if (operation.inputs.size() > 0) { 56b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani const Operand& firstOperand = model.operands[operation.inputs[0]]; 57b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani supported[i] = firstOperand.type == OperandType::TENSOR_QUANT8_ASYMM; 58b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani } 59b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani } 60b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani cb(ErrorStatus::NONE, supported); 61b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani } else { 62b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani std::vector<bool> supported; 63b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani cb(ErrorStatus::INVALID_ARGUMENT, supported); 64b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani } 65b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani return Void(); 66b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani} 67ab61b0df4af1a504e845c7008224ebadb5400ce9Andres Morales 687ab8929cc6ecbd1ba14c0d6ecb393b31f9a6fcdaAndres Morales} // namespace sample_driver 697ab8929cc6ecbd1ba14c0d6ecb393b31f9a6fcdaAndres Morales} // namespace nn 70de4fc8eb2a27797adaa7afac98fa3a2a7ffd8f99Russell Brenner} // namespace android 71de4fc8eb2a27797adaa7afac98fa3a2a7ffd8f99Russell Brenner 72de4fc8eb2a27797adaa7afac98fa3a2a7ffd8f99Russell Brennerusing android::nn::sample_driver::SampleDriverQuant; 73de4fc8eb2a27797adaa7afac98fa3a2a7ffd8f99Russell Brennerusing android::sp; 74de4fc8eb2a27797adaa7afac98fa3a2a7ffd8f99Russell Brenner 75de4fc8eb2a27797adaa7afac98fa3a2a7ffd8f99Russell Brennerint main() { 76e6bf2a5609b9aabbd790c3c3680172f4b50a3f8eAndres Morales android::nn::initVLogMask(); 77c17ec1be19a45dec12d601f1e6a545f558bdf293Andres Morales sp<SampleDriverQuant> driver(new SampleDriverQuant()); 78c17ec1be19a45dec12d601f1e6a545f558bdf293Andres Morales return driver->run(); 79c17ec1be19a45dec12d601f1e6a545f558bdf293Andres Morales} 80e6bf2a5609b9aabbd790c3c3680172f4b50a3f8eAndres Morales