@@ -74,6 +74,9 @@ void ZeroInitStructsHolder::initNpuDriver() {
74
74
auto fallbackToZeDriverGet = [&]() {
75
75
log.debug (" ZeroInitStructsHolder - zeInitDrivers not supported, fallback to zeDriverGet" );
76
76
77
+ log.debug (" ZeroInitStructsHolder - performing zeInit on NPU only" );
78
+ THROW_ON_FAIL_FOR_LEVELZERO (" zeInit" , zeInit (ZE_INIT_FLAG_VPU_ONLY));
79
+
77
80
uint32_t drivers_count = 0 ;
78
81
THROW_ON_FAIL_FOR_LEVELZERO (" zeDriverGet" , zeDriverGet (&drivers_count, nullptr ));
79
82
@@ -84,31 +87,44 @@ void ZeroInitStructsHolder::initNpuDriver() {
84
87
setNpuDriver (drivers_count, std::move (all_drivers));
85
88
};
86
89
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));
93
97
98
+ zel_version_t zel_loader_version = {};
99
+ size_t num_components;
100
+ auto result = zelLoaderGetVersions (&num_components, nullptr );
94
101
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
+ zel_component_version_t * versions = new zel_component_version_t [num_components];
103
+ result = zelLoaderGetVersions (&num_components, versions);
104
+
105
+ if (result == ZE_RESULT_SUCCESS) {
106
+ for (size_t i = 0 ; i < num_components; ++i) {
107
+ if (strncmp (versions[i].component_name , " loader" , strlen (" loader" )) == 0 ) {
108
+ zel_loader_version = versions[i].component_lib_version ;
109
+ log.debug (" ZeroInitStructsHolder - ze_loader.dll version: %d.%d.%d" ,
110
+ zel_loader_version.major ,
111
+ zel_loader_version.minor ,
112
+ zel_loader_version.patch );
113
+ }
103
114
}
104
115
}
116
+
117
+ delete[] versions;
105
118
}
106
119
107
- delete[] versions;
120
+ major = zel_loader_version.major > 0 ? zel_loader_version.major : 0 ;
121
+ minor = zel_loader_version.minor > 0 ? zel_loader_version.minor : 0 ;
122
+ } else {
123
+ major = (loader_version >> 16 ) & 0xffff ;
124
+ minor = loader_version & 0xffff ;
108
125
}
109
126
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 )) {
127
+ if (major > 1 || (major == 1 && minor >= 19 )) {
112
128
uint32_t drivers_count = 0 ;
113
129
ze_init_driver_type_desc_t desc = {};
114
130
desc.stype = ZE_STRUCTURE_TYPE_INIT_DRIVER_TYPE_DESC;
@@ -138,9 +154,6 @@ void ZeroInitStructsHolder::initNpuDriver() {
138
154
ZeroInitStructsHolder::ZeroInitStructsHolder ()
139
155
: zero_api(ZeroApi::getInstance()),
140
156
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
-
144
157
log.debug (" ZeroInitStructsHolder - initialize NPU Driver" );
145
158
initNpuDriver ();
146
159
0 commit comments