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