У меня есть модульные тесты с использованием вызовов взаимодействия на dll с использованием opencv и cuda.
Модульные тесты (с использованием инфраструктуры Microsoft в VS 2017 enterprise) не проходят, потому что вызовы cuda в opencv не являются поточно-ориентированными или болеескорее всего многопроцессный сейф.Переключение на параллельные или непараллельные тесты не поможет;только когда я запускаю тесты по отдельности (щелкните правой кнопкой мыши, запустите тестирование), тесты выполняются успешно.
Как я могу сделать свои модульные тесты поточно-ориентированными?Или, скорее, многопроцессорность безопасна?
В нативном коде я высвобождаю ресурсы cuda в конце вызовов функций.И сделал поток кода безопасным, но кажется, что требуется сделать его многопроцессным безопасным.
Я попытался использовать комбинацию private static object _lockObj = new object()
и lock(_obj) { //cuda-interop calls }
, но это не улучшит результаты.
Тип вывода при сбое теста:
в управляемой части: System.Runtime.InteropServices.SEHException: 'Problem with native part: <External component has thrown an exception.> Error code: 0x80004005 | Name: E_FAIL | Description: Unspecified failure'
в собственной части: opencv exception :OpenCV(4.0.1-dev) I:\opencv-master\opencv_contrib\modules\cudaoptflow\src\brox.cpp:124: error: (-217:Gpu API call) NCV Assertion Failed: cudaError_t=77, file=I:/opencv-master/opencv_contrib/modules/cudalegacy/src/cuda/NCVBroxOpticalFlow.cu, line=1017 in function 'anonymous-namespace::outputHandler'