Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/windows_conditional_compilation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -209,13 +209,13 @@ jobs:
- name: Ctest - OpenVINO unit tests
shell: cmd
run: |
set path=%path%;${{ env.OPENVINO_REPO }}\temp\Windows_AMD64\tbb\bin;${{ env.BUILD_DIR }}\bin\${{ env.CMAKE_BUILD_TYPE }}
set path=%path%;${{ env.OPENVINO_REPO }}\temp\Windows_AMD64\tbb\bin
ctest -C ${{ env.CMAKE_BUILD_TYPE }} --test-dir ${{ env.BUILD_DIR }} -V -L UNIT

- name: Perform code tracing via ITT collector
shell: cmd
run: |
set path=%path%;${{ env.OPENVINO_REPO }}\temp\Windows_AMD64\tbb\bin;${{ env.BUILD_DIR }}\bin\${{ env.CMAKE_BUILD_TYPE }}
set path=%path%;${{ env.OPENVINO_REPO }}\temp\Windows_AMD64\tbb\bin

python3 ${{ env.OPENVINO_REPO }}\thirdparty\itt_collector\runtool\sea_runtool.py ^
--bindir ${{ env.OPENVINO_REPO }}\bin\intel64\${{ env.CMAKE_BUILD_TYPE }} ^
Expand Down Expand Up @@ -395,7 +395,7 @@ jobs:
- name: Run with CC-ed runtime
shell: cmd
run: |
set path=%path%;${{ env.OPENVINO_REPO }}\temp\Windows_AMD64\tbb\bin;${{ env.BUILD_DIR }}\bin\${{ env.CMAKE_BUILD_TYPE }}
set path=%path%;${{ env.OPENVINO_REPO }}\temp\Windows_AMD64\tbb\bin
${{ env.OPENVINO_REPO }}\bin\intel64\${{ env.CMAKE_BUILD_TYPE }}\benchmark_app.exe -niter 1 -nireq 1 -m ${{ env.MODELS_PATH }}\models\test_model\test_model_fp32.xml -d CPU

CPU_Functional_Tests:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,13 +80,17 @@ class ZeroApi {

static const std::shared_ptr<ZeroApi>& getInstance();

const uint32_t getVersion();

#define symbol_statement(symbol) decltype(&::symbol) symbol;
symbols_list();
weak_symbols_list();
#undef symbol_statement

private:
std::shared_ptr<void> lib;

uint32_t version = 0;
};

