@@ -74,6 +74,9 @@ void ZeroInitStructsHolder::initNpuDriver() {
7474 auto fallbackToZeDriverGet = [&]() {
7575 log.debug (" ZeroInitStructsHolder - zeInitDrivers not supported, fallback to zeDriverGet" );
7676
77+ log.debug (" ZeroInitStructsHolder - performing zeInit on NPU only" );
78+ THROW_ON_FAIL_FOR_LEVELZERO (" zeInit" , zeInit (ZE_INIT_FLAG_VPU_ONLY));
79+
7780 uint32_t drivers_count = 0 ;
7881 THROW_ON_FAIL_FOR_LEVELZERO (" zeDriverGet" , zeDriverGet (&drivers_count, nullptr ));
7982
@@ -84,31 +87,41 @@ void ZeroInitStructsHolder::initNpuDriver() {
8487 setNpuDriver (drivers_count, std::move (all_drivers));
8588 };
8689
87- zel_version_t loader_version = {};
88- size_t num_components;
89- auto result = zelLoaderGetVersions (&num_components, nullptr );
90- if (result == ZE_RESULT_SUCCESS) {
91- zel_component_version_t * versions = new zel_component_version_t [num_components];
92- result = zelLoaderGetVersions (&num_components, versions);
90+ uint32_t loader_version = zero_api->getVersion ();
91+ uint32_t major;
92+ uint32_t minor;
93+
94+ if (loader_version == 0 ) {
95+ log.debug (" ZeroInitStructsHolder - performing zeInit on NPU only" );
96+ THROW_ON_FAIL_FOR_LEVELZERO (" zeInit" , zeInit (ZE_INIT_FLAG_VPU_ONLY));
9397
98+ zel_version_t zel_loader_version = {};
99+ size_t num_components;
100+ auto result = zelLoaderGetVersions (&num_components, nullptr );
94101 if (result == ZE_RESULT_SUCCESS) {
95- for (size_t i = 0 ; i < num_components; ++i) {
96- if (strncmp (versions[i].component_name , " loader" , strlen (" loader" )) == 0 ) {
97- loader_version = versions[i].component_lib_version ;
98-
99- log.debug (" ZeroInitStructsHolder - ze_loader.dll version: %d.%d.%d" ,
100- loader_version.major ,
101- loader_version.minor ,
102- loader_version.patch );
102+ std::vector<zel_component_version_t > versions (num_components);
103+ result = zelLoaderGetVersions (&num_components, versions.data ());
104+ if (result == ZE_RESULT_SUCCESS) {
105+ for (size_t i = 0 ; i < num_components; ++i) {
106+ if (strncmp (versions[i].component_name , " loader" , strlen (" loader" )) == 0 ) {
107+ zel_loader_version = versions[i].component_lib_version ;
108+ log.debug (" ZeroInitStructsHolder - ze_loader.dll version: %d.%d.%d" ,
109+ zel_loader_version.major ,
110+ zel_loader_version.minor ,
111+ zel_loader_version.patch );
112+ }
103113 }
104114 }
105115 }
106116
107- delete[] versions;
117+ major = zel_loader_version.major > 0 ? zel_loader_version.major : 0 ;
118+ minor = zel_loader_version.minor > 0 ? zel_loader_version.minor : 0 ;
119+ } else {
120+ major = (loader_version >> 16 ) & 0xffff ;
121+ minor = loader_version & 0xffff ;
108122 }
109123
110- if (loader_version.major > 1 || (loader_version.major == 1 && loader_version.minor > 18 ) ||
111- (loader_version.major == 1 && loader_version.minor == 18 && loader_version.patch >= 5 )) {
124+ if (major > 1 || (major == 1 && minor >= 19 )) {
112125 uint32_t drivers_count = 0 ;
113126 ze_init_driver_type_desc_t desc = {};
114127 desc.stype = ZE_STRUCTURE_TYPE_INIT_DRIVER_TYPE_DESC;
@@ -138,9 +151,6 @@ void ZeroInitStructsHolder::initNpuDriver() {
138151ZeroInitStructsHolder::ZeroInitStructsHolder ()
139152 : zero_api(ZeroApi::getInstance()),
140153 log (" NPUZeroInitStructsHolder" , Logger::global().level()) {
141- log.debug (" ZeroInitStructsHolder - performing zeInit on NPU only" );
142- THROW_ON_FAIL_FOR_LEVELZERO (" zeInit" , zeInit (ZE_INIT_FLAG_VPU_ONLY));
143-
144154 log.debug (" ZeroInitStructsHolder - initialize NPU Driver" );
145155 initNpuDriver ();
146156
0 commit comments