Укажите количество инструкций шейдера в классе OpenCV DNN с помощью OpenCL - PullRequest
2 голосов
/ 05 августа 2020

Мы используем класс cv::dnn::Net из OpenCV для обработки изображений.

Вот структура кода с указанием причины разрыва:

cv::dnn::Net NeuralNetwork;   
...
// This works fine since it keeps OpenCV code running on the CPU
// NeuralNetwork.setPreferableTarget(cv::dnn::DNN_TARGET_CPU);    
// This change leads to a segmentation fault since it allows OpenCV to use the GPU
NeuralNetwork.setPreferableTarget(cv::dnn::DNN_TARGET_OPENCL);
... 
// Segmentation fault occurs here
NeuralNetwork.forward(PredictedBoxesAndMasks, OutputLayerNames);

Ошибка:

В шейдере слишком много инструкций: 689 (максимум 512) Статус -1016: Неизвестная ошибка OpenCL Не удалось скомпилировать ядро: BASIC_k7x7_cn3_g3_s2x2_d1x1_b0_in256x256_p2x2_num1_M8_activ0_eltwise0_FP32_4_1_1_1 (длинный список определений OpenCL) errmsg: Ошибка сегментации

OpenCV распознает графический процессор и возвращает эту информацию:

Имя поставщика: Vivante Corporation Название: Vivante OpenCL Device GC2000.5108.0000 Версия драйвера: OpenCL 1.1 V6.2.4.p4.190076 в наличии: 1 Размер глобальной памяти: 67108864 Размер кеш-памяти: 4096 Тип кеш-памяти: 2 Размер локальной памяти: 1024 Тип локальной памяти: 2 Максимальная тактовая частота: 528

Вопрос:

Как мне ограничить количество инструкций, которые OpenCV / OpenCL пытается передать графическому процессору?

Я не видел, чтобы у других пользователей была эта специфическая c проблема. Я предполагаю, что запуск тяжелых нейронных сетей во встроенных системах не является популярным.

Спасибо за ваше время и помощь!

...