4
4
5
5
#include < gtest/gtest.h>
6
6
7
+ #include " common_test_utils/node_builders/eltwise.hpp"
8
+ #include " common_test_utils/test_constants.hpp"
7
9
#include " cuda_graph_topology_runner.hpp"
8
10
#include " cuda_simple_execution_delegator.hpp"
9
- #include " ops/parameter.hpp"
10
- #include " ops/result.hpp"
11
- #include " ov_models/builders.hpp"
11
+ #include " functional_test_utils/ov_plugin_cache.hpp"
12
+ #include " openvino/op/constant.hpp"
13
+ #include " openvino/op/parameter.hpp"
14
+ #include " openvino/op/result.hpp"
15
+ #include " openvino/op/split.hpp"
16
+ #include " openvino/op/squeeze.hpp"
17
+ #include " openvino/op/unsqueeze.hpp"
12
18
#include " ov_models/utils/data_utils.hpp"
19
+ #include " template/properties.hpp"
13
20
14
21
using namespace ov ::nvidia_gpu;
15
22
using namespace testing ;
@@ -41,49 +48,38 @@ void generateInput(ov::Tensor& tensor, int to = TO, int from = FROM, int seed =
41
48
std::generate (ptr, ptr + tensor.get_size (), [&dist, &engine]() { return CalcType{dist (engine)}; });
42
49
}
43
50
44
- std::vector<std::vector<CalcType>> calcRefs (std::shared_ptr<ov::Model> model,
45
- const std::vector<std::shared_ptr<ov::Tensor>>& inputs) {
51
+ ov::TensorVector calcRefs (std::shared_ptr<ov::Model> model, const std::vector<std::shared_ptr<ov::Tensor>>& inputs) {
46
52
auto refModel = model->clone ();
47
53
48
- auto referenceInputs = std::vector<std::vector<uint8_t >>(inputs.size ());
49
- auto refInputsTypes = std::vector<ov::element::Type>(inputs.size ());
50
- for (std::size_t i = 0 ; i < inputs.size (); ++i) {
51
- const auto & input = inputs[i];
52
- const auto inputSize = input->get_byte_size ();
54
+ std::shared_ptr<ov::Core> core = ov::test::utils::PluginCache::get ().core ();
53
55
54
- auto & referenceInput = referenceInputs[i];
55
- referenceInput. resize (inputSize );
56
-
57
- const auto * buffer = static_cast < const uint8_t *>(input-> data () );
58
- std::copy (buffer, buffer + inputSize, referenceInput. data ());
59
-
60
- refInputsTypes [i] = CALC_ELEMENT_TYPE ;
56
+ auto compiled_model_ref = core-> compile_model (
57
+ refModel, ov::test::utils::DEVICE_TEMPLATE, {{ ov::template_plugin::disable_transformations ( true )}} );
58
+ auto infer_request_ref = compiled_model_ref. create_infer_request ();
59
+ auto params = refModel-> get_parameters ( );
60
+ OPENVINO_ASSERT (params. size () == inputs. size ());
61
+ for ( int i = 0 ; i < params. size (); i++) {
62
+ infer_request_ref. set_tensor (params [i]-> get_default_output (), inputs[i]) ;
61
63
}
64
+ infer_request_ref.infer ();
62
65
63
- const auto expectedOutputs = ngraph::helpers::interpreterFunction (refModel, referenceInputs, refInputsTypes);
64
-
65
- std::vector<std::vector<CalcType>> res (expectedOutputs.size ());
66
- for (std::size_t i = 0 ; i < expectedOutputs.size (); ++i) {
67
- EXPECT_EQ (expectedOutputs[i].first , CALC_ELEMENT_TYPE);
68
- const auto & expOut = expectedOutputs[i].second ;
69
- auto & resOut = res[i];
70
- const auto resOutSize = expOut.size () / sizeof (CalcType);
71
- resOut.resize (resOutSize);
72
-
73
- const auto * buffer = static_cast <const CalcType*>(static_cast <const void *>(expOut.data ()));
74
- std::copy (buffer, buffer + resOutSize, resOut.data ());
66
+ ov::TensorVector outputs;
67
+ for (const auto & output : refModel->outputs ()) {
68
+ outputs.push_back (infer_request_ref.get_tensor (output));
75
69
}
76
- return res;
70
+
71
+ return outputs;
77
72
}
78
73
79
- void validateOutput (const ov::Tensor& tensor, const std::vector<CalcType>& refVector , float threshold) {
74
+ void validateOutput (const ov::Tensor& tensor, const ov::Tensor& ref_tensor , float threshold) {
80
75
EXPECT_EQ (tensor.get_element_type (), CALC_ELEMENT_TYPE);
76
+ EXPECT_EQ (ref_tensor.get_element_type (), CALC_ELEMENT_TYPE);
81
77
const auto size = tensor.get_size ();
82
- EXPECT_EQ (size, refVector. size ());
78
+ EXPECT_EQ (size, ref_tensor. get_size ());
83
79
const auto * ptr = getConstPtr (tensor);
84
- bool areEqual = std::equal (ptr, ptr + size, refVector. cbegin (), [threshold]( auto val1, auto val2) {
85
- return std::abs (val1 - val2) < threshold;
86
- });
80
+ const auto * ref_ptr = getConstPtr (ref_tensor);
81
+ bool areEqual = std::equal (
82
+ ptr, ptr + size, ptr, [threshold]( auto val1, auto val2) { return std::abs (val1 - val2) < threshold; });
87
83
EXPECT_TRUE (areEqual);
88
84
}
89
85
@@ -121,7 +117,7 @@ class GRUTI {
121
117
auto squeeze = std::make_shared<ov::op::v0::Squeeze>(bodyParams[0 ], axis);
122
118
ov::OutputVector out_vector = {squeeze, bodyParams[1 ]};
123
119
auto gru_cell =
124
- ngraph::builder::makeGRU (out_vector, WRB, hidden_size, {" sigmoid" , " tanh" }, {}, {}, clip, false );
120
+ ov::test::utils::make_gru (out_vector, WRB, hidden_size, {" sigmoid" , " tanh" }, {}, {}, clip, false );
125
121
auto unsqueeze = std::make_shared<ov::op::v0::Unsqueeze>(gru_cell->output (0 ), axis);
126
122
ov::ResultVector results{std::make_shared<ov::op::v0::Result>(gru_cell->output (0 )),
127
123
std::make_shared<ov::op::v0::Result>(unsqueeze)};
@@ -202,10 +198,12 @@ class SplitConcatAddTI {
202
198
}
203
199
204
200
auto squeeze = std::make_shared<ov::op::v0::Squeeze>(bodyParams[0 ], axisConstant);
205
- const auto split = ngraph::builder::makeSplit (squeeze, CALC_ELEMENT_TYPE, 2 , 1 );
201
+ const auto split_axis_op =
202
+ std::make_shared<ov::op::v0::Constant>(ov::element::Type_t::i64, ov::Shape{}, std::vector<int64_t >{1 });
203
+ const auto split = std::make_shared<ov::op::v1::Split>(squeeze, split_axis_op, 2 );
206
204
const auto concat =
207
205
std::make_shared<ov::op::v0::Concat>(ov::OutputVector{split->output (0 ), split->output (1 )}, 1 );
208
- const auto add0 = ngraph::builder::makeEltwise (concat->output (0 ), bodyParams[1 ], EltwiseTypes::ADD);
206
+ const auto add0 = ov::test::utils::make_eltwise (concat->output (0 ), bodyParams[1 ], EltwiseTypes::ADD);
209
207
210
208
auto unsqueeze = std::make_shared<ov::op::v0::Unsqueeze>(add0->output (0 ), axisConstant);
211
209
ov::ResultVector results{std::make_shared<ov::op::v0::Result>(add0->output (0 )),
@@ -299,13 +297,13 @@ class CudaMultiGraphTest : public Test {
299
297
300
298
void run () { runner_.Run (*inferRequestContext_, deviceMemBlock_); }
301
299
302
- void calcRefs () { refOutputs_ = ::calcRefs (model_, inputTensors_); }
300
+ void calcRefs () { refOutputTensors_ = ::calcRefs (model_, inputTensors_); }
303
301
304
302
void validate (float threshold = THRESHOLD) {
305
303
const auto size = outputTensors_.size ();
306
- EXPECT_EQ (size, refOutputs_ .size ());
304
+ EXPECT_EQ (size, refOutputTensors_ .size ());
307
305
for (std::size_t i = 0 ; i < size; ++i) {
308
- validateOutput (*outputTensors_[i], refOutputs_ [i], THRESHOLD);
306
+ validateOutput (*outputTensors_[i], refOutputTensors_ [i], THRESHOLD);
309
307
}
310
308
}
311
309
@@ -349,6 +347,7 @@ class CudaMultiGraphTest : public Test {
349
347
SimpleExecutionDelegator simpleExecutionDelegator_{};
350
348
std::vector<std::shared_ptr<ov::Tensor>> inputTensors_{populateTensors (model_->inputs ())};
351
349
std::vector<std::shared_ptr<ov::Tensor>> outputTensors_{populateTensors (model_->outputs ())};
350
+ ov::TensorVector refOutputTensors_;
352
351
std::map<std::string, std::size_t > inputIndices_{populateInputIndices (model_)};
353
352
std::map<std::string, std::size_t > outputIndices_{populateOutputIndices (model_)};
354
353
std::unique_ptr<InferenceRequestContext> inferRequestContext_ =
@@ -363,7 +362,6 @@ class CudaMultiGraphTest : public Test {
363
362
false );
364
363
DeviceMemBlock deviceMemBlock_{runner_.GetSubGraph ().memoryManager ()->mutableTensorsMemoryModel ()};
365
364
366
- std::vector<std::vector<CalcType>> refOutputs_;
367
365
int currentSeed_ = SEED;
368
366
};
369
367
0 commit comments