У меня есть приложение, требующее параллельной обработки нескольких изображений для поддержания скорости в реальном времени.
Насколько я понимаю, я не могу вызывать функции графического процессора OpenCV в многопоточном режиме на одном устройстве CUDA. Я попробовал следующую конструкцию кода OpenMP:
#pragma omp parallel for
for(int i=0; i<numImages; i++){
for(int j=0; j<numChannels; j++){
for(int k=0; k<pyramidDepth; k++){
cv::gpu::multiply(pyramid[i][j][k], weightmap[i][k], pyramid[i][j][k]);
}
}
}
Похоже, что она компилируется и выполняется правильно, но, к сожалению, потоки numImages последовательно выполняются на одном и том же устройстве CUDA.
Я должен иметь возможность выполнять несколько потоков параллельно, если у меня несколько устройств CUDA, верно? Чтобы получить несколько устройств CUDA, нужно ли мне несколько видеокарт?
Кто-нибудь знает, работает ли двухчиповая карта nVidia GTX 690 как два независимых устройства CUDA с OpenCV 2.4 или более поздней версии? Я нашел подтверждение, что он может работать как таковой с OpenCL, но нет подтверждения в отношении OpenCV.