From 82d225899bd3d4fd07d70cac80f50c1b288dc4a3 Mon Sep 17 00:00:00 2001 From: Davide Grohmann Date: Mon, 25 Apr 2022 12:52:38 +0200 Subject: Add support for rejected inference responses Change-Id: I62e13df69c712ed4cf70766429b4cb13fc9c9dcb --- driver_library/include/ethosu.hpp | 11 ++++++++++- driver_library/src/ethosu.cpp | 29 +++++++++++++++++++++++++++-- 2 files changed, 37 insertions(+), 3 deletions(-) (limited to 'driver_library') diff --git a/driver_library/include/ethosu.hpp b/driver_library/include/ethosu.hpp index a12d668..61e2bc5 100644 --- a/driver_library/include/ethosu.hpp +++ b/driver_library/include/ethosu.hpp @@ -180,6 +180,15 @@ private: std::vector ofmDims; }; +enum class InferenceStatus { + OK, + ERROR, + RUNNING, + REJECTED, +}; + +std::ostream &operator<<(std::ostream &out, const InferenceStatus &v); + class Inference { public: template @@ -220,7 +229,7 @@ public: int wait(int64_t timeoutNanos = -1) const; const std::vector getPmuCounters() const; uint64_t getCycleCounter() const; - bool failed() const; + InferenceStatus status() const; int getFd() const; const std::shared_ptr getNetwork() const; std::vector> &getIfmBuffers(); diff --git a/driver_library/src/ethosu.cpp b/driver_library/src/ethosu.cpp index 2b1da45..0da30c3 100644 --- a/driver_library/src/ethosu.cpp +++ b/driver_library/src/ethosu.cpp @@ -330,6 +330,20 @@ size_t Network::getOfmSize() const { * Inference ****************************************************************************/ +ostream &operator<<(ostream &out, const InferenceStatus &status) { + switch (status) { + case InferenceStatus::OK: + return out << "ok"; + case InferenceStatus::ERROR: + return out << "error"; + case InferenceStatus::RUNNING: + return out << "running"; + case InferenceStatus::REJECTED: + return out << "rejected"; + } + throw Exception("Unknown inference status"); +} + Inference::~Inference() noexcept(false) { eclose(fd); } @@ -395,12 +409,23 @@ int Inference::wait(int64_t timeoutNanos) const { return eppoll(&pfd, 1, &tmo_p, NULL); } -bool Inference::failed() const { +InferenceStatus Inference::status() const { ethosu_uapi_result_status uapi; eioctl(fd, ETHOSU_IOCTL_INFERENCE_STATUS, static_cast(&uapi)); - return uapi.status != ETHOSU_UAPI_STATUS_OK; + switch (uapi.status) { + case ETHOSU_UAPI_STATUS_OK: + return InferenceStatus::OK; + case ETHOSU_UAPI_STATUS_ERROR: + return InferenceStatus::ERROR; + case ETHOSU_UAPI_STATUS_RUNNING: + return InferenceStatus::RUNNING; + case ETHOSU_UAPI_STATUS_REJECTED: + return InferenceStatus::REJECTED; + } + + throw Exception("Unknown inference status"); } const std::vector Inference::getPmuCounters() const { -- cgit v1.2.1