将所有变量转换为 gpuArrays 不会加速计算
Converting all variables into gpuArrays doesn't speed up computation
我正在使用 MATLAB 编写仿真,其中我使用了 CUDA 加速。
假设我们有向量 x
和 y
、矩阵 A
和标量变量 dt
、dx
、a
、b
,c
.
我发现通过在 运行 迭代和内置函数之前将 x
、y
、A
放入 gpuArray()
,可以显着加快迭代速度。
但是,当我尝试将 dt
、dx
、a
、b
、c
等变量放入 gpuArray()
,该程序将显着减慢 30% 以上的速度。 (时间从7s增加到11s)。
为什么将所有变量都放入 gpuArray()
中不是一个好主意?
(简短的评论,这些标量与 x
、y
、A
相乘,并且在迭代期间从未单独使用过。)
GPU 硬件针对处理相对大量的数据进行了优化。只有当您可以为许多处理核心提供大量数据以使它们保持忙碌时,您才能真正看到 GPU 计算的好处。通常这意味着您需要对数千或数百万个元素进行操作。
处理标量时,在 GPU 上启动操作的开销使计算时间相形见绌,因此它们比 CPU 慢也就不足为奇了。 (这不是 MATLAB 特有的 & gpuArray
)。
我正在使用 MATLAB 编写仿真,其中我使用了 CUDA 加速。
假设我们有向量 x
和 y
、矩阵 A
和标量变量 dt
、dx
、a
、b
,c
.
我发现通过在 运行 迭代和内置函数之前将 x
、y
、A
放入 gpuArray()
,可以显着加快迭代速度。
但是,当我尝试将 dt
、dx
、a
、b
、c
等变量放入 gpuArray()
,该程序将显着减慢 30% 以上的速度。 (时间从7s增加到11s)。
为什么将所有变量都放入 gpuArray()
中不是一个好主意?
(简短的评论,这些标量与 x
、y
、A
相乘,并且在迭代期间从未单独使用过。)
GPU 硬件针对处理相对大量的数据进行了优化。只有当您可以为许多处理核心提供大量数据以使它们保持忙碌时,您才能真正看到 GPU 计算的好处。通常这意味着您需要对数千或数百万个元素进行操作。
处理标量时,在 GPU 上启动操作的开销使计算时间相形见绌,因此它们比 CPU 慢也就不足为奇了。 (这不是 MATLAB 特有的 & gpuArray
)。