我正在使用CUDA加速的MATLAB编写仿真。
假设我们有向量x
和y
,矩阵A
和标量变量dt
,dx
,a
,{{1} },b
。
我发现,通过在运行迭代和内置函数之前将c
,x
,y
放入A
中,可以显着加速迭代
但是,当我尝试将gpuArray()
,dt
,dx
,a
,b
之类的变量放入c
时,程序将显着减慢30%以上的速度。 (时间从7s增加到11s)。
为什么将所有变量都放入gpuArray()
并不是一个好主意?
(简短的评论,这些标量与gpuArray()
,x
,y
相乘,并且从未在迭代中使用过。)
答案 0 :(得分:4)
GPU硬件经过优化,可处理相对大量的数据。当您可以为多个处理核心提供大量数据以保持它们繁忙时,您才真正看到GPU计算的好处。通常,这意味着您需要对数千或数百万个元素进行操作。
在处理标量时,GPU上启动操作的开销使计算时间相形见,,因此,它们比CPU上的速度慢也就不足为奇了。 (这不是MATLAB和gpuArray
所特有的。)