我正在编写一个需要计算向量距离的Matlab代码,我执行
X = norm(A(:,i)-B(:,j));
%do something with X
%loop over i and j
经常。这是一个相对较小的计算,因此它并不适合parfor,所以我认为最好的想法是用gpu函数实现它。
我发现pagefun和arrayfun做了我想要的事情,但是它们执行了元素操作而不是矢量。
所以我的问题是,是否有更聪明的方法来计算没有for循环的规范?或者如果我真的需要使用gpu,那么最好的方法是什么?
答案 0 :(得分:0)
如果您需要A和B的所有元素之间的标准,最快的方法可能就是:
N = 1000; % number of elements
dim = 3; % number of dimensions
A = rand(dim,N, 'gpuArray');
B = rand(dim,1,N, 'gpuArray');
C = sqrt(squeeze(sum(bsxfun(@minus, A, B).^2))); % C(i,j) norm
我在CPU上的执行时间为0.16秒,在GPU上的执行时间为0.13秒。