Как сделать модульные тесты c # потоком / многопроцессными безопасными для нативных вызовов cuda - PullRequest
1 голос
/ 01 апреля 2019

У меня есть модульные тесты с использованием вызовов взаимодействия на 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'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...