【发布时间】:2016-07-09 13:12:18
【问题描述】:
我正在编写一个需要计算向量距离并执行的 Matlab 代码
X = norm(A(:,i)-B(:,j));
%do something with X
%loop over i and j
经常。这是一个相对较小的计算,所以它并不真正适合 parfor,所以我认为最好的想法是使用 gpu 函数来实现它。
我发现 pagefun 和 arrayfun 做的事情和我想要的一样,但是它们执行的是元素操作而不是向量。
所以我的问题是,有没有更聪明的方法来计算没有 for 循环的范数?或者如果我真的需要使用 gpu,最好的方法是什么?
【问题讨论】:
-
某事的标准是 4 次数学运算,它应该很快。如果他们很多,请尝试
gpuarray,正如你提到的那样。 -
请将带有循环的示例代码放入您的问题中,我的感觉是
pdist2或bsxfun在 CPU 上解决这个问题非常快,如果矢量化它。 -
我执行了数百万次,所以它变得很慢。 “代码”基本上是一些简单的操作,试图找出高维空间中的哪个点更接近另一个。根据配置文件查看器,这是最慢的部分
-
pdist2(A',B','euclidean','Smallest',k) 是迄今为止最快的解决方案(在 cpu 上),但它不在 gpu 上运行。有什么建议?我还在一个比我的真实数据集小得多的玩具数据集上对此进行测试,所以我不确定它是否真的更快。
-
见
this solution : Approach #3。它基于 matrix-mul,在 GPU 上必须非常快(内存允许)。
标签: matlab parallel-processing gpu