* zero-copy (assuming determenistic app-level scheduling) for the multi-device, via "borrowing" the corresponding device-specific blobs and letting the app to implicitly use these * Optimized Infer Request Scheduling * remoteblob checks in the conventional SetBlob * correctly (with status) reporting NOT_IMPLEMENTED * SetBlob to accomodate for the RemoteBobs * Tests for remote blobs support via MULTI: creating the shared_test in case the other (closed source) plugins would want to use that (in the private shared_tests instantiations). Also instantiating the remote blobs tests for the some basic combinations to test the MULTI supports them * macos compilation (and general plugin platform support) fix * shuffled files, so that the MULTI tests are now part of the ieFuncTests (and need no separate target). Also brushed the macro that handales the NOT_IMPLEMENTED as bit * further shuffled files, so that the initial MULTI tests are now part of the IE tests, yet specific instances do need separate targets * Fixed misprint * Brushing the code and comments a bit * further brushing of the ScheduleToWorkerRequest: moving the task execution directly into the loop over devices (avoids pointers and 'else' clause) * 1) zero-copy (assuming determenistic app-level scheduling) for the multi-device, via "borrowing" the corresponding device-specific blobs and letting the app to implicitly use these 2) Initial MULTI section in the opt guide (primarily to document a tip on helping the MULTI to keep the zero-copy path) * [MULTI] remote context support and associated scheduling (respecting the remote data affinity) * fix CentOS (old) gcc issue: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81880 since the intriduced therad_local string is template the bug manifests itself (and the string is not allocated/initialized). the QA is to wrap the std::string into the function * further fix for the old gcc versions issue, now with non-trivial thread_local destruction sefault: switching from the std::string to the plain const char* * additional tests for the MULTI and remote blobs (no remote context and multi GPUs cases) * fix for the tests (that now can check for more specific NotImplemented exeption). Alos couple of line endings
Inference Engine Test Infrastructure
This is OpenVINO Inference Engine testing framework. OpenVINO Inference Engine test system contains:
-
Unit tests
This test type is used for detailed testing of each software instance (including internal classes with their methods) within the tested modules (Inference Engine and Plugins). There are following rules which are required for Unit Tests development:-
All unit tests are separated into different executables per each tested module.
-
Unit test folder for a particular module should replicate
SRCfolder layout of the corresponding tested module to allow further developers get better understanding which part of software is already covered by unit tests and where to add new tests if needed.Example: We have
network_serializer.handnetwork_serializer.cppfiles within thesrcfolder of the tested Inference Engine module. Then, newnetwork_serializer_test.cppfile should be created within the root of the Unit Test folder for this module. This test file should cover all the classes and methods from the original files.Example: We have
ie_reshaper.cppwithin thesrc/shape_infersubfolder of the tested module. In this case newshape_infersubfolder should be created within the the root of the Unit Test folder for this module. And newie_reshaper_test.cppfile should be created within this newly created subfolder. This test file should cover all the classes and methods from the original file. -
Each Unit Test should cover the only target classes and methods. If needed, all external interface components should be mocked. There are common mock objects provided within the common Unit Test Utilities to stub the general Inference Engine API classes.
Example: We have
cnn_network_impl.hppandcnn_network_impl.cppfiles within thesrcfolder of the tested module. In this case, newcnn_network_impl_test.cppfile should be created and it should contain tests onCNNNetworkImplclass only. -
It's not prohibited to have several test files for the same file from the tested module.
-
It's not prohibited to create a separate test file for a specific classes or functions (not for the whole file).
-
-
Functional tests
This test type is used to verify public Inference Engine API. There are following types of functional tests:inference_engine_testsare plugin-independent tests. Used to verify Inference Engine API methods which don't involve any plugin runtime. E.g.network_reader,network_serializer,precisiontests.plugin_testsare plugin-dependent tests. These tests require plugin runtime to be executed during testing. E.g. any tests usingExecutableNetwork,InferRequestAPI can only be implemented within this test group.
Example: Any new test on creating of a CNNNetwork object and checking of its output info should be included to to the Inference Engine Functional tests suite. But any new test containing reading of a network and loading it to a specified plugin is always the plugin test.
There are following rules which are required for Functional Tests development:
-
All Functional tests are separated into different executables for the Inference Engine and each plugin.
-
Pre-converted IR files must not be used within the new Functional Tests. Tested models should be generated during the tests execution. The main method to generate a required model is building of the required NGraph function and creating of a CNNNetwork using it. If a required layer is not covered by Ngraph it's allowed to build IR file using
xml_net_builderutility (please refer to their_net.hppfile). IR XML files hardcoded as strings within the test code should not be used. -
All the plugin test cases are parametrized with (at least) the device name and included to the common
funcSharedTestsstatic library. This library is linked to the Plugin Test binaries. And all the plugin developers just add required test instantiations based on the linked test definitions to own test binary. It should be done to make all the shared test cases always visible and available to instantiate by other plugins.Note
: Any new plugin test case should be added to the common test definitions library (
funcSharedTests) within the DLDT repository first. And then this test case can be instantiated with the required parameters inside own plugin's test binary which links this shared tests library.Note
:
funcSharedTestslibrary is added to the developer package and available for closed source development. -
All the inference engine functional test cases are defined and instantiated within the single test binary. These test cases are not implemented as a separate library and not available for instantiations outside this binary.
-
Inference Engine tests utilities
The set of utilities which are used by the Inference Engine Functional and Unit tests. Different helper functions, blob comparators, OS specific constants, etc are implemented within the utilities.
Internal namespaces (for example,CommonTestUtils::,FuncTestUtils::orUnitTestUtils::) must be used to separate utilities by domains.Note
: All the utilities libraries are added to the developer package and available for closed source development.