简单的Matlab GPU

时间:2013-05-16 18:05:34

标签: matlab gpu

我正在尝试做我认为可以想象的最基本的GPU操作,在Matlab中,我似乎无法弄明白。

我有一个包含一百万个3D坐标的列表,我想从另一个点找到它们的距离。核心是平方和函数“getDist(a,b)”的简单平方根,其中a和b是3x1向量。

没有GPU,我可以像这样蛮力:

对于x = 1:1e6   d(x)= getDist(points(:,x),point) 端

如果我不介意浪费内存,我可以使用repmat反复重复我的单点,我认为这适用于GPU:

pointsGPU = gpuArray(points); pointGPS = gpuArray(repmat(point,1,1e6));

d = sqrt(sum((pointsGPU - pointGPU)。^ 2)));

这比在CPU上慢。我把它缩小到了这个问题。由于某种原因,^ 2在GPU上很慢。基本上,我把上面的线分成了单独的部分(减法,方形,和和sqrt。所有在GPU上都快了10倍,但是。^ 2比较慢。将数组乘以。*在CPU上占用相同的时间。 GPU。

我尝试使用arrayfun:

d = arrayfun(@(x)getDist(points(:,x),point),1:1e6)

但这会给GPU带来错误:“当前没有实现gpuArray输出类型”。我认为这意味着它希望GPU阵列在1:1e6的位置,而不是嵌入在函数中。我无法弄清楚如何以这种方式表达它,因为我想一次采用列,而不是单个元素。

这是可以解决的。如果不解决大规模并行几何问题,那么GPU是什么......感谢您的帮助。

0 个答案:

没有答案