[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 <krzysztof.bruniecki@intel.com>
This commit is contained in:
Andrey Sapozhnikov
2021-08-26 01:00:07 +03:00
committed by GitHub
parent 0702b44174
commit 1a656f4e44
7 changed files with 36 additions and 50 deletions

View File

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

View File

@@ -173,10 +173,6 @@ bool GNADeviceHelper::enforceLegacyCnnNeeded() const {
return (isGnaLibVersion3_0 || isGnaLibVersion2_1) && isUpTo20HwGnaDevice(compileTargetDevice);
}
namespace {
const volatile auto Gna2DeviceVersion3_0 = static_cast<Gna2DeviceVersion>(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<long>(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);

View File

@@ -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<Gna2DeviceVersion>(deviceVersionParsed)) {
#endif
open(lib_async_n_threads);
initGnaPerfCounters();

View File

@@ -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<gna_memory_type>(memory::make_polymorph<memory::GNAAllocator>(gnadevice), page_size_bytes);

View File

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

View File

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

View File

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