From 93e270169c8f26a7b6e2368d0c915c8f606f5d80 Mon Sep 17 00:00:00 2001 From: Krzysztof Bruniecki Date: Tue, 17 Nov 2020 11:16:15 +0100 Subject: [PATCH] Print GNA Lib function name when error code obtained (#3129) --- .../gna_plugin/gna2_model_export_helper.cpp | 22 +++++----- .../src/gna_plugin/gna_device.cpp | 42 +++++++++---------- .../src/gna_plugin/gna_device.hpp | 4 +- 3 files changed, 34 insertions(+), 34 deletions(-) diff --git a/inference-engine/src/gna_plugin/gna2_model_export_helper.cpp b/inference-engine/src/gna_plugin/gna2_model_export_helper.cpp index f8338c63a97..87472f97b28 100644 --- a/inference-engine/src/gna_plugin/gna2_model_export_helper.cpp +++ b/inference-engine/src/gna_plugin/gna2_model_export_helper.cpp @@ -19,12 +19,12 @@ void * ExportSueLegacyUsingGnaApi2( uint32_t exportConfig; auto status = Gna2ModelExportConfigCreate(gnaUserAllocatorAlignedPage, &exportConfig); - GNADeviceHelper::checkGna2Status(status); + GNADeviceHelper::checkGna2Status(status, "Gna2ModelExportConfigCreate"); status = Gna2ModelExportConfigSetSource(exportConfig, 0, modelId); - GNADeviceHelper::checkGna2Status(status); + GNADeviceHelper::checkGna2Status(status, "Gna2ModelExportConfigSetSource"); status = Gna2ModelExportConfigSetTarget(exportConfig, Gna2DeviceVersionEmbedded1_0); - GNADeviceHelper::checkGna2Status(status); + GNADeviceHelper::checkGna2Status(status, "Gna2ModelExportConfigSetTarget"); void * bufferSueCreekHeader; uint32_t bufferSueCreekHeaderSize; @@ -32,7 +32,7 @@ void * ExportSueLegacyUsingGnaApi2( status = Gna2ModelExport(exportConfig, Gna2ModelExportComponentLegacySueCreekHeader, &bufferSueCreekHeader, &bufferSueCreekHeaderSize); - GNADeviceHelper::checkGna2Status(status); + GNADeviceHelper::checkGna2Status(status, "Gna2ModelExport(LegacySueCreekHeader)"); (*modelHeader) = *(reinterpret_cast(bufferSueCreekHeader)); @@ -42,10 +42,10 @@ void * ExportSueLegacyUsingGnaApi2( Gna2ModelExportComponentLegacySueCreekDump, &bufferDump, &bufferDumpSize); - GNADeviceHelper::checkGna2Status(status); + GNADeviceHelper::checkGna2Status(status, "Gna2ModelExport(LegacySueCreekDump)"); status = Gna2ModelExportConfigRelease(exportConfig); - GNADeviceHelper::checkGna2Status(status); + GNADeviceHelper::checkGna2Status(status, "Gna2ModelExportConfigRelease"); gnaUserFree(bufferSueCreekHeader); return bufferDump; @@ -59,12 +59,12 @@ void ExportLdForDeviceVersion( uint32_t exportConfig; auto status = Gna2ModelExportConfigCreate(gnaUserAllocatorAlignedPage, &exportConfig); - GNADeviceHelper::checkGna2Status(status); + GNADeviceHelper::checkGna2Status(status, "Gna2ModelExportConfigCreate"); status = Gna2ModelExportConfigSetSource(exportConfig, 0, modelId); - GNADeviceHelper::checkGna2Status(status); + GNADeviceHelper::checkGna2Status(status, "Gna2ModelExportConfigSetSource"); status = Gna2ModelExportConfigSetTarget(exportConfig, deviceVersionToExport); - GNADeviceHelper::checkGna2Status(status); + GNADeviceHelper::checkGna2Status(status, "Gna2ModelExportConfigSetTarget"); void * ldDump; uint32_t ldDumpSize; @@ -72,12 +72,12 @@ void ExportLdForDeviceVersion( status = Gna2ModelExport(exportConfig, Gna2ModelExportComponentLayerDescriptors, &ldDump, &ldDumpSize); - GNADeviceHelper::checkGna2Status(status); + GNADeviceHelper::checkGna2Status(status, "Gna2ModelExport(LayerDescriptors)"); outStream.write(static_cast(ldDump), ldDumpSize); status = Gna2ModelExportConfigRelease(exportConfig); - GNADeviceHelper::checkGna2Status(status); + GNADeviceHelper::checkGna2Status(status, "Gna2ModelExportConfigRelease"); gnaUserFree(ldDump); } diff --git a/inference-engine/src/gna_plugin/gna_device.cpp b/inference-engine/src/gna_plugin/gna_device.cpp index 133db7a5837..c2e778e9512 100644 --- a/inference-engine/src/gna_plugin/gna_device.cpp +++ b/inference-engine/src/gna_plugin/gna_device.cpp @@ -33,7 +33,7 @@ uint8_t* GNADeviceHelper::alloc(uint32_t size_requested, uint32_t *size_granted) memPtr = GNAAlloc(nGNAHandle, size_requested, size_granted); #else const auto status = Gna2MemoryAlloc(size_requested, size_granted, &memPtr); - checkGna2Status(status); + checkGna2Status(status, "Gna2MemoryAlloc"); #endif if (memPtr == nullptr) { THROW_GNA_EXCEPTION << "GNAAlloc failed to allocate memory. Requested: " << size_requested << " Granted: " << *(size_granted); @@ -48,7 +48,7 @@ void GNADeviceHelper::free(void * ptr) { GNAFree(nGNAHandle); #else const auto status = Gna2MemoryFree(ptr); - checkGna2Status(status); + checkGna2Status(status, "Gna2MemoryFree"); #endif } @@ -68,7 +68,7 @@ uint32_t GNADeviceHelper::propagate(const intel_nnet_type_t *pNeuralNetwork, void GNADeviceHelper::setUpActiveList(const uint32_t requestConfigId, uint32_t layerIndex, uint32_t* ptr_active_indices, uint32_t num_active_indices) { const auto status = Gna2RequestConfigEnableActiveList(requestConfigId, layerIndex, num_active_indices, ptr_active_indices); - checkGna2Status(status); + checkGna2Status(status, "Gna2RequestConfigEnableActiveList"); } void GNADeviceHelper::propagateSync(const uint32_t requestConfigId, Gna2AccelerationMode gna2AccelerationMode) { wait(propagate(requestConfigId, gna2AccelerationMode)); @@ -81,9 +81,9 @@ uint32_t GNADeviceHelper::propagate(const uint32_t requestConfigId, Gna2Accelera gnawarn() << "GNA Device not detected, consider using other mode of acceleration"; } const auto status1 = Gna2RequestConfigSetAccelerationMode(requestConfigId, gna2AccelerationMode); - checkGna2Status(status1); + checkGna2Status(status1, "Gna2RequestConfigSetAccelerationMode"); const auto status2 = Gna2RequestEnqueue(requestConfigId, &reqId); - checkGna2Status(status2); + checkGna2Status(status2, "Gna2RequestEnqueue"); unwaitedRequestIds.push_back(reqId); @@ -114,20 +114,20 @@ uint32_t GNADeviceHelper::createModel(Gna2Model& gnaModel) const { void GNADeviceHelper::releaseModel(const uint32_t model_id) { const auto status = Gna2ModelRelease(model_id); - checkGna2Status(status); + checkGna2Status(status, "Gna2ModelRelease"); } uint32_t GNADeviceHelper::createRequestConfig(const uint32_t model_id) { uint32_t reqConfId; auto status = Gna2RequestConfigCreate(model_id, &reqConfId); - checkGna2Status(status); + checkGna2Status(status, "Gna2RequestConfigCreate"); if (gna2HwConsistency != Gna2DeviceVersionSoftwareEmulation) { status = Gna2RequestConfigEnableHardwareConsistency(reqConfId, isUpTo20GnaDevice() ? gna2HwConsistency : detectedGnaDevVersion); - checkGna2Status(status); + checkGna2Status(status, "Gna2RequestConfigEnableHardwareConsistency"); } status = Gna2InstrumentationConfigAssignToRequestConfig(instrumentationConfigId, reqConfId); - checkGna2Status(status); + checkGna2Status(status, "Gna2InstrumentationConfigAssignToRequestConfig"); return reqConfId; } @@ -136,7 +136,7 @@ uint32_t GNADeviceHelper::getNumberOfGnaDevices() { std::unique_lock lockGnaCalls{ acrossPluginsSync }; uint32_t numberOfGnaDevices = 0; auto status = Gna2DeviceGetCount(&numberOfGnaDevices); - checkGna2Status(status); + checkGna2Status(status, "Gna2DeviceGetCount"); return numberOfGnaDevices; } @@ -162,9 +162,7 @@ void GNADeviceHelper::checkGna2Status(Gna2Status status, const Gna2Model& gnaMod Gna2ModelError error; auto getLastErrorStatus = Gna2ModelGetLastError(&error); - if (!Gna2StatusIsSuccessful(getLastErrorStatus)) { - THROW_GNA_EXCEPTION << "\nUnsuccessful Gna2Status: (" << status << ") " << gna2StatusBuffer.data(); - } + checkGna2Status(getLastErrorStatus, "Gna2ModelGetLastError"); std::stringstream ss; ss << "\n GNA Library Error:\n"; @@ -203,18 +201,20 @@ void GNADeviceHelper::checkGna2Status(Gna2Status status, const Gna2Model& gnaMod } } -void GNADeviceHelper::checkGna2Status(Gna2Status status) { +void GNADeviceHelper::checkGna2Status(Gna2Status status, const std::string& from) { if (!Gna2StatusIsSuccessful(status)) { std::vector gna2StatusBuffer(1024); + const auto prefix = "Unsuccessful " + from + " call, Gna2Status: ("; const auto s = Gna2StatusGetMessage(status, gna2StatusBuffer.data(), gna2StatusBuffer.size()); if (!Gna2StatusIsSuccessful(s)) snprintf(gna2StatusBuffer.data(), gna2StatusBuffer.size(), "Gna2StatusGetMessage(%d) returned (%d)", static_cast(status), static_cast(s)); + std::string suffix; if (status == Gna2StatusDeviceIngoingCommunicationError || status == Gna2StatusDeviceOutgoingCommunicationError) { - THROW_GNA_EXCEPTION << "Unsuccessful Gna2Status: (" << status << ") " << gna2StatusBuffer.data() << ", consider updating the GNA driver"; + suffix = ", consider updating the GNA driver"; } - THROW_GNA_EXCEPTION << "Unsuccessful Gna2Status: (" << status << ") " << gna2StatusBuffer.data(); + THROW_GNA_EXCEPTION << prefix << status << ") " << gna2StatusBuffer.data() << suffix; } } @@ -316,7 +316,7 @@ GnaWaitStatus GNADeviceHelper::wait(uint32_t reqId, int64_t millisTimeout) { if (status == Gna2StatusWarningDeviceBusy) { return GNA_REQUEST_PENDING; } - checkGna2Status(status); + checkGna2Status(status, "Gna2RequestWait"); unwaitedRequestIds.erase(std::remove(unwaitedRequestIds.begin(), unwaitedRequestIds.end(), reqId)); #else if (isPerformanceMeasuring) { @@ -404,9 +404,9 @@ void GNADeviceHelper::open(uint8_t n_threads) { checkStatus(); #else auto status = Gna2DeviceGetVersion(nGnaDeviceIndex, &detectedGnaDevVersion); - checkGna2Status(status); + checkGna2Status(status, "Gna2DeviceGetVersion"); status = Gna2DeviceOpen(nGnaDeviceIndex); - checkGna2Status(status); + checkGna2Status(status, "Gna2DeviceOpen"); // TODO: GNA2: uncomment when scratchpad repaired // status = Gna2DeviceSetNumberOfThreads(nGnaDeviceIndex, n_threads); // checkGna2Status(status); @@ -429,7 +429,7 @@ void GNADeviceHelper::close() { } } const auto status = Gna2DeviceClose(nGnaDeviceIndex); - checkGna2Status(status); + checkGna2Status(status, "Gna2DeviceClose"); #endif deviceOpened = false; } @@ -440,7 +440,7 @@ void GNADeviceHelper::setOMPThreads(uint8_t const n_threads) { gmmSetThreads(n_threads); #else const auto status = Gna2DeviceSetNumberOfThreads(nGnaDeviceIndex, n_threads); - checkGna2Status(status); + checkGna2Status(status, "Gna2DeviceSetNumberOfThreads"); #endif } diff --git a/inference-engine/src/gna_plugin/gna_device.hpp b/inference-engine/src/gna_plugin/gna_device.hpp index 596ba8f53e0..293599678f7 100644 --- a/inference-engine/src/gna_plugin/gna_device.hpp +++ b/inference-engine/src/gna_plugin/gna_device.hpp @@ -125,7 +125,7 @@ public: bool isUpTo20GnaDevice() const { return detectedGnaDevVersion <= Gna2DeviceVersion2_0; } - static void checkGna2Status(Gna2Status status); + static void checkGna2Status(Gna2Status status, const std::string& from); static void checkGna2Status(Gna2Status status, const Gna2Model& gnaModel); #endif GnaWaitStatus wait(uint32_t id, int64_t millisTimeout = MAX_TIMEOUT); @@ -187,7 +187,7 @@ public: gna2InstrumentationPoints, instrumentationResults, &instrumentationConfigId); - checkGna2Status(status); + checkGna2Status(status, "Gna2InstrumentationConfigCreate"); #endif } }; // NOLINT