Насколько хороша библиотека графического процессора OpenCV для матричных операций?

Я использую OpenCV для приложения в области компьютерного зрения. Я хотел бы ускорить некоторые матричные операции, (матрицы довольно большие )на графическом процессоре, и хочу по возможности избежать кодирования непосредственно в CUDA C. OpenCV 2.4.1 имеет ряд функций с ускорением на GPU. Насколько хорошо они работают в вашем опыте? Мне лучше использовать другую библиотеку (, например. Толчок )вместо этого?

РЕДАКТИРОВАТЬ Образец заявления:Вычислить квадрат матрицы евклидовых расстояний на графическом процессоре . В настоящее время моя реализация с GPU-ускорением (и векторизацией )в Matlab с использованием Parallel Computing Toolbox (PCT )примерно в 5 -10 раз быстрее, чем моя реализация на C++ с OpenCV.

Реализация Matlab:

function K = sqEuclideanDist(P_cpu,Q_cpu)
% Vectorized method to compute pairwise squared Euclidean distance on GPU
% Returns K(i,j) = (P(i,:) - Q(j,:))'*(P(i,:) - Q(j,:))

P_gpu = gpuArray(P_cpu);
Q_gpu = gpuArray(Q_cpu);

[nP, d] = size(P_gpu);
[nQ, d] = size(Q_gpu);

pmag = sum(P_gpu.* P_gpu, 2);
qmag = sum(Q_gpu.* Q_gpu, 2);

% note that K is on GPU
K = ones(nP,1)*qmag' + pmag*ones(1,nQ) - 2*P_gpu*Q_gpu';

end

ОБНОВЛЕНИЕ Вот еще одна реализация Matlab, которая выполняет то же самое (благодаряhttps://stackoverflow.com/a/7774323/1121420). Но он работает только на процессоре, потому что bsxfunне поддерживается PCT. Тем не менее, все еще ищет альтернативу С++.

function K = sqEuclideanDist(P_cpu,Q_cpu)
% Returns K(i,j) = (P(i,:) - Q(j,:))'*(P(i,:) - Q(j,:))
% Runs on CPU only.

K = bsxfun(@plus,sum(p.^2,2),sum(q.^2,2)') - 2*(p*q');

end
7
задан Community 23 May 2017 в 10:30
поделиться