return reqConfId;
}
+uint32_t GNADeviceHelper::getNumberOfGnaDevices() {
+ std::unique_lock<std::mutex> lockGnaCalls{ acrossPluginsSync };
+ uint32_t numberOfGnaDevices = 0;
+ auto status = Gna2DeviceGetCount(&numberOfGnaDevices);
+ checkGna2Status(status);
+ return numberOfGnaDevices;
+}
+
+uint32_t GNADeviceHelper::selectGnaDevice() {
+ const auto deviceCount = getNumberOfGnaDevices();
+ if (deviceCount != 1) {
+ THROW_GNA_EXCEPTION << "Unsupported number of GNA devices detected = " << deviceCount;
+ }
+ return 0;
+}
+
void GNADeviceHelper::checkGna2Status(Gna2Status status, const Gna2Model& gnaModel) {
if (!Gna2StatusIsSuccessful(status)) {
std::vector<char> gna2StatusBuffer(1024);
bool isPerformanceMeasuring = false) :
isPerformanceMeasuring(isPerformanceMeasuring) {
#else
- explicit GNADeviceHelper(Gna2DeviceVersion gna2HwConsistency = Gna2DeviceVersionSoftwareEmulation,
+ explicit GNADeviceHelper(Gna2DeviceVersion gna2HwConsistency = Gna2DeviceVersionSoftwareEmulation,
uint8_t lib_async_n_threads = 1,
bool use_openmp = false,
bool isPerformanceMeasuring = false) :
gna2HwConsistency(gna2HwConsistency),
- isPerformanceMeasuring(isPerformanceMeasuring) {
+ isPerformanceMeasuring(isPerformanceMeasuring),
+ nGnaDeviceIndex{selectGnaDevice()} {
#endif
open(lib_async_n_threads);
initGnaPerfCounters();
#endif
void releaseModel(const uint32_t model_id);
uint32_t createRequestConfig(const uint32_t model_id);
+ static uint32_t getNumberOfGnaDevices();
+ static uint32_t selectGnaDevice();
bool hasGnaHw() const {
return Gna2DeviceVersionSoftwareEmulation != detectedGnaDevVersion;
}
}
if (!options.count(KEY_DEVICE_ID)) {
- if (availableDevices.size() == 1) {
- return availableDevices[0];
+ if (availableDevices.size() == 1 || availableDevices.size() == 2) {
+ return availableDevices.back(); // detection order is GNA_SW, GNA_HW
} else {
THROW_GNA_EXCEPTION << "KEY_DEVICE_ID not set in request for FULL_DEVICE_NAME";
}
return Gna2StatusSuccess;
}
+GNA2_API Gna2Status Gna2DeviceGetCount(
+ uint32_t* numberOfDevices) {
+ if (numberOfDevices != nullptr) {
+ *numberOfDevices = 1;
+ }
+ return Gna2StatusSuccess;
+}
+
GNA2_API enum Gna2Status Gna2MemoryFree(
void * memory) {
return Gna2StatusSuccess;
return Gna2StatusSuccess;
}
+GNA2_API Gna2Status Gna2DeviceGetCount(
+ uint32_t * numberOfDevices) {
+ if (numberOfDevices != nullptr) {
+ *numberOfDevices = 1;
+ }
+ return Gna2StatusSuccess;
+}
+
GNA2_API enum Gna2Status Gna2MemoryFree(
void * memory) {
if (current != nullptr) {
MOCK_METHOD1(Gna2DeviceClose, Gna2Status (
uint32_t deviceIndex));
+ MOCK_METHOD1(Gna2DeviceGetCount, Gna2Status (
+ uint32_t * numberOfDevices));
+
MOCK_METHOD1(Gna2MemoryFree, Gna2Status (
void * memory));