ASSERT_EQ(getData("data9")->getTensorDesc().getDims(), refShape);
}
-TEST_F(RemoveLayerTests, canFoldConstSubgraphs) {
- IE::BlobMap refBlobs = initConstLayers({"input1", "input2", "input3"});
- std::vector<std::string> refNewLayers = {"layer5__data9__Const"};
- { // TODO: method for marking layers
- getLayer("layer1")->type = "Mul";
- getLayer("layer2")->type = "Shape";
- getLayer("layer3")->type = "Power";
- getLayer("layer3")->params = {{"power", "1"},
- {"scale", "2"},
- {"shift", "-4"}};
- getLayer("layer4")->type = "Mul";
- getLayer("layer5")->type = "Mul";
- }
- float arr[] = {-2.f, 0.f, 54.f};
- auto ref5 = make_blob_with_precision(getData("data9")->getTensorDesc(), arr);
-
- IE::ConstTransformer transformator(net.get());
- transformator.foldConstSubgraphs();
-
- IE::CNNNetwork cnnNetwork(net);
- ASSERT_EQ(net->allLayers().size(), originalLayersNum - 7);
- auto newLayer = CommonTestUtils::getLayerByName(cnnNetwork, refNewLayers[0].c_str());
- auto actualBlob = newLayer->blobs["custom"];
- ASSERT_NE(actualBlob, nullptr);
- ASSERT_FALSE(actualBlob->buffer() == nullptr);
- TestsCommon::compare(*actualBlob, *ref5);
- ASSERT_EQ(newLayer->type, "Const");
-}
-
TEST_F(RemoveLayerTests, canSkipConstCalculation) {
IE::BlobMap refBlobs = initConstLayers({"input1", "input2", "input3"});
getLayer("layer6")->type = "Reshape";
ASSERT_EQ(getData("data1")->getTensorDesc().getDims(), newInShape);
ASSERT_EQ(getData("data3")->getTensorDesc().getDims(), newOutShape);
}
-
-TEST_F(AdvancedShapeInferTests, canFoldConstWithOneHot) {
- // Const-d1-OneHot-d2
- // \
- // I1-d3-Eltw(Sum)-d4
- auto testFunc = [&](IE::Precision precision) {
- netBuilder = NetBuilder();
- net = netBuilder
- .data("data1", IE::TensorDesc(precision, IE::SizeVector{2}, IE::Layout::C))
- .data("data2", IE::TensorDesc(precision, IE::SizeVector{10, 2}, IE::Layout::NC))
- .data("data3", IE::TensorDesc(precision, IE::SizeVector{10, 2}, IE::Layout::NC))
- .data("data4", IE::TensorDesc(precision, IE::SizeVector{10, 2}, IE::Layout::NC))
- .layer<IE::CNNLayer>(IE::LayerParams{"const", "dummy", precision})
- .layer<IE::CNNLayer>(IE::LayerParams{"oneHot", "OneHot", precision})
- .layer<IE::CNNLayer>(IE::LayerParams{"input", "input", precision})
- .layer<IE::CNNLayer>(IE::LayerParams{"eltwise", "Eltwise", precision})
- .linkToData("const", "data1")
- .linkDataTo("data1", "oneHot")
- .linkToData("oneHot", "data2")
- .linkDataTo("data2", "eltwise")
- .linkToData("input", "data3")
- .linkDataTo("data3", "eltwise")
- .linkToData("eltwise", "data4")
- .addInput("data3")
- .finalize();
- getLayer("oneHot")->params = {
- {"axis", "-1"},
- {"depth", "10"},
- {"off_value", "1.0"},
- {"on_value", "1.0"}
- };
- getLayer("eltwise")->params = {
- {"operation", "sum"}
- };
- originalLayersNum = net->allLayers().size();
-
- IE::CNNNetwork cnnNetwork(net);
- initConstLayers({"const"});
- IE::ConstTransformer transformator(net.get());
- transformator.fullTrim();
-
- ASSERT_EQ(net->allLayers().size(), originalLayersNum - 1);
- };
-
- testFunc(IE::Precision::FP32);
- testFunc(IE::Precision::FP16);
- testFunc(IE::Precision::Q78);
- testFunc(IE::Precision::I16);
- testFunc(IE::Precision::U8);
- testFunc(IE::Precision::I8);
- testFunc(IE::Precision::U16);
- testFunc(IE::Precision::I32);
- testFunc(IE::Precision::I64);
- testFunc(IE::Precision::U64);
-}
-
-TEST_F(AdvancedShapeInferTests, MulWithTensorConstInferTest) {
-
- auto testFunc = [&](IE::Precision precisionInData1, IE::Precision precisionInData2, IE::Precision precisionOutData) {
-
- netBuilder = NetBuilder();
- net = netBuilder
- .data("data1", IE::TensorDesc(precisionInData1, IE::SizeVector{2, 2}, IE::Layout::NC))
- .data("data2", IE::TensorDesc(precisionInData2, IE::SizeVector{2, 2}, IE::Layout::NC))
- .data("data3", IE::TensorDesc(precisionOutData, IE::SizeVector{2, 2}, IE::Layout::NC))
- .layer<IE::CNNLayer>(IE::LayerParams{"mulLayer", "Eltwise", IE::Precision::UNSPECIFIED})
- .layer<IE::CNNLayer>(IE::LayerParams{"input1", "Const", precisionInData1})
- .layer<IE::CNNLayer>(IE::LayerParams{"input2", "Const", precisionInData2})
- .linkToData("input1", "data1")
- .linkToData("input2", "data2")
- .linkDataTo("data1", "mulLayer")
- .linkDataTo("data2", "mulLayer")
- .linkToData("mulLayer", "data3")
- .addInput("data1")
- .addInput("data2")
- .finalize();
-
- getLayer("mulLayer")->params = {
- {"operation", "mul"}
- };
-
- IE::CNNNetwork cnnNetwork(net);
- initConstLayersDiffPrec({"input1", "input2"});
- float ref[] = {4, 9, 16, 25};
- if (precisionOutData == IE::Precision::FP16) {
- for (int i = 0; i < 4; i++)
- ref[i] = IE::PrecisionUtils::f32tof16(ref[i]);
- }
- IE::ConstTransformer transformator(net.get());
- transformator.foldConstSubgraphs();
- switch(precisionOutData) {
- case IE::Precision::U8: {
- InferenceEngine::CNNLayerPtr layer;
- ASSERT_EQ(InferenceEngine::OK, net->getLayerByName("mulLayer__data3__Const", layer, nullptr));
- auto *l = layer->blobs.at("custom")->cbuffer().as<uint8_t *>();
- ASSERT_EQ(l[0], ref[0]);
- ASSERT_EQ(l[1], ref[1]);
- ASSERT_EQ(l[2], ref[2]);
- ASSERT_EQ(l[3], ref[3]);
- break;
- }
- case IE::Precision::I32: {
- InferenceEngine::CNNLayerPtr layer;
- ASSERT_EQ(InferenceEngine::OK, net->getLayerByName("mulLayer__data3__Const", layer, nullptr));
- auto *l = layer->blobs.at("custom")->cbuffer().as<int *>();
- ASSERT_EQ(l[0], ref[0]);
- ASSERT_EQ(l[1], ref[1]);
- ASSERT_EQ(l[2], ref[2]);
- ASSERT_EQ(l[3], ref[3]);
- break;
- }
- case IE::Precision::I64: {
- InferenceEngine::CNNLayerPtr layer;
- ASSERT_EQ(InferenceEngine::OK, net->getLayerByName("mulLayer__data3__Const", layer, nullptr));
- auto *l = layer->blobs.at("custom")->cbuffer().as<long long int *>();
- ASSERT_EQ(l[0], ref[0]);
- ASSERT_EQ(l[1], ref[1]);
- ASSERT_EQ(l[2], ref[2]);
- ASSERT_EQ(l[3], ref[3]);
- break;
- }
- case IE::Precision::U64: {
- InferenceEngine::CNNLayerPtr layer;
- ASSERT_EQ(InferenceEngine::OK, net->getLayerByName("mulLayer__data3__Const", layer, nullptr));
- auto *l = layer->blobs.at("custom")->cbuffer().as<unsigned long long int *>();
- ASSERT_EQ(l[0], ref[0]);
- ASSERT_EQ(l[1], ref[1]);
- ASSERT_EQ(l[2], ref[2]);
- ASSERT_EQ(l[3], ref[3]);
- break;
- }
- case IE::Precision::FP16: {
- InferenceEngine::CNNLayerPtr layer;
- ASSERT_EQ(InferenceEngine::OK, net->getLayerByName("mulLayer__data3__Const", layer, nullptr));
- auto *l = layer->blobs.at("custom")->cbuffer().as<IE::ie_fp16 *>();
- ASSERT_EQ(l[0], ref[0]);
- ASSERT_EQ(l[1], ref[1]);
- ASSERT_EQ(l[2], ref[2]);
- ASSERT_EQ(l[3], ref[3]);
- break;
- }
- case IE::Precision::FP32: {
- InferenceEngine::CNNLayerPtr layer;
- ASSERT_EQ(InferenceEngine::OK, net->getLayerByName("mulLayer__data3__Const", layer, nullptr));
- auto *l = layer->blobs.at("custom")->cbuffer().as<float *>();
- ASSERT_EQ(l[0], ref[0]);
- ASSERT_EQ(l[1], ref[1]);
- ASSERT_EQ(l[2], ref[2]);
- ASSERT_EQ(l[3], ref[3]);
- break;
- }
- default:
- THROW_IE_EXCEPTION << "Unsupported precision!";
- }
- };
-
- testFunc(IE::Precision::U8, IE::Precision::U8, IE::Precision::U8);
- testFunc(IE::Precision::U8, IE::Precision::I32, IE::Precision::I32);
- testFunc(IE::Precision::U8, IE::Precision::I64, IE::Precision::I64);
- testFunc(IE::Precision::U8, IE::Precision::U64, IE::Precision::U64);
- testFunc(IE::Precision::U8, IE::Precision::FP16, IE::Precision::FP16);
- testFunc(IE::Precision::U8, IE::Precision::FP32, IE::Precision::FP32);
- testFunc(IE::Precision::I32, IE::Precision::U8, IE::Precision::I32);
- testFunc(IE::Precision::I32, IE::Precision::I32, IE::Precision::I32);
- testFunc(IE::Precision::I32, IE::Precision::I64, IE::Precision::I64);
- testFunc(IE::Precision::I32, IE::Precision::U64, IE::Precision::U64);
- testFunc(IE::Precision::I32, IE::Precision::FP16, IE::Precision::FP32);
- testFunc(IE::Precision::I32, IE::Precision::FP32, IE::Precision::FP32);
- testFunc(IE::Precision::I64, IE::Precision::U8, IE::Precision::I64);
- testFunc(IE::Precision::I64, IE::Precision::I32, IE::Precision::I64);
- testFunc(IE::Precision::I64, IE::Precision::I64, IE::Precision::I64);
- testFunc(IE::Precision::I64, IE::Precision::FP16, IE::Precision::FP32);
- testFunc(IE::Precision::I64, IE::Precision::FP32, IE::Precision::FP32);
- testFunc(IE::Precision::U64, IE::Precision::U8, IE::Precision::U64);
- testFunc(IE::Precision::U64, IE::Precision::I32, IE::Precision::U64);
- testFunc(IE::Precision::U64, IE::Precision::U64, IE::Precision::U64);
- testFunc(IE::Precision::U64, IE::Precision::FP16, IE::Precision::FP32);
- testFunc(IE::Precision::U64, IE::Precision::FP32, IE::Precision::FP32);
- testFunc(IE::Precision::FP16, IE::Precision::U8, IE::Precision::FP16);
- testFunc(IE::Precision::FP16, IE::Precision::I32, IE::Precision::FP32);
- testFunc(IE::Precision::FP16, IE::Precision::I64, IE::Precision::FP32);
- testFunc(IE::Precision::FP16, IE::Precision::U64, IE::Precision::FP32);
- testFunc(IE::Precision::FP16, IE::Precision::FP16, IE::Precision::FP16);
- testFunc(IE::Precision::FP16, IE::Precision::FP32, IE::Precision::FP32);
- testFunc(IE::Precision::FP32, IE::Precision::U8, IE::Precision::FP32);
- testFunc(IE::Precision::FP32, IE::Precision::I32, IE::Precision::FP32);
- testFunc(IE::Precision::FP32, IE::Precision::I64, IE::Precision::FP32);
- testFunc(IE::Precision::FP32, IE::Precision::U64, IE::Precision::FP32);
- testFunc(IE::Precision::FP32, IE::Precision::FP16, IE::Precision::FP32);
- testFunc(IE::Precision::FP32, IE::Precision::FP32, IE::Precision::FP32);
- testFunc(IE::Precision::FP16, IE::Precision::FP32, IE::Precision::FP16);
- testFunc(IE::Precision::FP32, IE::Precision::FP16, IE::Precision::FP16);
-}
-
-
-TEST_F(AdvancedShapeInferTests, MulWithScalarConstInferTest) {
-
- auto testFunc = [&](IE::Precision precisionInData1, IE::Precision precisionInData2, IE::Precision precisionOutData) {
-
- netBuilder = NetBuilder();
- net = netBuilder
- .data("data1", IE::TensorDesc(precisionInData1, IE::SizeVector{2, 2}, IE::Layout::NC))
- .data("data2", IE::TensorDesc(precisionInData2, IE::Layout::SCALAR))
- .data("data3", IE::TensorDesc(precisionOutData, IE::SizeVector{2, 2}, IE::Layout::NC))
- .layer<IE::CNNLayer>(IE::LayerParams{"mulLayer", "Eltwise", IE::Precision::UNSPECIFIED})
- .layer<IE::CNNLayer>(IE::LayerParams{"input1", "Const", precisionInData1})
- .layer<IE::CNNLayer>(IE::LayerParams{"input2", "Const", precisionInData2})
- .linkToData("input1", "data1")
- .linkToData("input2", "data2")
- .linkDataTo("data1", "mulLayer")
- .linkDataTo("data2", "mulLayer")
- .linkToData("mulLayer", "data3")
- .addInput("data1")
- .addInput("data2")
- .finalize();
-
- getLayer("mulLayer")->params = {
- {"operation", "mul"}
- };
-
- IE::CNNNetwork cnnNetwork(net);
- initConstLayersDiffPrec({"input1", "input2"});
- float ref[] = {4, 6, 8, 10};
- if (precisionOutData == IE::Precision::FP16) {
- for (int i = 0; i < 4; i++)
- ref[i] = IE::PrecisionUtils::f32tof16(ref[i]);
- }
- IE::ConstTransformer transformator(net.get());
- transformator.foldConstSubgraphs();
- switch(precisionOutData) {
- case IE::Precision::U8: {
- InferenceEngine::CNNLayerPtr layer;
- ASSERT_EQ(InferenceEngine::OK, net->getLayerByName("mulLayer__data3__Const", layer, nullptr));
- auto *l = layer->blobs.at("custom")->cbuffer().as<uint8_t *>();
- ASSERT_EQ(l[0], ref[0]);
- ASSERT_EQ(l[1], ref[1]);
- ASSERT_EQ(l[2], ref[2]);
- ASSERT_EQ(l[3], ref[3]);
- break;
- }
- case IE::Precision::I32: {
- InferenceEngine::CNNLayerPtr layer;
- ASSERT_EQ(InferenceEngine::OK, net->getLayerByName("mulLayer__data3__Const", layer, nullptr));
- auto *l = layer->blobs.at("custom")->cbuffer().as<int *>();
- ASSERT_EQ(l[0], ref[0]);
- ASSERT_EQ(l[1], ref[1]);
- ASSERT_EQ(l[2], ref[2]);
- ASSERT_EQ(l[3], ref[3]);
- break;
- }
- case IE::Precision::I64: {
- InferenceEngine::CNNLayerPtr layer;
- ASSERT_EQ(InferenceEngine::OK, net->getLayerByName("mulLayer__data3__Const", layer, nullptr));
- auto *l = layer->blobs.at("custom")->cbuffer().as<long long int *>();
- ASSERT_EQ(l[0], ref[0]);
- ASSERT_EQ(l[1], ref[1]);
- ASSERT_EQ(l[2], ref[2]);
- ASSERT_EQ(l[3], ref[3]);
- break;
- }
- case IE::Precision::U64: {
- InferenceEngine::CNNLayerPtr layer;
- ASSERT_EQ(InferenceEngine::OK, net->getLayerByName("mulLayer__data3__Const", layer, nullptr));
- auto *l = layer->blobs.at("custom")->cbuffer().as<unsigned long long int *>();
- ASSERT_EQ(l[0], ref[0]);
- ASSERT_EQ(l[1], ref[1]);
- ASSERT_EQ(l[2], ref[2]);
- ASSERT_EQ(l[3], ref[3]);
- break;
- }
- case IE::Precision::FP16: {
- InferenceEngine::CNNLayerPtr layer;
- ASSERT_EQ(InferenceEngine::OK, net->getLayerByName("mulLayer__data3__Const", layer, nullptr));
- auto *l = layer->blobs.at("custom")->cbuffer().as<IE::ie_fp16 *>();
- ASSERT_EQ(l[0], ref[0]);
- ASSERT_EQ(l[1], ref[1]);
- ASSERT_EQ(l[2], ref[2]);
- ASSERT_EQ(l[3], ref[3]);
- break;
- }
- case IE::Precision::FP32: {
- InferenceEngine::CNNLayerPtr layer;
- ASSERT_EQ(InferenceEngine::OK, net->getLayerByName("mulLayer__data3__Const", layer, nullptr));
- auto *l = layer->blobs.at("custom")->cbuffer().as<float *>();
- ASSERT_EQ(l[0], ref[0]);
- ASSERT_EQ(l[1], ref[1]);
- ASSERT_EQ(l[2], ref[2]);
- ASSERT_EQ(l[3], ref[3]);
- break;
- }
- default:
- THROW_IE_EXCEPTION << "Unsupported precision!";
- }
- };
-
- testFunc(IE::Precision::U8, IE::Precision::U8, IE::Precision::U8);
- testFunc(IE::Precision::U8, IE::Precision::I32, IE::Precision::I32);
- testFunc(IE::Precision::U8, IE::Precision::I64, IE::Precision::I64);
- testFunc(IE::Precision::U8, IE::Precision::U64, IE::Precision::U64);
- testFunc(IE::Precision::U8, IE::Precision::FP16, IE::Precision::FP16);
- testFunc(IE::Precision::U8, IE::Precision::FP32, IE::Precision::FP32);
- testFunc(IE::Precision::I32, IE::Precision::U8, IE::Precision::I32);
- testFunc(IE::Precision::I32, IE::Precision::I32, IE::Precision::I32);
- testFunc(IE::Precision::I32, IE::Precision::I64, IE::Precision::I64);
- testFunc(IE::Precision::I32, IE::Precision::U64, IE::Precision::U64);
- testFunc(IE::Precision::I32, IE::Precision::FP16, IE::Precision::FP32);
- testFunc(IE::Precision::I32, IE::Precision::FP32, IE::Precision::FP32);
- testFunc(IE::Precision::I64, IE::Precision::U8, IE::Precision::I64);
- testFunc(IE::Precision::I64, IE::Precision::I32, IE::Precision::I64);
- testFunc(IE::Precision::I64, IE::Precision::I64, IE::Precision::I64);
- testFunc(IE::Precision::I64, IE::Precision::FP16, IE::Precision::FP32);
- testFunc(IE::Precision::I64, IE::Precision::FP32, IE::Precision::FP32);
- testFunc(IE::Precision::U64, IE::Precision::U8, IE::Precision::U64);
- testFunc(IE::Precision::U64, IE::Precision::I32, IE::Precision::U64);
- testFunc(IE::Precision::U64, IE::Precision::U64, IE::Precision::U64);
- testFunc(IE::Precision::U64, IE::Precision::FP16, IE::Precision::FP32);
- testFunc(IE::Precision::U64, IE::Precision::FP32, IE::Precision::FP32);
- testFunc(IE::Precision::FP16, IE::Precision::U8, IE::Precision::FP16);
- testFunc(IE::Precision::FP16, IE::Precision::I32, IE::Precision::FP32);
- testFunc(IE::Precision::FP16, IE::Precision::I64, IE::Precision::FP32);
- testFunc(IE::Precision::FP16, IE::Precision::U64, IE::Precision::FP32);
- testFunc(IE::Precision::FP16, IE::Precision::FP16, IE::Precision::FP16);
- testFunc(IE::Precision::FP16, IE::Precision::FP32, IE::Precision::FP32);
- testFunc(IE::Precision::FP32, IE::Precision::U8, IE::Precision::FP32);
- testFunc(IE::Precision::FP32, IE::Precision::I32, IE::Precision::FP32);
- testFunc(IE::Precision::FP32, IE::Precision::I64, IE::Precision::FP32);
- testFunc(IE::Precision::FP32, IE::Precision::U64, IE::Precision::FP32);
- testFunc(IE::Precision::FP32, IE::Precision::FP16, IE::Precision::FP32);
- testFunc(IE::Precision::FP32, IE::Precision::FP32, IE::Precision::FP32);
- testFunc(IE::Precision::FP16, IE::Precision::FP32, IE::Precision::FP16);
- testFunc(IE::Precision::FP32, IE::Precision::FP16, IE::Precision::FP16);
-}
-
-TEST_F(AdvancedShapeInferTests, AddWithScalarConstInferTest) {
-
- auto testFunc = [&](IE::Precision precisionInData1, IE::Precision precisionInData2, IE::Precision precisionOutData) {
-
- netBuilder = NetBuilder();
- net = netBuilder
- .data("data1", IE::TensorDesc(precisionInData1, IE::SizeVector{2, 2}, IE::Layout::NC))
- .data("data2", IE::TensorDesc(precisionInData2, IE::Layout::SCALAR))
- .data("data3", IE::TensorDesc(precisionOutData, IE::SizeVector{2, 2},IE::Layout::NC))
- .layer<IE::CNNLayer>(IE::LayerParams{"addLayer", "Eltwise", IE::Precision::UNSPECIFIED})
- .layer<IE::CNNLayer>(IE::LayerParams{"input1", "Const", precisionInData1})
- .layer<IE::CNNLayer>(IE::LayerParams{"input2", "Const", precisionInData2})
- .linkToData("input1", "data1")
- .linkToData("input2", "data2")
- .linkDataTo("data1", "addLayer")
- .linkDataTo("data2", "addLayer")
- .linkToData("addLayer", "data3")
- .addInput("data1")
- .addInput("data2")
- .finalize();
-
- getLayer("addLayer")->params = {
- {"operation", "sum"}
- };
-
- IE::CNNNetwork cnnNetwork(net);
- initConstLayersDiffPrec({"input1", "input2"});
- float ref[] = {4, 5, 6, 7};
- if (precisionOutData == IE::Precision::FP16) {
- for (int i = 0; i < 4; i++)
- ref[i] = IE::PrecisionUtils::f32tof16(ref[i]);
- }
- IE::ConstTransformer transformator(net.get());
- transformator.foldConstSubgraphs();
- switch(precisionOutData) {
- case IE::Precision::U8: {
- InferenceEngine::CNNLayerPtr layer;
- ASSERT_EQ(InferenceEngine::OK, net->getLayerByName("addLayer__data3__Const", layer, nullptr));
- auto *l = layer->blobs.at("custom")->cbuffer().as<uint8_t *>();
- ASSERT_EQ(l[0], ref[0]);
- ASSERT_EQ(l[1], ref[1]);
- ASSERT_EQ(l[2], ref[2]);
- ASSERT_EQ(l[3], ref[3]);
- break;
- }
- case IE::Precision::I32: {
- InferenceEngine::CNNLayerPtr layer;
- ASSERT_EQ(InferenceEngine::OK, net->getLayerByName("addLayer__data3__Const", layer, nullptr));
- auto *l = layer->blobs.at("custom")->cbuffer().as<int *>();
- ASSERT_EQ(l[0], ref[0]);
- ASSERT_EQ(l[1], ref[1]);
- ASSERT_EQ(l[2], ref[2]);
- ASSERT_EQ(l[3], ref[3]);
- break;
- }
- case IE::Precision::I64: {
- InferenceEngine::CNNLayerPtr layer;
- ASSERT_EQ(InferenceEngine::OK, net->getLayerByName("addLayer__data3__Const", layer, nullptr));
- auto *l = layer->blobs.at("custom")->cbuffer().as<long long int *>();
- ASSERT_EQ(l[0], ref[0]);
- ASSERT_EQ(l[1], ref[1]);
- ASSERT_EQ(l[2], ref[2]);
- ASSERT_EQ(l[3], ref[3]);
- break;
- }
- case IE::Precision::U64: {
- InferenceEngine::CNNLayerPtr layer;
- ASSERT_EQ(InferenceEngine::OK, net->getLayerByName("addLayer__data3__Const", layer, nullptr));
- auto *l = layer->blobs.at("custom")->cbuffer().as<unsigned long long int *>();
- ASSERT_EQ(l[0], ref[0]);
- ASSERT_EQ(l[1], ref[1]);
- ASSERT_EQ(l[2], ref[2]);
- ASSERT_EQ(l[3], ref[3]);
- break;
- }
- case IE::Precision::FP16: {
- InferenceEngine::CNNLayerPtr layer;
- ASSERT_EQ(InferenceEngine::OK, net->getLayerByName("addLayer__data3__Const", layer, nullptr));
- auto *l = layer->blobs.at("custom")->cbuffer().as<IE::ie_fp16 *>();
- ASSERT_EQ(l[0], ref[0]);
- ASSERT_EQ(l[1], ref[1]);
- ASSERT_EQ(l[2], ref[2]);
- ASSERT_EQ(l[3], ref[3]);
- break;
- }
- case IE::Precision::FP32: {
- InferenceEngine::CNNLayerPtr layer;
- ASSERT_EQ(InferenceEngine::OK, net->getLayerByName("addLayer__data3__Const", layer, nullptr));
- auto *l = layer->blobs.at("custom")->cbuffer().as<float *>();
- ASSERT_EQ(l[0], ref[0]);
- ASSERT_EQ(l[1], ref[1]);
- ASSERT_EQ(l[2], ref[2]);
- ASSERT_EQ(l[3], ref[3]);
- break;
- }
- default:
- THROW_IE_EXCEPTION << "Unsupported precision!";
- }
- };
-
- testFunc(IE::Precision::U8, IE::Precision::U8, IE::Precision::U8);
- testFunc(IE::Precision::U8, IE::Precision::I32, IE::Precision::I32);
- testFunc(IE::Precision::U8, IE::Precision::I64, IE::Precision::I64);
- testFunc(IE::Precision::U8, IE::Precision::U64, IE::Precision::U64);
- testFunc(IE::Precision::U8, IE::Precision::FP16, IE::Precision::FP16);
- testFunc(IE::Precision::U8, IE::Precision::FP32, IE::Precision::FP32);
- testFunc(IE::Precision::I32, IE::Precision::U8, IE::Precision::I32);
- testFunc(IE::Precision::I32, IE::Precision::I32, IE::Precision::I32);
- testFunc(IE::Precision::I32, IE::Precision::I64, IE::Precision::I64);
- testFunc(IE::Precision::I32, IE::Precision::U64, IE::Precision::U64);
- testFunc(IE::Precision::I32, IE::Precision::FP16, IE::Precision::FP32);
- testFunc(IE::Precision::I32, IE::Precision::FP32, IE::Precision::FP32);
- testFunc(IE::Precision::I64, IE::Precision::U8, IE::Precision::I64);
- testFunc(IE::Precision::I64, IE::Precision::I32, IE::Precision::I64);
- testFunc(IE::Precision::I64, IE::Precision::I64, IE::Precision::I64);
- testFunc(IE::Precision::I64, IE::Precision::FP16, IE::Precision::FP32);
- testFunc(IE::Precision::I64, IE::Precision::FP32, IE::Precision::FP32);
- testFunc(IE::Precision::U64, IE::Precision::U8, IE::Precision::U64);
- testFunc(IE::Precision::U64, IE::Precision::I32, IE::Precision::U64);
- testFunc(IE::Precision::U64, IE::Precision::U64, IE::Precision::U64);
- testFunc(IE::Precision::U64, IE::Precision::FP16, IE::Precision::FP32);
- testFunc(IE::Precision::U64, IE::Precision::FP32, IE::Precision::FP32);
- testFunc(IE::Precision::FP16, IE::Precision::U8, IE::Precision::FP16);
- testFunc(IE::Precision::FP16, IE::Precision::I32, IE::Precision::FP32);
- testFunc(IE::Precision::FP16, IE::Precision::I64, IE::Precision::FP32);
- testFunc(IE::Precision::FP16, IE::Precision::U64, IE::Precision::FP32);
- testFunc(IE::Precision::FP16, IE::Precision::FP16, IE::Precision::FP16);
- testFunc(IE::Precision::FP16, IE::Precision::FP32, IE::Precision::FP32);
- testFunc(IE::Precision::FP32, IE::Precision::U8, IE::Precision::FP32);
- testFunc(IE::Precision::FP32, IE::Precision::I32, IE::Precision::FP32);
- testFunc(IE::Precision::FP32, IE::Precision::I64, IE::Precision::FP32);
- testFunc(IE::Precision::FP32, IE::Precision::U64, IE::Precision::FP32);
- testFunc(IE::Precision::FP32, IE::Precision::FP16, IE::Precision::FP32);
- testFunc(IE::Precision::FP32, IE::Precision::FP32, IE::Precision::FP32);
- testFunc(IE::Precision::FP16, IE::Precision::FP32, IE::Precision::FP16);
- testFunc(IE::Precision::FP32, IE::Precision::FP16, IE::Precision::FP16);
-}
-
-TEST_F(AdvancedShapeInferTests, AddWithTensorConstInferTest) {
-
- auto testFunc = [&](IE::Precision precisionInData1, IE::Precision precisionInData2, IE::Precision precisionOutData) {
-
- netBuilder = NetBuilder();
- net = netBuilder
- .data("data1", IE::TensorDesc(precisionInData1, IE::SizeVector{2, 2}, IE::Layout::NC))
- .data("data2", IE::TensorDesc(precisionInData2, IE::SizeVector{2, 2}, IE::Layout::NC))
- .data("data3", IE::TensorDesc(precisionOutData, IE::SizeVector{2, 2}, IE::Layout::NC))
- .layer<IE::CNNLayer>(IE::LayerParams{"addLayer", "Eltwise", IE::Precision::UNSPECIFIED})
- .layer<IE::CNNLayer>(IE::LayerParams{"input1", "Const", precisionInData1})
- .layer<IE::CNNLayer>(IE::LayerParams{"input2", "Const", precisionInData2})
- .linkToData("input1", "data1")
- .linkToData("input2", "data2")
- .linkDataTo("data1", "addLayer")
- .linkDataTo("data2", "addLayer")
- .linkToData("addLayer", "data3")
- .addInput("data1")
- .addInput("data2")
- .finalize();
-
- getLayer("addLayer")->params = {
- {"operation", "sum"}
- };
-
- IE::CNNNetwork cnnNetwork(net);
- initConstLayersDiffPrec({"input1", "input2"});
- float ref[] = {4, 6, 8, 10};
- if (precisionOutData == IE::Precision::FP16) {
- for (int i = 0; i < 4; i++)
- ref[i] = IE::PrecisionUtils::f32tof16(ref[i]);
- }
- IE::ConstTransformer transformator(net.get());
- transformator.foldConstSubgraphs();
- switch(precisionOutData) {
- case IE::Precision::U8: {
- InferenceEngine::CNNLayerPtr layer;
- ASSERT_EQ(InferenceEngine::OK, net->getLayerByName("addLayer__data3__Const", layer, nullptr));
- auto *l = layer->blobs.at("custom")->cbuffer().as<uint8_t *>();
- ASSERT_EQ(l[0], ref[0]);
- ASSERT_EQ(l[1], ref[1]);
- ASSERT_EQ(l[2], ref[2]);
- ASSERT_EQ(l[3], ref[3]);
- break;
- }
- case IE::Precision::I32: {
- InferenceEngine::CNNLayerPtr layer;
- ASSERT_EQ(InferenceEngine::OK, net->getLayerByName("addLayer__data3__Const", layer, nullptr));
- auto *l = layer->blobs.at("custom")->cbuffer().as<int *>();
- ASSERT_EQ(l[0], ref[0]);
- ASSERT_EQ(l[1], ref[1]);
- ASSERT_EQ(l[2], ref[2]);
- ASSERT_EQ(l[3], ref[3]);
- break;
- }
- case IE::Precision::I64: {
- InferenceEngine::CNNLayerPtr layer;
- ASSERT_EQ(InferenceEngine::OK, net->getLayerByName("addLayer__data3__Const", layer, nullptr));
- auto *l = layer->blobs.at("custom")->cbuffer().as<long long int *>();
- ASSERT_EQ(l[0], ref[0]);
- ASSERT_EQ(l[1], ref[1]);
- ASSERT_EQ(l[2], ref[2]);
- ASSERT_EQ(l[3], ref[3]);
- break;
- }
- case IE::Precision::U64: {
- InferenceEngine::CNNLayerPtr layer;
- ASSERT_EQ(InferenceEngine::OK, net->getLayerByName("addLayer__data3__Const", layer, nullptr));
- auto *l = layer->blobs.at("custom")->cbuffer().as<unsigned long long int *>();
- ASSERT_EQ(l[0], ref[0]);
- ASSERT_EQ(l[1], ref[1]);
- ASSERT_EQ(l[2], ref[2]);
- ASSERT_EQ(l[3], ref[3]);
- break;
- }
- case IE::Precision::FP16: {
- InferenceEngine::CNNLayerPtr layer;
- ASSERT_EQ(InferenceEngine::OK, net->getLayerByName("addLayer__data3__Const", layer, nullptr));
- auto *l = layer->blobs.at("custom")->cbuffer().as<IE::ie_fp16 *>();
- ASSERT_EQ(l[0], ref[0]);
- ASSERT_EQ(l[1], ref[1]);
- ASSERT_EQ(l[2], ref[2]);
- ASSERT_EQ(l[3], ref[3]);
- break;
- }
- case IE::Precision::FP32: {
- InferenceEngine::CNNLayerPtr layer;
- ASSERT_EQ(InferenceEngine::OK, net->getLayerByName("addLayer__data3__Const", layer, nullptr));
- auto *l = layer->blobs.at("custom")->cbuffer().as<float *>();
- ASSERT_EQ(l[0], ref[0]);
- ASSERT_EQ(l[1], ref[1]);
- ASSERT_EQ(l[2], ref[2]);
- ASSERT_EQ(l[3], ref[3]);
- break;
- }
- default:
- THROW_IE_EXCEPTION << "Unsupported precision!";
- }
- };
-
- testFunc(IE::Precision::U8, IE::Precision::U8, IE::Precision::U8);
- testFunc(IE::Precision::U8, IE::Precision::I32, IE::Precision::I32);
- testFunc(IE::Precision::U8, IE::Precision::I64, IE::Precision::I64);
- testFunc(IE::Precision::U8, IE::Precision::U64, IE::Precision::U64);
- testFunc(IE::Precision::U8, IE::Precision::FP16, IE::Precision::FP16);
- testFunc(IE::Precision::U8, IE::Precision::FP32, IE::Precision::FP32);
- testFunc(IE::Precision::I32, IE::Precision::U8, IE::Precision::I32);
- testFunc(IE::Precision::I32, IE::Precision::I32, IE::Precision::I32);
- testFunc(IE::Precision::I32, IE::Precision::I64, IE::Precision::I64);
- testFunc(IE::Precision::I32, IE::Precision::U64, IE::Precision::U64);
- testFunc(IE::Precision::I32, IE::Precision::FP16, IE::Precision::FP32);
- testFunc(IE::Precision::I32, IE::Precision::FP32, IE::Precision::FP32);
- testFunc(IE::Precision::I64, IE::Precision::U8, IE::Precision::I64);
- testFunc(IE::Precision::I64, IE::Precision::I32, IE::Precision::I64);
- testFunc(IE::Precision::I64, IE::Precision::I64, IE::Precision::I64);
- testFunc(IE::Precision::I64, IE::Precision::FP16, IE::Precision::FP32);
- testFunc(IE::Precision::I64, IE::Precision::FP32, IE::Precision::FP32);
- testFunc(IE::Precision::U64, IE::Precision::U8, IE::Precision::U64);
- testFunc(IE::Precision::U64, IE::Precision::I32, IE::Precision::U64);
- testFunc(IE::Precision::U64, IE::Precision::U64, IE::Precision::U64);
- testFunc(IE::Precision::U64, IE::Precision::FP16, IE::Precision::FP32);
- testFunc(IE::Precision::U64, IE::Precision::FP32, IE::Precision::FP32);
- testFunc(IE::Precision::FP16, IE::Precision::U8, IE::Precision::FP16);
- testFunc(IE::Precision::FP16, IE::Precision::I32, IE::Precision::FP32);
- testFunc(IE::Precision::FP16, IE::Precision::I64, IE::Precision::FP32);
- testFunc(IE::Precision::FP16, IE::Precision::U64, IE::Precision::FP32);
- testFunc(IE::Precision::FP16, IE::Precision::FP16, IE::Precision::FP16);
- testFunc(IE::Precision::FP16, IE::Precision::FP32, IE::Precision::FP32);
- testFunc(IE::Precision::FP32, IE::Precision::U8, IE::Precision::FP32);
- testFunc(IE::Precision::FP32, IE::Precision::I32, IE::Precision::FP32);
- testFunc(IE::Precision::FP32, IE::Precision::I64, IE::Precision::FP32);
- testFunc(IE::Precision::FP32, IE::Precision::U64, IE::Precision::FP32);
- testFunc(IE::Precision::FP32, IE::Precision::FP16, IE::Precision::FP32);
- testFunc(IE::Precision::FP32, IE::Precision::FP32, IE::Precision::FP32);
- testFunc(IE::Precision::FP16, IE::Precision::FP32, IE::Precision::FP16);
- testFunc(IE::Precision::FP32, IE::Precision::FP16, IE::Precision::FP16);
-}
-
-TEST_F(AdvancedShapeInferTests, AddWithBroadcastingConstInferTest) {
-
- auto testFunc = [&](IE::Precision precisionInData1, IE::Precision precisionInData2, IE::Precision precisionOutData) {
-
- netBuilder = NetBuilder();
- net = netBuilder
- .data("data1", IE::TensorDesc(precisionInData1, IE::SizeVector{2, 2}, IE::Layout::NC))
- .data("data2", IE::TensorDesc(precisionInData2, IE::SizeVector{2, 1}, IE::Layout::NC))
- .data("data3", IE::TensorDesc(precisionOutData, IE::SizeVector{2, 2}, IE::Layout::NC))
- .layer<IE::CNNLayer>(IE::LayerParams{"addLayer", "Eltwise", IE::Precision::UNSPECIFIED})
- .layer<IE::CNNLayer>(IE::LayerParams{"input1", "Const", precisionInData1})
- .layer<IE::CNNLayer>(IE::LayerParams{"input2", "Const", precisionInData2})
- .linkToData("input1", "data1")
- .linkToData("input2", "data2")
- .linkDataTo("data1", "addLayer")
- .linkDataTo("data2", "addLayer")
- .linkToData("addLayer", "data3")
- .addInput("data1")
- .addInput("data2")
- .finalize();
-
- getLayer("addLayer")->params = {
- {"operation", "sum"}
- };
-
- IE::CNNNetwork cnnNetwork(net);
- initConstLayersDiffPrec({"input1", "input2"});
- float ref[] = {4, 5, 7, 8};
- if (precisionOutData == IE::Precision::FP16) {
- for (int i = 0; i < 4; i++)
- ref[i] = IE::PrecisionUtils::f32tof16(ref[i]);
- }
- IE::ConstTransformer transformator(net.get());
- transformator.foldConstSubgraphs();
- switch(precisionOutData) {
- case IE::Precision::U8: {
- InferenceEngine::CNNLayerPtr layer;
- ASSERT_EQ(InferenceEngine::OK, net->getLayerByName("addLayer__data3__Const", layer, nullptr));
- auto *l = layer->blobs.at("custom")->cbuffer().as<uint8_t *>();
- ASSERT_EQ(l[0], ref[0]);
- ASSERT_EQ(l[1], ref[1]);
- ASSERT_EQ(l[2], ref[2]);
- ASSERT_EQ(l[3], ref[3]);
- break;
- }
- case IE::Precision::I32: {
- InferenceEngine::CNNLayerPtr layer;
- ASSERT_EQ(InferenceEngine::OK, net->getLayerByName("addLayer__data3__Const", layer, nullptr));
- auto *l = layer->blobs.at("custom")->cbuffer().as<int *>();
- ASSERT_EQ(l[0], ref[0]);
- ASSERT_EQ(l[1], ref[1]);
- ASSERT_EQ(l[2], ref[2]);
- ASSERT_EQ(l[3], ref[3]);
- break;
- }
- case IE::Precision::I64: {
- InferenceEngine::CNNLayerPtr layer;
- ASSERT_EQ(InferenceEngine::OK, net->getLayerByName("addLayer__data3__Const", layer, nullptr));
- auto *l = layer->blobs.at("custom")->cbuffer().as<long long int *>();
- ASSERT_EQ(l[0], ref[0]);
- ASSERT_EQ(l[1], ref[1]);
- ASSERT_EQ(l[2], ref[2]);
- ASSERT_EQ(l[3], ref[3]);
- break;
- }
- case IE::Precision::U64: {
- InferenceEngine::CNNLayerPtr layer;
- ASSERT_EQ(InferenceEngine::OK, net->getLayerByName("addLayer__data3__Const", layer, nullptr));
- auto *l = layer->blobs.at("custom")->cbuffer().as<unsigned long long int *>();
- ASSERT_EQ(l[0], ref[0]);
- ASSERT_EQ(l[1], ref[1]);
- ASSERT_EQ(l[2], ref[2]);
- ASSERT_EQ(l[3], ref[3]);
- break;
- }
- case IE::Precision::FP16: {
- InferenceEngine::CNNLayerPtr layer;
- ASSERT_EQ(InferenceEngine::OK, net->getLayerByName("addLayer__data3__Const", layer, nullptr));
- auto *l = layer->blobs.at("custom")->cbuffer().as<IE::ie_fp16 *>();
- ASSERT_EQ(l[0], ref[0]);
- ASSERT_EQ(l[1], ref[1]);
- ASSERT_EQ(l[2], ref[2]);
- ASSERT_EQ(l[3], ref[3]);
- break;
- }
- case IE::Precision::FP32: {
- InferenceEngine::CNNLayerPtr layer;
- ASSERT_EQ(InferenceEngine::OK, net->getLayerByName("addLayer__data3__Const", layer, nullptr));
- auto *l = layer->blobs.at("custom")->cbuffer().as<float *>();
- ASSERT_EQ(l[0], ref[0]);
- ASSERT_EQ(l[1], ref[1]);
- ASSERT_EQ(l[2], ref[2]);
- ASSERT_EQ(l[3], ref[3]);
- break;
- }
- default:
- THROW_IE_EXCEPTION << "Unsupported precision!";
- }
- };
-
- testFunc(IE::Precision::U8, IE::Precision::U8, IE::Precision::U8);
- testFunc(IE::Precision::U8, IE::Precision::I32, IE::Precision::I32);
- testFunc(IE::Precision::U8, IE::Precision::I64, IE::Precision::I64);
- testFunc(IE::Precision::U8, IE::Precision::U64, IE::Precision::U64);
- testFunc(IE::Precision::U8, IE::Precision::FP16, IE::Precision::FP16);
- testFunc(IE::Precision::U8, IE::Precision::FP32, IE::Precision::FP32);
- testFunc(IE::Precision::I32, IE::Precision::U8, IE::Precision::I32);
- testFunc(IE::Precision::I32, IE::Precision::I32, IE::Precision::I32);
- testFunc(IE::Precision::I32, IE::Precision::I64, IE::Precision::I64);
- testFunc(IE::Precision::I32, IE::Precision::U64, IE::Precision::U64);
- testFunc(IE::Precision::I32, IE::Precision::FP16, IE::Precision::FP32);
- testFunc(IE::Precision::I32, IE::Precision::FP32, IE::Precision::FP32);
- testFunc(IE::Precision::I64, IE::Precision::U8, IE::Precision::I64);
- testFunc(IE::Precision::I64, IE::Precision::I32, IE::Precision::I64);
- testFunc(IE::Precision::I64, IE::Precision::I64, IE::Precision::I64);
- testFunc(IE::Precision::I64, IE::Precision::FP16, IE::Precision::FP32);
- testFunc(IE::Precision::I64, IE::Precision::FP32, IE::Precision::FP32);
- testFunc(IE::Precision::U64, IE::Precision::U8, IE::Precision::U64);
- testFunc(IE::Precision::U64, IE::Precision::I32, IE::Precision::U64);
- testFunc(IE::Precision::U64, IE::Precision::U64, IE::Precision::U64);
- testFunc(IE::Precision::U64, IE::Precision::FP16, IE::Precision::FP32);
- testFunc(IE::Precision::U64, IE::Precision::FP32, IE::Precision::FP32);
- testFunc(IE::Precision::FP16, IE::Precision::U8, IE::Precision::FP16);
- testFunc(IE::Precision::FP16, IE::Precision::I32, IE::Precision::FP32);
- testFunc(IE::Precision::FP16, IE::Precision::I64, IE::Precision::FP32);
- testFunc(IE::Precision::FP16, IE::Precision::U64, IE::Precision::FP32);
- testFunc(IE::Precision::FP16, IE::Precision::FP16, IE::Precision::FP16);
- testFunc(IE::Precision::FP16, IE::Precision::FP32, IE::Precision::FP32);
- testFunc(IE::Precision::FP32, IE::Precision::U8, IE::Precision::FP32);
- testFunc(IE::Precision::FP32, IE::Precision::I32, IE::Precision::FP32);
- testFunc(IE::Precision::FP32, IE::Precision::I64, IE::Precision::FP32);
- testFunc(IE::Precision::FP32, IE::Precision::U64, IE::Precision::FP32);
- testFunc(IE::Precision::FP32, IE::Precision::FP16, IE::Precision::FP32);
- testFunc(IE::Precision::FP32, IE::Precision::FP32, IE::Precision::FP32);
- testFunc(IE::Precision::FP16, IE::Precision::FP32, IE::Precision::FP16);
- testFunc(IE::Precision::FP32, IE::Precision::FP16, IE::Precision::FP16);
-}
-
-TEST_F(AdvancedShapeInferTests, MulWithBroadcastingConstInferTest) {
-
- auto testFunc = [&](IE::Precision precisionInData1, IE::Precision precisionInData2, IE::Precision precisionOutData) {
-
- netBuilder = NetBuilder();
- net = netBuilder
- .data("data1", IE::TensorDesc(precisionInData1, IE::SizeVector{ 2, 2 }, IE::Layout::NC))
- .data("data2", IE::TensorDesc(precisionInData2, IE::SizeVector{ 2, 1 }, IE::Layout::NC))
- .data("data3", IE::TensorDesc(precisionOutData, IE::SizeVector{ 2, 2 }, IE::Layout::NC))
- .layer<IE::CNNLayer>(IE::LayerParams{"mulLayer", "Eltwise", IE::Precision::UNSPECIFIED})
- .layer<IE::CNNLayer>(IE::LayerParams{"input1", "Const", precisionInData1})
- .layer<IE::CNNLayer>(IE::LayerParams{"input2", "Const", precisionInData2})
- .linkToData("input1", "data1")
- .linkToData("input2", "data2")
- .linkDataTo("data1", "mulLayer")
- .linkDataTo("data2", "mulLayer")
- .linkToData("mulLayer", "data3")
- .addInput("data1")
- .addInput("data2")
- .finalize();
-
- getLayer("mulLayer")->params = {
- {"operation", "mul"}
- };
-
- IE::CNNNetwork cnnNetwork(net);
- initConstLayersDiffPrec({"input1", "input2"});
- float ref[] = {4, 6, 12, 15};
- if (precisionOutData == IE::Precision::FP16) {
- for (int i = 0; i < 4; i++)
- ref[i] = IE::PrecisionUtils::f32tof16(ref[i]);
- }
- IE::ConstTransformer transformator(net.get());
- transformator.foldConstSubgraphs();
- switch(precisionOutData) {
- case IE::Precision::U8: {
- InferenceEngine::CNNLayerPtr layer;
- ASSERT_EQ(InferenceEngine::OK, net->getLayerByName("mulLayer__data3__Const", layer, nullptr));
- auto *l = layer->blobs.at("custom")->cbuffer().as<uint8_t *>();
- ASSERT_EQ(l[0], ref[0]);
- ASSERT_EQ(l[1], ref[1]);
- ASSERT_EQ(l[2], ref[2]);
- ASSERT_EQ(l[3], ref[3]);
- break;
- }
- case IE::Precision::I32: {
- InferenceEngine::CNNLayerPtr layer;
- ASSERT_EQ(InferenceEngine::OK, net->getLayerByName("mulLayer__data3__Const", layer, nullptr));
- auto *l = layer->blobs.at("custom")->cbuffer().as<int *>();
- ASSERT_EQ(l[0], ref[0]);
- ASSERT_EQ(l[1], ref[1]);
- ASSERT_EQ(l[2], ref[2]);
- ASSERT_EQ(l[3], ref[3]);
- break;
- }
- case IE::Precision::I64: {
- InferenceEngine::CNNLayerPtr layer;
- ASSERT_EQ(InferenceEngine::OK, net->getLayerByName("mulLayer__data3__Const", layer, nullptr));
- auto *l = layer->blobs.at("custom")->cbuffer().as<long long int *>();
- ASSERT_EQ(l[0], ref[0]);
- ASSERT_EQ(l[1], ref[1]);
- ASSERT_EQ(l[2], ref[2]);
- ASSERT_EQ(l[3], ref[3]);
- break;
- }
- case IE::Precision::U64: {
- InferenceEngine::CNNLayerPtr layer;
- ASSERT_EQ(InferenceEngine::OK, net->getLayerByName("mulLayer__data3__Const", layer, nullptr));
- auto *l = layer->blobs.at("custom")->cbuffer().as<unsigned long long int *>();
- ASSERT_EQ(l[0], ref[0]);
- ASSERT_EQ(l[1], ref[1]);
- ASSERT_EQ(l[2], ref[2]);
- ASSERT_EQ(l[3], ref[3]);
- break;
- }
- case IE::Precision::FP16: {
- InferenceEngine::CNNLayerPtr layer;
- ASSERT_EQ(InferenceEngine::OK, net->getLayerByName("mulLayer__data3__Const", layer, nullptr));
- auto *l = layer->blobs.at("custom")->cbuffer().as<IE::ie_fp16 *>();
- ASSERT_EQ(l[0], ref[0]);
- ASSERT_EQ(l[1], ref[1]);
- ASSERT_EQ(l[2], ref[2]);
- ASSERT_EQ(l[3], ref[3]);
- break;
- }
- case IE::Precision::FP32: {
- InferenceEngine::CNNLayerPtr layer;
- ASSERT_EQ(InferenceEngine::OK, net->getLayerByName("mulLayer__data3__Const", layer, nullptr));
- auto *l = layer->blobs.at("custom")->cbuffer().as<float *>();
- ASSERT_EQ(l[0], ref[0]);
- ASSERT_EQ(l[1], ref[1]);
- ASSERT_EQ(l[2], ref[2]);
- ASSERT_EQ(l[3], ref[3]);
- break;
- }
- default:
- THROW_IE_EXCEPTION << "Unsupported precision!";
- }
- };
-
- testFunc(IE::Precision::U8, IE::Precision::U8, IE::Precision::U8);
- testFunc(IE::Precision::U8, IE::Precision::I32, IE::Precision::I32);
- testFunc(IE::Precision::U8, IE::Precision::I64, IE::Precision::I64);
- testFunc(IE::Precision::U8, IE::Precision::U64, IE::Precision::U64);
- testFunc(IE::Precision::U8, IE::Precision::FP16, IE::Precision::FP16);
- testFunc(IE::Precision::U8, IE::Precision::FP32, IE::Precision::FP32);
- testFunc(IE::Precision::I32, IE::Precision::U8, IE::Precision::I32);
- testFunc(IE::Precision::I32, IE::Precision::I32, IE::Precision::I32);
- testFunc(IE::Precision::I32, IE::Precision::I64, IE::Precision::I64);
- testFunc(IE::Precision::I32, IE::Precision::U64, IE::Precision::U64);
- testFunc(IE::Precision::I32, IE::Precision::FP16, IE::Precision::FP32);
- testFunc(IE::Precision::I32, IE::Precision::FP32, IE::Precision::FP32);
- testFunc(IE::Precision::I64, IE::Precision::U8, IE::Precision::I64);
- testFunc(IE::Precision::I64, IE::Precision::I32, IE::Precision::I64);
- testFunc(IE::Precision::I64, IE::Precision::I64, IE::Precision::I64);
- testFunc(IE::Precision::I64, IE::Precision::FP16, IE::Precision::FP32);
- testFunc(IE::Precision::I64, IE::Precision::FP32, IE::Precision::FP32);
- testFunc(IE::Precision::U64, IE::Precision::U8, IE::Precision::U64);
- testFunc(IE::Precision::U64, IE::Precision::I32, IE::Precision::U64);
- testFunc(IE::Precision::U64, IE::Precision::U64, IE::Precision::U64);
- testFunc(IE::Precision::U64, IE::Precision::FP16, IE::Precision::FP32);
- testFunc(IE::Precision::U64, IE::Precision::FP32, IE::Precision::FP32);
- testFunc(IE::Precision::FP16, IE::Precision::U8, IE::Precision::FP16);
- testFunc(IE::Precision::FP16, IE::Precision::I32, IE::Precision::FP32);
- testFunc(IE::Precision::FP16, IE::Precision::I64, IE::Precision::FP32);
- testFunc(IE::Precision::FP16, IE::Precision::U64, IE::Precision::FP32);
- testFunc(IE::Precision::FP16, IE::Precision::FP16, IE::Precision::FP16);
- testFunc(IE::Precision::FP16, IE::Precision::FP32, IE::Precision::FP32);
- testFunc(IE::Precision::FP32, IE::Precision::U8, IE::Precision::FP32);
- testFunc(IE::Precision::FP32, IE::Precision::I32, IE::Precision::FP32);
- testFunc(IE::Precision::FP32, IE::Precision::I64, IE::Precision::FP32);
- testFunc(IE::Precision::FP32, IE::Precision::U64, IE::Precision::FP32);
- testFunc(IE::Precision::FP32, IE::Precision::FP16, IE::Precision::FP32);
- testFunc(IE::Precision::FP32, IE::Precision::FP32, IE::Precision::FP32);
- testFunc(IE::Precision::FP16, IE::Precision::FP32, IE::Precision::FP16);
- testFunc(IE::Precision::FP32, IE::Precision::FP16, IE::Precision::FP16);
-}