gpt4 book ai didi

matlab - 为什么 Arrayfun 在使用 GPU 时比 for 循环快得多?

转载 作者:太空宇宙 更新时间:2023-11-03 20:26:30 26 4
gpt4 key购买 nike

有人能说出为什么 Arrayfun 在 GPU 上比 for 循环快得多吗? (不是在 CPU 上,实际上 For 循环在 CPU 上更快)

数组函数:

x = parallel.gpu.GPUArray(rand(512,512,64));
count = arrayfun(@(x) x^2, x);

和等效的 For 循环:

for i=1:size(x,1)*size(x,2)*size(x,3)
z(i)=x(i).^2;
end

可能是因为 For 循环在 GPU 上不是多线程的?谢谢。

最佳答案

我不认为你的循环是等价的。您似乎在用您的CPU 实现 对数组中的每个元素求平方,但对arrayfun 执行某种计数。

无论如何,我认为您正在寻找的解释如下:

在 GPU 上运行时,您的代码可以按功能分解——在本例中为每个数组单元格——并分别平方。这没关系,因为对于给定的 i[cell_i]^2 的值不依赖于其他单元格中的任何其他值。最有可能发生的情况是数组被分解为 S 缓冲区,其中 S 是您的 GPU 拥有的流处理单元 的数量。然后每个单元计算其缓冲区每个单元格中数据的平方。将结果复制回原数组,返回count。

现在不用担心,如果您正在计算 *array_fun* 实际正在做的事情,那么类似的事情正在发生。该算法很可能将数组划分为类似的缓冲区,而不是对每个单元格进行平方,而是将值加在一起。您可以将第一步的结果视为一个较小的数组,可以递归地应用相同的过程来计算新的总和。

关于matlab - 为什么 Arrayfun 在使用 GPU 时比 for 循环快得多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10151033/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com