我正在使用 MATLAB 编写仿真,其中使用了 CUDA 加速。
假设我们有向量x
和y
、矩阵A
和标量变量dt
、dx
、a
、b
、c
。
我发现,在运行之前将 x
,y
,A
放入 gpuArray()
迭代和内置函数,可以显着加速迭代。
但是,当我尝试输入诸如 dt
、dx
、a
、b
、c
到 gpuArray()
中,程序速度会显着减慢,速度会减慢 30% 以上。 (时间从7秒增加到11秒)。
为什么将所有变量放入 gpuArray()
中不是一个好主意?
(简短评论,这些标量与 x
、y
、A
相乘,并且在单独迭代期间从未使用过。)
最佳答案
GPU 硬件针对处理相对大量的数据进行了优化。只有当您可以向许多处理核心提供大量数据以使它们忙碌时,您才能真正看到 GPU 计算的好处。通常,这意味着您需要对数千或数百万个元素进行操作。
在处理标量时,在 GPU 上启动操作的开销会使计算时间相形见绌,因此它们比在 CPU 上慢也就不足为奇了。 (这并不是 MATLAB 和 gpuArray
特有的)。
关于matlab - 将所有变量转换为 gpuArrays 并不会加快计算速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52693980/