【发布时间】:2013-01-09 07:12:26
【问题描述】:
我编写了一个 CUDA C 和 C 程序,使用 CULA 例程 dgesv 和 MKL 例程 dgesv 求解矩阵方程 Ax=b。似乎对于一个小数据集,CPU 程序比 GPU 程序快。但是随着数据集增加到超过 500,GPU 克服了 CPU。我正在使用我的戴尔笔记本电脑,它有 i3 CPU 和 Geforce 525M GPU。对 GPU 最初性能缓慢的最佳解释是什么?
我编写了另一个程序,它接受两个向量,将它们相乘并相加。这就像点积一样,只是结果是向量和而不是标量。在这个程序中,即使对于小数据集,GPU 也比 CPU 快。我正在使用同一个笔记本。为什么与上面解释的相比,即使对于小数据集,该程序中的 GPU 也更快?是不是因为求和的计算量不大?
【问题讨论】:
-
通讯开销!为了加速,GPGPU 系统中的数据传输(以 PCI-E 带宽)开销不应成为应用程序的瓶颈。在小数据集中,不值得在 GPU 上移动小数据,因为计算量可以忽略不计。在这种情况下,内核启动和数据移动时间决定了导致性能下降的计算加速优势。
-
当 GPU 上的计算时间减少(超过 CPU)超过数据传输的成本时,GPU 将提供好处。我相信求解线性方程组是somewhere between O(n^2) and O(n^3) complexity。对于非常小的 n,这种计算复杂度可能不足以抵消数据传输的成本。但显然随着 n 变大它应该。另一方面,您的向量运算可能只有 O(n) 复杂度。因此,收益情况看起来会有所不同。
-
@RobertCrovella: dgesv 有一个 RHS 的模型 FLOP 计数通常取为0.67n^3。
-
感谢您的洞察力。解释清楚
-
@RobertCrovella:也许您可以将其添加为答案,以便将问题从未回答的列表中删除。