4
4
5
5
#include < gtest/gtest.h>
6
6
7
+ #include " common_test_utils/node_builders/eltwise.hpp"
8
+ #include " common_test_utils/node_builders/gru_cell.hpp"
7
9
#include " cuda_graph_topology_runner.hpp"
8
10
#include " cuda_simple_execution_delegator.hpp"
11
+ #include " functional_test_utils/ov_plugin_cache.hpp"
9
12
#include " ops/parameter.hpp"
10
13
#include " ops/result.hpp"
11
- #include " ov_models/builders.hpp"
12
14
#include " ov_models/utils/data_utils.hpp"
13
15
14
16
using namespace ov ::nvidia_gpu;
@@ -45,45 +47,35 @@ std::vector<std::vector<CalcType>> calcRefs(std::shared_ptr<ov::Model> model,
45
47
const std::vector<std::shared_ptr<ov::Tensor>>& inputs) {
46
48
auto refModel = model->clone ();
47
49
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 ();
50
+ std::shared_ptr<ov::Core> core = ov::test::utils::PluginCache::get ().core ();
53
51
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 ;
52
+ auto compiled_model_ref = core-> compile_model (
53
+ refModel, ov::test::utils::DEVICE_TEMPLATE, {{ ov::template_plugin::disable_transformations ( true )}} );
54
+ auto infer_request_ref = compiled_model_ref. create_infer_request ();
55
+ auto params = refModel-> get_parameters ( );
56
+ OPENVINO_ASSERT (params. size () == inputs. size ());
57
+ for ( int input_num = 0 ; input_num < params. size (); input_num++) {
58
+ infer_request_ref. set_tensor (params [i]-> get_default_output (), inputs[i]) ;
61
59
}
60
+ infer_request_ref.infer ();
62
61
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 ());
62
+ ov::TensorVector outputs;
63
+ for (const auto & output : refModel->outputs ()) {
64
+ outputs.push_back (infer_request_ref.get_tensor (output));
75
65
}
76
- return res;
66
+
67
+ return outputs;
77
68
}
78
69
79
- void validateOutput (const ov::Tensor& tensor, const std::vector<CalcType>& refVector , float threshold) {
70
+ void validateOutput (const ov::Tensor& tensor, const ov::Tensor& ref_tensor , float threshold) {
80
71
EXPECT_EQ (tensor.get_element_type (), CALC_ELEMENT_TYPE);
72
+ EXPECT_EQ (ref_tensorv.get_element_type (), CALC_ELEMENT_TYPE);
81
73
const auto size = tensor.get_size ();
82
- EXPECT_EQ (size, refVector .size ());
74
+ EXPECT_EQ (size, ref_tensor .size ());
83
75
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
- });
76
+ const auto * ref_ptr = getConstPtr (ref_tensor);
77
+ bool areEqual = std::equal (
78
+ ptr, ptr + size, ptr, [threshold]( auto val1, auto val2) { return std::abs (val1 - val2) < threshold; });
87
79
EXPECT_TRUE (areEqual);
88
80
}
89
81
@@ -121,7 +113,7 @@ class GRUTI {
121
113
auto squeeze = std::make_shared<ov::op::v0::Squeeze>(bodyParams[0 ], axis);
122
114
ov::OutputVector out_vector = {squeeze, bodyParams[1 ]};
123
115
auto gru_cell =
124
- ngraph::builder::makeGRU (out_vector, WRB, hidden_size, {" sigmoid" , " tanh" }, {}, {}, clip, false );
116
+ ov::test::utils::make_gru (out_vector, WRB, hidden_size, {" sigmoid" , " tanh" }, {}, {}, clip, false );
125
117
auto unsqueeze = std::make_shared<ov::op::v0::Unsqueeze>(gru_cell->output (0 ), axis);
126
118
ov::ResultVector results{std::make_shared<ov::op::v0::Result>(gru_cell->output (0 )),
127
119
std::make_shared<ov::op::v0::Result>(unsqueeze)};
@@ -202,10 +194,12 @@ class SplitConcatAddTI {
202
194
}
203
195
204
196
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 );
197
+ const auto split_axis_op =
198
+ std::make_shared<ov::op::v0::Constant>(ov::element::Type_t::i64, ov::Shape{}, std::vector<int64_t >{1 });
199
+ const auto split = std::make_shared<ov::op::v1::Split>(squeeze, splitAxisOp, 2 );
206
200
const auto concat =
207
201
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);
202
+ const auto add0 = ov::test::utils::make_eltwise (concat->output (0 ), bodyParams[1 ], EltwiseTypes::ADD);
209
203
210
204
auto unsqueeze = std::make_shared<ov::op::v0::Unsqueeze>(add0->output (0 ), axisConstant);
211
205
ov::ResultVector results{std::make_shared<ov::op::v0::Result>(add0->output (0 )),
@@ -299,13 +293,13 @@ class CudaMultiGraphTest : public Test {
299
293
300
294
void run () { runner_.Run (*inferRequestContext_, deviceMemBlock_); }
301
295
302
- void calcRefs () { refOutputs_ = ::calcRefs (model_, inputTensors_); }
296
+ void calcRefs () { refOutputTensors_ = ::calcRefs (model_, inputTensors_); }
303
297
304
298
void validate (float threshold = THRESHOLD) {
305
299
const auto size = outputTensors_.size ();
306
- EXPECT_EQ (size, refOutputs_ .size ());
300
+ EXPECT_EQ (size, refOutputTensors_ .size ());
307
301
for (std::size_t i = 0 ; i < size; ++i) {
308
- validateOutput (*outputTensors_[i], refOutputs_ [i], THRESHOLD);
302
+ validateOutput (*outputTensors_[i], refOutputTensors_ [i], THRESHOLD);
309
303
}
310
304
}
311
305
@@ -349,6 +343,7 @@ class CudaMultiGraphTest : public Test {
349
343
SimpleExecutionDelegator simpleExecutionDelegator_{};
350
344
std::vector<std::shared_ptr<ov::Tensor>> inputTensors_{populateTensors (model_->inputs ())};
351
345
std::vector<std::shared_ptr<ov::Tensor>> outputTensors_{populateTensors (model_->outputs ())};
346
+ ov::TensorVector refOutputTensors_;
352
347
std::map<std::string, std::size_t > inputIndices_{populateInputIndices (model_)};
353
348
std::map<std::string, std::size_t > outputIndices_{populateOutputIndices (model_)};
354
349
std::unique_ptr<InferenceRequestContext> inferRequestContext_ =
@@ -363,7 +358,6 @@ class CudaMultiGraphTest : public Test {
363
358
false );
364
359
DeviceMemBlock deviceMemBlock_{runner_.GetSubGraph ().memoryManager ()->mutableTensorsMemoryModel ()};
365
360
366
- std::vector<std::vector<CalcType>> refOutputs_;
367
361
int currentSeed_ = SEED;
368
362
};
369
363
0 commit comments