Print GNA Lib function name when error code obtained (#3129)

This commit is contained in:
Krzysztof Bruniecki 2020-11-17 11:16:15 +01:00 committed by GitHub
parent ea52dd2642
commit 93e270169c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 34 additions and 34 deletions

View File

@ -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<Gna2ModelSueCreekHeader*>(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<char*>(ldDump), ldDumpSize);
status = Gna2ModelExportConfigRelease(exportConfig);
GNADeviceHelper::checkGna2Status(status);
GNADeviceHelper::checkGna2Status(status, "Gna2ModelExportConfigRelease");
gnaUserFree(ldDump);
}

View File

@ -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<std::mutex> 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<char> 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<int>(status), static_cast<int>(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
}

View File

@ -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