From 1a656f4e44f70f45ade7dc53f8eaaedab29ebb1e Mon Sep 17 00:00:00 2001 From: Andrey Sapozhnikov Date: Thu, 26 Aug 2021 01:00:07 +0300 Subject: [PATCH] [GNA] Plugin transition to the library v3.0 (#7241) * GNA Plugin transition to the library v3.0 * Remove Gna2RequestConfigEnableHardwareConsistency calls Co-authored-by: Krzysztof Bruniecki --- inference-engine/cmake/dependencies.cmake | 4 ++-- .../src/gna_plugin/gna_device.cpp | 22 +++++++------------ .../src/gna_plugin/gna_device.hpp | 10 +++++++-- .../src/gna_plugin/gna_plugin.cpp | 4 +++- .../tests/unit/gna/gna_api_stub.cpp | 12 +++++----- .../unit/engines/gna/gna_api_stub.cpp | 16 ++++++-------- .../unit/engines/gna/gna_matcher.cpp | 18 ++------------- 7 files changed, 36 insertions(+), 50 deletions(-) diff --git a/inference-engine/cmake/dependencies.cmake b/inference-engine/cmake/dependencies.cmake index b270c46f2da..c40368193d9 100644 --- a/inference-engine/cmake/dependencies.cmake +++ b/inference-engine/cmake/dependencies.cmake @@ -261,8 +261,8 @@ if (ENABLE_GNA) set(GNA_HASH "cc954e67525006bf8bd353a6682e38bf208f6d74e973e0fc292850e721f17452") endif() if(GNA_LIBRARY_VERSION STREQUAL "GNA2") - set(GNA_VERSION "02.00.00.1226") - set(GNA_HASH "d5450af15c993e264c25ac4591a7dab44722e10d15fca4f222a1b84429d4e5b6") + set(GNA_VERSION "03.00.00.1377") + set(GNA_HASH "d45fb48994d8c2803a16e88e29ae48851066325b97c1c6c4a5bf4f4573d55c65") endif() set(FILES_TO_EXTRACT_LIST gna_${GNA_VERSION}/include) diff --git a/inference-engine/src/gna_plugin/gna_device.cpp b/inference-engine/src/gna_plugin/gna_device.cpp index 6ef0707bfcb..a9bd9eec15e 100644 --- a/inference-engine/src/gna_plugin/gna_device.cpp +++ b/inference-engine/src/gna_plugin/gna_device.cpp @@ -173,10 +173,6 @@ bool GNADeviceHelper::enforceLegacyCnnNeeded() const { return (isGnaLibVersion3_0 || isGnaLibVersion2_1) && isUpTo20HwGnaDevice(compileTargetDevice); } -namespace { - const volatile auto Gna2DeviceVersion3_0 = static_cast(0x30); -} // namespace - Gna2DeviceVersion GNADeviceHelper::parseDeclaredTarget(std::string target, const bool execTarget) const { auto parsed = Gna2DeviceVersion2_0; auto throwUnsupportedGnaTarget = [&](std::string extraSuffix) { @@ -213,14 +209,6 @@ uint32_t GNADeviceHelper::createRequestConfig(const uint32_t model_id) { auto status = Gna2RequestConfigCreate(model_id, &reqConfId); checkGna2Status(status, "Gna2RequestConfigCreate"); - // When the GNA_SW_EXACT mode is chosen inference results should be computed exactly the same way - // (bit exactly) as on the selected GNA execution target generation. - // See the GNA Plugin's GNA_EXEC_TARGET config option description. - if (swExactMode) { - const auto consistentDevice = getTargetDevice(true); - status = Gna2RequestConfigEnableHardwareConsistency(reqConfId, consistentDevice); - checkGna2Status(status, "Gna2RequestConfigEnableHardwareConsistency(" + std::to_string(static_cast(consistentDevice)) + ")"); - } status = Gna2InstrumentationConfigAssignToRequestConfig(instrumentationConfigId, reqConfId); checkGna2Status(status, "Gna2InstrumentationConfigAssignToRequestConfig"); @@ -507,8 +495,14 @@ void GNADeviceHelper::open(uint8_t n_threads) { auto status = Gna2DeviceGetVersion(nGnaDeviceIndex, &detectedGnaDevVersion); checkGna2Status(status, "Gna2DeviceGetVersion"); - status = Gna2DeviceOpen(nGnaDeviceIndex); - checkGna2Status(status, "Gna2DeviceOpen"); + if (useDeviceEmbeddedExport) { + status = Gna2DeviceCreateForExport(exportGeneration, &nGnaDeviceIndex); + GNADeviceHelper::checkGna2Status(status, "Gna2DeviceCreateForExport"); + } else { + status = Gna2DeviceOpen(nGnaDeviceIndex); + checkGna2Status(status, "Gna2DeviceOpen"); + } + // TODO: GNA2: uncomment when scratchpad repaired // status = Gna2DeviceSetNumberOfThreads(nGnaDeviceIndex, n_threads); // checkGna2Status(status); diff --git a/inference-engine/src/gna_plugin/gna_device.hpp b/inference-engine/src/gna_plugin/gna_device.hpp index ba4cb39a06c..5e6719607d6 100644 --- a/inference-engine/src/gna_plugin/gna_device.hpp +++ b/inference-engine/src/gna_plugin/gna_device.hpp @@ -55,6 +55,8 @@ class GNADeviceHelper { Gna2DeviceVersion detectedGnaDevVersion = Gna2DeviceVersionSoftwareEmulation; std::string executionTarget; std::string compileTarget; + bool useDeviceEmbeddedExport = false; + Gna2DeviceVersion exportGeneration = Gna2DeviceVersionEmbedded1_0; bool isGnaLibVersion2_1 = false; bool isGnaLibVersion3_0 = false; @@ -83,12 +85,16 @@ public: bool swExactModeIn = false, uint8_t lib_async_n_threads = 1, bool use_openmp = false, - bool isPerformanceMeasuring = false) : + bool isPerformanceMeasuring = false, + bool deviceEmbedded = false, + int deviceVersionParsed = 0) : swExactMode(swExactModeIn), executionTarget(executionTargetIn), compileTarget(compileTargetIn), isPerformanceMeasuring(isPerformanceMeasuring), - nGnaDeviceIndex{selectGnaDevice()} { + nGnaDeviceIndex{selectGnaDevice()}, + useDeviceEmbeddedExport(deviceEmbedded), + exportGeneration(static_cast(deviceVersionParsed)) { #endif open(lib_async_n_threads); initGnaPerfCounters(); diff --git a/inference-engine/src/gna_plugin/gna_plugin.cpp b/inference-engine/src/gna_plugin/gna_plugin.cpp index 95e4a444a58..9f36611f447 100644 --- a/inference-engine/src/gna_plugin/gna_plugin.cpp +++ b/inference-engine/src/gna_plugin/gna_plugin.cpp @@ -412,7 +412,9 @@ void GNAPlugin::InitGNADevice() { config.swExactMode, gnaFlags->gna_lib_async_threads_num, gnaFlags->gna_openmp_multithreading, - gnaFlags->performance_counting); + gnaFlags->performance_counting, + !config.dumpXNNPath.empty(), + GetDeviceVersionFromString(config.dumpXNNGeneration)); #endif size_t page_size_bytes = 4096; gnamem = std::make_shared(memory::make_polymorph(gnadevice), page_size_bytes); diff --git a/inference-engine/tests/unit/gna/gna_api_stub.cpp b/inference-engine/tests/unit/gna/gna_api_stub.cpp index 0761353464e..656a5790a36 100644 --- a/inference-engine/tests/unit/gna/gna_api_stub.cpp +++ b/inference-engine/tests/unit/gna/gna_api_stub.cpp @@ -45,6 +45,12 @@ GNA2_API enum Gna2Status Gna2MemoryAlloc( return Gna2StatusSuccess; } +GNA2_API enum Gna2Status Gna2DeviceCreateForExport( + Gna2DeviceVersion targetDeviceVersion, + uint32_t * deviceIndex) { + *deviceIndex = 1; + return Gna2StatusSuccess; +} GNA2_API enum Gna2Status Gna2DeviceOpen( uint32_t deviceIndex) { return Gna2StatusSuccess; @@ -109,12 +115,6 @@ GNA2_API enum Gna2Status Gna2RequestConfigEnableActiveList( return Gna2StatusSuccess; } -GNA2_API enum Gna2Status Gna2RequestConfigEnableHardwareConsistency( - uint32_t requestConfigId, - enum Gna2DeviceVersion deviceVersion) { - return Gna2StatusSuccess; -} - GNA2_API enum Gna2Status Gna2RequestConfigSetAccelerationMode( uint32_t requestConfigId, enum Gna2AccelerationMode accelerationMode) { diff --git a/inference-engine/tests_deprecated/unit/engines/gna/gna_api_stub.cpp b/inference-engine/tests_deprecated/unit/engines/gna/gna_api_stub.cpp index fd70db84eb5..92e0dfc21f7 100644 --- a/inference-engine/tests_deprecated/unit/engines/gna/gna_api_stub.cpp +++ b/inference-engine/tests_deprecated/unit/engines/gna/gna_api_stub.cpp @@ -44,6 +44,13 @@ GNA2_API enum Gna2Status Gna2MemoryAlloc( return Gna2StatusSuccess; } +GNA2_API enum Gna2Status Gna2DeviceCreateForExport( + Gna2DeviceVersion targetDeviceVersion, + uint32_t * deviceIndex) { + *deviceIndex = 1; + return Gna2StatusSuccess; +} + GNA2_API enum Gna2Status Gna2DeviceOpen( uint32_t deviceIndex) { if (current != nullptr) { @@ -139,15 +146,6 @@ GNA2_API enum Gna2Status Gna2RequestConfigEnableActiveList( return Gna2StatusSuccess; } -GNA2_API enum Gna2Status Gna2RequestConfigEnableHardwareConsistency( - uint32_t requestConfigId, - enum Gna2DeviceVersion deviceVersion) { - if (current != nullptr) { - return current->Gna2RequestConfigEnableHardwareConsistency(requestConfigId, deviceVersion); - } - return Gna2StatusSuccess; -} - GNA2_API enum Gna2Status Gna2RequestConfigSetAccelerationMode( uint32_t requestConfigId, enum Gna2AccelerationMode accelerationMode) { diff --git a/inference-engine/tests_deprecated/unit/engines/gna/gna_matcher.cpp b/inference-engine/tests_deprecated/unit/engines/gna/gna_matcher.cpp index 70f8c2d7ef0..9cd55ba6d4d 100644 --- a/inference-engine/tests_deprecated/unit/engines/gna/gna_matcher.cpp +++ b/inference-engine/tests_deprecated/unit/engines/gna/gna_matcher.cpp @@ -66,7 +66,7 @@ public: } }; #if GNA_LIB_VER == 2 -void expect_enqueue_calls(GNACppApi &mockApi, bool enableHardwareConsistency = true){ +void expect_enqueue_calls(GNACppApi &mockApi){ EXPECT_CALL(mockApi, Gna2ModelCreate(_,_,_)).Times(AtLeast(1)).WillRepeatedly(Invoke([]( uint32_t deviceIndex, struct Gna2Model const * model, @@ -82,10 +82,6 @@ void expect_enqueue_calls(GNACppApi &mockApi, bool enableHardwareConsistency = t return Gna2StatusSuccess; })); - if (enableHardwareConsistency) { - EXPECT_CALL(mockApi, Gna2RequestConfigEnableHardwareConsistency(_,_)).Times(AtLeast(1)).WillRepeatedly(Return(Gna2StatusSuccess)); - } - EXPECT_CALL(mockApi, Gna2RequestConfigSetAccelerationMode(_,_)).Times(AtLeast(1)).WillRepeatedly(Return(Gna2StatusSuccess)); EXPECT_CALL(mockApi, Gna2InstrumentationConfigAssignToRequestConfig(_,_)).Times(AtLeast(1)).WillRepeatedly(Return(Gna2StatusSuccess)); @@ -353,11 +349,7 @@ void GNAPropagateMatcher :: match() { EXPECT_CALL(mockApi, GNAPropagateForward(_, _, _, _, _, Eq(_env.proc_type))) .WillOnce(Return(GNA_NOERROR)); #elif GNA_LIB_VER == 2 - if(_env.proc_type == (GNA_SOFTWARE & GNA_HARDWARE)) { - expect_enqueue_calls(mockApi); - } else { - expect_enqueue_calls(mockApi, false); - } + expect_enqueue_calls(mockApi); #endif break; case GnaPluginTestEnvironment::matchPwlInserted : @@ -575,8 +567,6 @@ void GNAPluginAOTMatcher :: match() { return Gna2StatusSuccess; })); - EXPECT_CALL(mockApi, Gna2RequestConfigEnableHardwareConsistency(_,_)).Times(AtLeast(1)).WillRepeatedly(Return(Gna2StatusSuccess)); - EXPECT_CALL(mockApi, Gna2InstrumentationConfigAssignToRequestConfig(_,_)).Times(AtLeast(1)).WillRepeatedly(Return(Gna2StatusSuccess)); #else #error "Not supported GNA_LIB_VER" @@ -704,8 +694,6 @@ void GNADumpXNNMatcher::match() { ON_CALL(mockApi, Gna2RequestConfigSetAccelerationMode(_,_)).WillByDefault(Return(Gna2StatusSuccess)); - ON_CALL(mockApi, Gna2RequestConfigEnableHardwareConsistency(_,_)).WillByDefault(Return(Gna2StatusSuccess)); - ON_CALL(mockApi, Gna2InstrumentationConfigAssignToRequestConfig(_,_)).WillByDefault(Return(Gna2StatusSuccess)); } #else @@ -809,8 +797,6 @@ void GNAQueryStateMatcher :: match() { return Gna2StatusSuccess; })); - EXPECT_CALL(mockApi, Gna2RequestConfigEnableHardwareConsistency(_,_)).Times(AtLeast(1)).WillRepeatedly(Return(Gna2StatusSuccess)); - EXPECT_CALL(mockApi, Gna2InstrumentationConfigAssignToRequestConfig(_,_)).Times(AtLeast(1)).WillRepeatedly(Return(Gna2StatusSuccess)); #endif IE_SUPPRESS_DEPRECATED_START