33
33
#include " zero_backend.hpp"
34
34
#include " zero_tensor.hpp"
35
35
36
- using CompilationParams = std::tuple<std::string, // Device name
37
- ov::AnyMap // Config
38
- >;
36
+ using CompilationParamsAndTensorDataType = std::tuple<std::string, // Device name
37
+ ov::AnyMap, // Config
38
+ ov::element::Type // Tensor data type
39
+ >;
39
40
40
41
using ::testing::AllOf;
41
42
using ::testing::HasSubstr;
@@ -44,19 +45,21 @@ namespace ov {
44
45
namespace test {
45
46
namespace behavior {
46
47
class ZeroTensorTests : public ov ::test::behavior::OVPluginTestBase,
47
- public testing::WithParamInterface<CompilationParams > {
48
+ public testing::WithParamInterface<CompilationParamsAndTensorDataType > {
48
49
protected:
49
50
std::shared_ptr<ov::Core> core = utils::PluginCache::get().core();
50
51
ov::AnyMap configuration;
52
+ ov::element::Type element_type;
51
53
std::shared_ptr<::intel_npu::ZeroInitStructsHolder> init_struct;
52
54
std::shared_ptr<::intel_npu::OptionsDesc> options = std::make_shared<::intel_npu::OptionsDesc>();
53
55
::intel_npu::Config npu_config = ::intel_npu::Config(options);
54
56
55
57
public:
56
- static std::string getTestCaseName (testing::TestParamInfo<CompilationParams> obj) {
58
+ static std::string getTestCaseName (const testing::TestParamInfo<CompilationParamsAndTensorDataType>& obj) {
57
59
std::string targetDevice;
58
60
ov::AnyMap configuration;
59
- std::tie (targetDevice, configuration) = obj.param ;
61
+ ov::element::Type type;
62
+ std::tie (targetDevice, configuration, type) = obj.param ;
60
63
std::replace (targetDevice.begin (), targetDevice.end (), ' :' , ' _' );
61
64
targetDevice = ov::test::utils::getTestsPlatformFromEnvironmentOr (ov::test::utils::DEVICE_NPU);
62
65
@@ -69,12 +72,15 @@ class ZeroTensorTests : public ov::test::behavior::OVPluginTestBase,
69
72
configItem.second .print (result);
70
73
}
71
74
}
75
+ if (!type.get_type_name ().empty ()) {
76
+ result << " tensorDataType=" << type.get_type_name () << " _" ;
77
+ }
72
78
73
79
return result.str ();
74
80
}
75
81
76
82
void SetUp () override {
77
- std::tie (target_device, configuration) = this ->GetParam ();
83
+ std::tie (target_device, configuration, element_type ) = this ->GetParam ();
78
84
79
85
SKIP_IF_CURRENT_TEST_IS_DISABLED ()
80
86
OVPluginTestBase::SetUp ();
@@ -95,12 +101,12 @@ TEST_P(ZeroTensorTests, AllocateDeleteAllocateZeroTensor) {
95
101
SKIP_IF_CURRENT_TEST_IS_DISABLED ()
96
102
97
103
auto shape = Shape{1 , 2 , 2 , 2 };
98
- auto zero_tensor = std::make_shared<::intel_npu::ZeroTensor>(init_struct, npu_config, element:: f32 , shape, true );
104
+ auto zero_tensor = std::make_shared<::intel_npu::ZeroTensor>(init_struct, npu_config, element_type , shape, true );
99
105
ASSERT_TRUE (::intel_npu::zeroUtils::memory_was_allocated_in_the_same_l0_context (init_struct->getContext (),
100
106
zero_tensor->data ()));
101
107
102
108
zero_tensor = {};
103
- zero_tensor = std::make_shared<::intel_npu::ZeroTensor>(init_struct, npu_config, element:: f32 , shape, false );
109
+ zero_tensor = std::make_shared<::intel_npu::ZeroTensor>(init_struct, npu_config, element_type , shape, false );
104
110
ASSERT_TRUE (::intel_npu::zeroUtils::memory_was_allocated_in_the_same_l0_context (init_struct->getContext (),
105
111
zero_tensor->data ()));
106
112
@@ -115,10 +121,10 @@ TEST_P(ZeroTensorTests, CheckSetSmallerShape) {
115
121
116
122
auto shape = Shape{1 , 20 , 20 , 20 };
117
123
auto shape_size = ov::shape_size (shape);
118
- auto zero_tensor = std::make_shared<::intel_npu::ZeroTensor>(init_struct, npu_config, element:: f32 , shape, true );
124
+ auto zero_tensor = std::make_shared<::intel_npu::ZeroTensor>(init_struct, npu_config, element_type , shape, true );
119
125
EXPECT_EQ (shape, zero_tensor->get_shape ());
120
126
EXPECT_EQ (shape_size, zero_tensor->get_size ());
121
- EXPECT_EQ (shape_size * sizeof (ov::element:: f32 ), zero_tensor->get_byte_size ());
127
+ EXPECT_EQ (shape_size * element_type. size ( ), zero_tensor->get_byte_size ());
122
128
123
129
auto data = zero_tensor->data ();
124
130
@@ -128,7 +134,7 @@ TEST_P(ZeroTensorTests, CheckSetSmallerShape) {
128
134
zero_tensor->set_shape (new_shape);
129
135
EXPECT_EQ (new_shape, zero_tensor->get_shape ());
130
136
EXPECT_EQ (new_shape_size, zero_tensor->get_size ());
131
- EXPECT_EQ (new_shape_size * sizeof (ov::element:: f32 ), zero_tensor->get_byte_size ());
137
+ EXPECT_EQ (new_shape_size * element_type. size ( ), zero_tensor->get_byte_size ());
132
138
EXPECT_EQ (data, zero_tensor->data ());
133
139
ASSERT_TRUE (::intel_npu::zeroUtils::memory_was_allocated_in_the_same_l0_context (init_struct->getContext (),
134
140
zero_tensor->data ()));
@@ -139,10 +145,10 @@ TEST_P(ZeroTensorTests, CheckSetBiggerShape) {
139
145
140
146
auto shape = Shape{1 , 20 , 20 , 20 };
141
147
auto shape_size = ov::shape_size (shape);
142
- auto zero_tensor = std::make_shared<::intel_npu::ZeroTensor>(init_struct, npu_config, element:: f32 , shape, false );
148
+ auto zero_tensor = std::make_shared<::intel_npu::ZeroTensor>(init_struct, npu_config, element_type , shape, false );
143
149
EXPECT_EQ (shape, zero_tensor->get_shape ());
144
150
EXPECT_EQ (shape_size, zero_tensor->get_size ());
145
- EXPECT_EQ (shape_size * sizeof (ov::element:: f32 ), zero_tensor->get_byte_size ());
151
+ EXPECT_EQ (shape_size * element_type. size ( ), zero_tensor->get_byte_size ());
146
152
147
153
auto new_shape = Shape{1 , 50 , 50 , 50 };
148
154
auto new_shape_size = ov::shape_size (new_shape);
@@ -152,7 +158,7 @@ TEST_P(ZeroTensorTests, CheckSetBiggerShape) {
152
158
zero_tensor->set_shape (new_shape);
153
159
EXPECT_EQ (new_shape, zero_tensor->get_shape ());
154
160
EXPECT_EQ (new_shape_size, zero_tensor->get_size ());
155
- EXPECT_EQ (new_shape_size * sizeof (ov::element:: f32 ), zero_tensor->get_byte_size ());
161
+ EXPECT_EQ (new_shape_size * element_type. size ( ), zero_tensor->get_byte_size ());
156
162
ASSERT_TRUE (zero_tensor->memory_address_changed ());
157
163
ASSERT_TRUE (::intel_npu::zeroUtils::memory_was_allocated_in_the_same_l0_context (init_struct->getContext (),
158
164
zero_tensor->data ()));
@@ -164,122 +170,118 @@ TEST_P(ZeroTensorTests, CheckSetBiggerShape) {
164
170
TEST_P (ZeroTensorTests, CheckIsContinuousZeroTensorScalar) {
165
171
SKIP_IF_CURRENT_TEST_IS_DISABLED ()
166
172
167
- auto zero_tensor =
168
- std::make_shared<::intel_npu::ZeroTensor>(init_struct, npu_config, ov::element::f32 , Shape{}, true );
173
+ auto zero_tensor = std::make_shared<::intel_npu::ZeroTensor>(init_struct, npu_config, element_type, Shape{}, true );
169
174
auto data = zero_tensor->data ();
170
175
auto strides = zero_tensor->get_strides ();
171
176
172
177
ov::Tensor view_tensor;
173
178
174
- view_tensor = ov::Tensor (ov::element:: f32 , ov::Shape{}, data, strides);
179
+ view_tensor = ov::Tensor (element_type , ov::Shape{}, data, strides);
175
180
EXPECT_EQ (view_tensor.is_continuous (), true );
176
181
}
177
182
178
183
TEST_P (ZeroTensorTests, CheckIsContinuousHostTensor1Dimension) {
179
184
SKIP_IF_CURRENT_TEST_IS_DISABLED ()
180
185
181
186
auto zero_tensor =
182
- std::make_shared<::intel_npu::ZeroTensor>(init_struct, npu_config, ov::element:: f32 , Shape{128 }, true );
187
+ std::make_shared<::intel_npu::ZeroTensor>(init_struct, npu_config, element_type , Shape{128 }, true );
183
188
184
189
auto data = zero_tensor->data ();
185
190
auto strides = zero_tensor->get_strides ();
186
191
187
192
ov::Tensor view_tensor;
188
193
189
- view_tensor = ov::Tensor (ov::element:: f32 , ov::Shape{128 }, data, strides);
194
+ view_tensor = ov::Tensor (element_type , ov::Shape{128 }, data, strides);
190
195
EXPECT_EQ (view_tensor.is_continuous (), true );
191
196
192
- view_tensor = ov::Tensor (ov::element:: f32 , ov::Shape{16 }, data, strides);
197
+ view_tensor = ov::Tensor (element_type , ov::Shape{16 }, data, strides);
193
198
EXPECT_EQ (view_tensor.is_continuous (), true );
194
199
}
195
200
196
201
TEST_P (ZeroTensorTests, CheckIsContinuousZeroTensor2Dimensions) {
197
202
SKIP_IF_CURRENT_TEST_IS_DISABLED ()
198
203
199
204
auto zero_tensor =
200
- std::make_shared<::intel_npu::ZeroTensor>(init_struct, npu_config, ov::element:: f32 , Shape{32 , 128 }, true );
205
+ std::make_shared<::intel_npu::ZeroTensor>(init_struct, npu_config, element_type , Shape{32 , 128 }, true );
201
206
auto data = zero_tensor->data ();
202
207
auto strides = zero_tensor->get_strides ();
203
208
204
209
ov::Tensor view_tensor;
205
210
206
- view_tensor = ov::Tensor (ov::element:: f32 , Shape{16 , 128 }, data, strides);
211
+ view_tensor = ov::Tensor (element_type , Shape{16 , 128 }, data, strides);
207
212
EXPECT_EQ (view_tensor.is_continuous (), true );
208
213
209
- view_tensor = ov::Tensor (ov::element:: f32 , Shape{1 , 128 }, data, strides);
214
+ view_tensor = ov::Tensor (element_type , Shape{1 , 128 }, data, strides);
210
215
EXPECT_EQ (view_tensor.is_continuous (), true );
211
216
212
- view_tensor = ov::Tensor (ov::element:: f32 , Shape{1 , 16 }, data, strides);
217
+ view_tensor = ov::Tensor (element_type , Shape{1 , 16 }, data, strides);
213
218
EXPECT_EQ (view_tensor.is_continuous (), true );
214
219
215
- view_tensor = ov::Tensor (ov::element:: f32 , Shape{2 , 16 }, data, strides);
220
+ view_tensor = ov::Tensor (element_type , Shape{2 , 16 }, data, strides);
216
221
EXPECT_EQ (view_tensor.is_continuous (), false );
217
222
}
218
223
219
224
TEST_P (ZeroTensorTests, CheckIsContinuousZeroTensor3Dimensions) {
220
225
SKIP_IF_CURRENT_TEST_IS_DISABLED ()
221
226
222
227
auto zero_tensor =
223
- std::make_shared<::intel_npu::ZeroTensor>(init_struct, npu_config, ov::element:: f32 , Shape{5 , 32 , 128 }, true );
228
+ std::make_shared<::intel_npu::ZeroTensor>(init_struct, npu_config, element_type , Shape{5 , 32 , 128 }, true );
224
229
auto data = zero_tensor->data ();
225
230
auto strides = zero_tensor->get_strides ();
226
231
227
232
ov::Tensor view_tensor;
228
233
229
- view_tensor = ov::Tensor (ov::element:: f32 , Shape{2 , 32 , 128 }, data, strides);
234
+ view_tensor = ov::Tensor (element_type , Shape{2 , 32 , 128 }, data, strides);
230
235
EXPECT_EQ (view_tensor.is_continuous (), true );
231
236
232
- view_tensor = ov::Tensor (ov::element:: f32 , Shape{2 , 16 , 128 }, data, strides);
237
+ view_tensor = ov::Tensor (element_type , Shape{2 , 16 , 128 }, data, strides);
233
238
EXPECT_EQ (view_tensor.is_continuous (), false );
234
239
235
- view_tensor = ov::Tensor (ov::element:: f32 , Shape{1 , 1 , 128 }, data, strides);
240
+ view_tensor = ov::Tensor (element_type , Shape{1 , 1 , 128 }, data, strides);
236
241
EXPECT_EQ (view_tensor.is_continuous (), true );
237
242
238
- view_tensor = ov::Tensor (ov::element:: f32 , Shape{1 , 1 , 64 }, data, strides);
243
+ view_tensor = ov::Tensor (element_type , Shape{1 , 1 , 64 }, data, strides);
239
244
EXPECT_EQ (view_tensor.is_continuous (), true );
240
245
241
- view_tensor = ov::Tensor (ov::element:: f32 , Shape{1 , 16 , 128 }, data, strides);
246
+ view_tensor = ov::Tensor (element_type , Shape{1 , 16 , 128 }, data, strides);
242
247
EXPECT_EQ (view_tensor.is_continuous (), true );
243
248
}
244
249
245
250
TEST_P (ZeroTensorTests, CheckIsContinuousZeroTensor4Dimensions) {
246
251
SKIP_IF_CURRENT_TEST_IS_DISABLED ()
247
252
248
- auto zero_tensor = std::make_shared<::intel_npu::ZeroTensor>(init_struct,
249
- npu_config,
250
- ov::element::f32 ,
251
- Shape{3 , 5 , 32 , 128 },
252
- true );
253
+ auto zero_tensor =
254
+ std::make_shared<::intel_npu::ZeroTensor>(init_struct, npu_config, element_type, Shape{3 , 5 , 32 , 128 }, true );
253
255
auto data = zero_tensor->data ();
254
256
auto strides = zero_tensor->get_strides ();
255
257
256
258
ov::Tensor view_tensor;
257
259
258
- view_tensor = ov::Tensor (ov::element:: f32 , Shape{1 , 2 , 32 , 128 }, data, strides);
260
+ view_tensor = ov::Tensor (element_type , Shape{1 , 2 , 32 , 128 }, data, strides);
259
261
EXPECT_EQ (view_tensor.is_continuous (), true );
260
262
261
- view_tensor = ov::Tensor (ov::element:: f32 , Shape{2 , 5 , 32 , 128 }, data, strides);
263
+ view_tensor = ov::Tensor (element_type , Shape{2 , 5 , 32 , 128 }, data, strides);
262
264
EXPECT_EQ (view_tensor.is_continuous (), true );
263
265
264
- view_tensor = ov::Tensor (ov::element:: f32 , Shape{2 , 2 , 32 , 128 }, data, strides);
266
+ view_tensor = ov::Tensor (element_type , Shape{2 , 2 , 32 , 128 }, data, strides);
265
267
EXPECT_EQ (view_tensor.is_continuous (), false );
266
268
267
- view_tensor = ov::Tensor (ov::element:: f32 , Shape{1 , 2 , 5 , 128 }, data, strides);
269
+ view_tensor = ov::Tensor (element_type , Shape{1 , 2 , 5 , 128 }, data, strides);
268
270
EXPECT_EQ (view_tensor.is_continuous (), false );
269
271
270
- view_tensor = ov::Tensor (ov::element:: f32 , Shape{3 , 5 , 32 , 64 }, data, strides);
272
+ view_tensor = ov::Tensor (element_type , Shape{3 , 5 , 32 , 64 }, data, strides);
271
273
EXPECT_EQ (view_tensor.is_continuous (), false );
272
274
273
- view_tensor = ov::Tensor (ov::element:: f32 , Shape{1 , 1 , 16 , 128 }, data, strides);
275
+ view_tensor = ov::Tensor (element_type , Shape{1 , 1 , 16 , 128 }, data, strides);
274
276
EXPECT_EQ (view_tensor.is_continuous (), true );
275
277
276
- view_tensor = ov::Tensor (ov::element:: f32 , Shape{2 , 1 , 16 , 128 }, data, strides);
278
+ view_tensor = ov::Tensor (element_type , Shape{2 , 1 , 16 , 128 }, data, strides);
277
279
EXPECT_EQ (view_tensor.is_continuous (), false );
278
280
279
- view_tensor = ov::Tensor (ov::element:: f32 , Shape{1 , 1 , 1 , 128 }, data, strides);
281
+ view_tensor = ov::Tensor (element_type , Shape{1 , 1 , 1 , 128 }, data, strides);
280
282
EXPECT_EQ (view_tensor.is_continuous (), true );
281
283
282
- view_tensor = ov::Tensor (ov::element:: f32 , Shape{1 , 1 , 1 , 32 }, data, strides);
284
+ view_tensor = ov::Tensor (element_type , Shape{1 , 1 , 1 , 32 }, data, strides);
283
285
EXPECT_EQ (view_tensor.is_continuous (), true );
284
286
}
285
287
@@ -289,8 +291,8 @@ TEST_P(ZeroTensorTests, CopyDefaultTensorExpectedThrow) {
289
291
auto shape = Shape{1 , 2 , 2 , 2 };
290
292
291
293
// shape size is unaligned to standard page size, expect to fail
292
- auto data = static_cast <float *>(::operator new (ov::shape_size (shape) * sizeof (ov::element:: f32 )));
293
- auto default_tensor = make_tensor (ov::element:: f32 , shape, data);
294
+ auto data = static_cast <float *>(::operator new (ov::shape_size (shape) * element_type. size ( )));
295
+ auto default_tensor = make_tensor (element_type , shape, data);
294
296
ASSERT_THROW (auto zero_tensor = std::make_shared<::intel_npu::ZeroTensor>(init_struct, default_tensor, npu_config),
295
297
::intel_npu::ZeroTensorException);
296
298
@@ -302,8 +304,7 @@ TEST_P(ZeroTensorTests, CopyZeroTensorAndKeepAlive) {
302
304
303
305
auto shape = Shape{1 , 2 , 2 , 2 };
304
306
305
- auto zero_tensor =
306
- std::make_shared<::intel_npu::ZeroTensor>(init_struct, npu_config, ov::element::f32 , shape, true );
307
+ auto zero_tensor = std::make_shared<::intel_npu::ZeroTensor>(init_struct, npu_config, element_type, shape, true );
307
308
308
309
auto copy_zero_tensor = std::make_shared<::intel_npu::ZeroTensor>(init_struct, zero_tensor, npu_config);
309
310
@@ -325,8 +326,7 @@ TEST_P(ZeroTensorTests, CopyHostTensorAndKeepAlive) {
325
326
auto zero_context = std::make_shared<::intel_npu::RemoteContextImpl>(engine_backend);
326
327
auto shape = Shape{1 , 2 , 2 , 2 };
327
328
328
- auto host_tensor =
329
- std::make_shared<::intel_npu::ZeroHostTensor>(zero_context, init_struct, ov::element::f32 , shape);
329
+ auto host_tensor = std::make_shared<::intel_npu::ZeroHostTensor>(zero_context, init_struct, element_type, shape);
330
330
331
331
auto copy_zero_tensor = std::make_shared<::intel_npu::ZeroTensor>(init_struct, host_tensor, npu_config);
332
332
@@ -349,7 +349,7 @@ TEST_P(ZeroTensorTests, CopyRemoteTensorAndKeepAlive) {
349
349
auto shape = Shape{1 , 2 , 2 , 2 };
350
350
351
351
auto remote_tensor =
352
- std::make_shared<::intel_npu::ZeroRemoteTensor>(zero_context, init_struct, ov::element:: f32 , shape);
352
+ std::make_shared<::intel_npu::ZeroRemoteTensor>(zero_context, init_struct, element_type , shape);
353
353
354
354
auto copy_zero_tensor = std::make_shared<::intel_npu::ZeroTensor>(init_struct, remote_tensor, npu_config);
355
355
@@ -375,14 +375,28 @@ TEST_P(ZeroTensorTests, CopyRemoteTensorFromAnotherContextThrow) {
375
375
{ov::intel_npu::tensor_type.name (), {ov::intel_npu::TensorType::INPUT}}};
376
376
377
377
auto context = core->create_context (target_device, params);
378
- auto remote_tensor = context.create_tensor (ov::element:: f32 , shape);
378
+ auto remote_tensor = context.create_tensor (element_type , shape);
379
379
auto remote_tensor_impl = get_tensor_impl (remote_tensor);
380
380
381
381
ASSERT_THROW (
382
382
auto zero_tensor = std::make_shared<::intel_npu::ZeroTensor>(init_struct, remote_tensor_impl, npu_config),
383
383
::intel_npu::ZeroTensorException);
384
384
}
385
385
386
+ using ZeroTensorTestsCheckDataType = ZeroTensorTests;
387
+
388
+ TEST_P (ZeroTensorTestsCheckDataType, CopyZeroTensorAndCheckTensorDataType) {
389
+ SKIP_IF_CURRENT_TEST_IS_DISABLED ()
390
+
391
+ auto shape = Shape{1 , 2 , 2 , 2 };
392
+
393
+ auto zero_tensor = std::make_shared<::intel_npu::ZeroTensor>(init_struct, npu_config, element_type, shape, true );
394
+ EXPECT_EQ (element_type, zero_tensor->get_element_type ());
395
+
396
+ auto copy_zero_tensor = std::make_shared<::intel_npu::ZeroTensor>(init_struct, zero_tensor, npu_config);
397
+ EXPECT_EQ (zero_tensor->get_element_type (), copy_zero_tensor->get_element_type ());
398
+ }
399
+
386
400
} // namespace behavior
387
401
} // namespace test
388
402
} // namespace ov
0 commit comments