Параллельные вычисления на графическом процессоре с использованием OpenCV

У меня есть приложение, требующее параллельной обработки нескольких изображений для поддержания скорости в реальном времени.

Насколько я понимаю, я не могу вызывать функции графического процессора 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.

12
задан mmccullo 21 June 2012 в 15:25
поделиться