#define symbol_statement(symbol) \
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ class ZeroInitStructsHolder final {
void initNpuDriver();

// keep zero_api alive until context is destroyed
std::shared_ptr<ZeroApi> zero_api;
std::shared_ptr<ZeroApi> zero_api = nullptr;

static const ze_driver_uuid_t uuid;
Logger log;
Expand Down
4 changes: 4 additions & 0 deletions src/plugins/intel_npu/src/utils/src/zero/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@ target_include_directories(${TARGET_NAME}

target_link_libraries(${TARGET_NAME} PUBLIC openvino::runtime::dev)

if(WIN32)
target_link_libraries(${TARGET_NAME} PRIVATE Version.lib)
endif()

#
# targets install
#
Expand Down
34 changes: 28 additions & 6 deletions src/plugins/intel_npu/src/utils/src/zero/zero_api.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,40 @@

#include "intel_npu/utils/zero/zero_api.hpp"

#ifdef _WIN32
# include <windows.h>
#endif

#include "openvino/util/file_util.hpp"
#include "openvino/util/shared_object.hpp"

namespace intel_npu {
ZeroApi::ZeroApi() {
const std::string baseName = "ze_loader";
const std::string base_name = "ze_loader";
try {
auto libpath = ov::util::make_plugin_library_name({}, baseName);
auto lib_path = ov::util::make_plugin_library_name({}, base_name);
#if !defined(_WIN32) && !defined(ANDROID)
libpath = libpath + LIB_ZE_LOADER_SUFFIX;
lib_path = lib_path + LIB_ZE_LOADER_SUFFIX;
#endif

this->lib = ov::util::load_shared_object(lib_path.c_str());

#if defined(OPENVINO_ENABLE_UNICODE_PATH_SUPPORT) && defined(_WIN32)
this->lib = ov::util::load_shared_object(ov::util::string_to_wstring(libpath).c_str());
#else
this->lib = ov::util::load_shared_object(libpath.c_str());
DWORD handle = 0;
const wchar_t* wide_path = ov::util::string_to_wstring(lib_path).c_str();
DWORD size = GetFileVersionInfoSizeW(wide_path, &handle);
if (size > 0) {
std::vector<BYTE> data(size);
if (GetFileVersionInfoW(wide_path, handle, size, data.data())) {
VS_FIXEDFILEINFO* loader_version = NULL;
uint32_t loader_version_size = 0;
if (VerQueryValueW(data.data(), L"\\", (LPVOID*)&loader_version, &loader_version_size) &&
loader_version_size > 0 && loader_version != nullptr) {
// Version is in dwFileVersionMS (high: major.minor) and dwFileVersionLS (low: build.revision)
version = loader_version->dwFileVersionMS;
}
}
}
#endif
} catch (const std::runtime_error& error) {
OPENVINO_THROW(error.what());
Expand Down Expand Up @@ -54,4 +72,8 @@ const std::shared_ptr<ZeroApi>& ZeroApi::getInstance() {
return instance;
}

const uint32_t ZeroApi::getVersion() {
return version;
}

} // namespace intel_npu
58 changes: 38 additions & 20 deletions src/plugins/intel_npu/src/utils/src/zero/zero_init.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -71,9 +71,21 @@ void ZeroInitStructsHolder::initNpuDriver() {
}
};

uint32_t loader_version;
if (zero_api != nullptr) {
loader_version = zero_api->getVersion();
} else {
loader_version = 0;
}

auto fallbackToZeDriverGet = [&]() {
log.debug("ZeroInitStructsHolder - zeInitDrivers not supported, fallback to zeDriverGet");

if (loader_version > 0) {
log.debug("ZeroInitStructsHolder - performing zeInit on NPU only");
THROW_ON_FAIL_FOR_LEVELZERO("zeInit", zeInit(ZE_INIT_FLAG_VPU_ONLY));
}

uint32_t drivers_count = 0;
THROW_ON_FAIL_FOR_LEVELZERO("zeDriverGet", zeDriverGet(&drivers_count, nullptr));

Expand All @@ -84,31 +96,40 @@ void ZeroInitStructsHolder::initNpuDriver() {
setNpuDriver(drivers_count, std::move(all_drivers));
};

zel_version_t loader_version = {};
size_t num_components;
auto result = zelLoaderGetVersions(&num_components, nullptr);
if (result == ZE_RESULT_SUCCESS) {
zel_component_version_t* versions = new zel_component_version_t[num_components];
result = zelLoaderGetVersions(&num_components, versions);
uint32_t major;
uint32_t minor;

if (loader_version == 0) {
log.debug("ZeroInitStructsHolder - performing zeInit on NPU only");
THROW_ON_FAIL_FOR_LEVELZERO("zeInit", zeInit(ZE_INIT_FLAG_VPU_ONLY));

zel_version_t zel_loader_version = {};
size_t num_components;
auto result = zelLoaderGetVersions(&num_components, nullptr);
if (result == ZE_RESULT_SUCCESS) {
for (size_t i = 0; i < num_components; ++i) {
if (strncmp(versions[i].component_name, "loader", strlen("loader")) == 0) {
loader_version = versions[i].component_lib_version;

log.debug("ZeroInitStructsHolder - ze_loader.dll version: %d.%d.%d",
loader_version.major,
loader_version.minor,
loader_version.patch);
std::vector<zel_component_version_t> versions(num_components);
result = zelLoaderGetVersions(&num_components, versions.data());
if (result == ZE_RESULT_SUCCESS) {
for (size_t i = 0; i < num_components; ++i) {
if (strncmp(versions[i].component_name, "loader", strlen("loader")) == 0) {
zel_loader_version = versions[i].component_lib_version;
log.debug("ZeroInitStructsHolder - ze_loader.dll version: %d.%d.%d",
zel_loader_version.major,
zel_loader_version.minor,
zel_loader_version.patch);
}
}
}
}

delete[] versions;
major = zel_loader_version.major > 0 ? zel_loader_version.major : 0;
minor = zel_loader_version.minor > 0 ? zel_loader_version.minor : 0;
} else {
major = (loader_version >> 16) & 0xffff;
minor = loader_version & 0xffff;
}

if (loader_version.major > 1 || (loader_version.major == 1 && loader_version.minor > 18) ||
(loader_version.major == 1 && loader_version.minor == 18 && loader_version.patch >= 5)) {
if (major > 1 || (major == 1 && minor >= 19)) {
uint32_t drivers_count = 0;
ze_init_driver_type_desc_t desc = {};
desc.stype = ZE_STRUCTURE_TYPE_INIT_DRIVER_TYPE_DESC;
Expand Down Expand Up @@ -138,9 +159,6 @@ void ZeroInitStructsHolder::initNpuDriver() {
ZeroInitStructsHolder::ZeroInitStructsHolder()
: zero_api(ZeroApi::getInstance()),
log("NPUZeroInitStructsHolder", Logger::global().level()) {
log.debug("ZeroInitStructsHolder - performing zeInit on NPU only");
THROW_ON_FAIL_FOR_LEVELZERO("zeInit", zeInit(ZE_INIT_FLAG_VPU_ONLY));

log.debug("ZeroInitStructsHolder - initialize NPU Driver");
initNpuDriver();

Expand Down
Loading