与大型数据集相比,GPU 在小型数据集上的兴趣并不鲜见。其原因会因具体算法而异。GPU 通常具有比 CPU 更高的主内存带宽,并且通常在重型数字运算方面也可以胜过它们。但是 GPU 通常只有在问题中存在固有的并行性时才能很好地工作,这可能会暴露出来。利用这种并行性,算法可以利用更大的内存带宽以及更高的计算能力。
然而,在 GPU 可以做任何事情之前,有必要将数据获取到 GPU。这对 GPU 版本的代码产生了“成本”,而这通常不会出现在 CPU 版本中。
更准确地说,当 GPU 上计算时间的减少(超过 CPU)超过数据传输的成本时,GPU 将提供好处。我相信求解线性方程组的复杂度介于 O(n^2) 和 O(n^3) 之间。对于非常小的 n,这种计算复杂度可能不足以抵消数据传输的成本。但显然随着 n 变大它应该。另一方面,您的向量运算可能只有 O(n) 复杂度。因此,收益情况看起来会有所不同。
对于 O(n^2) 或 O(n^3) 的情况,随着我们移动到更大的数据集,传输数据的“成本”随着 O(n) 的增加而增加,但解决方案的计算需求随着 O( n^2) (或 O(n^3))。因此,更大的数据集应该具有指数级更大的计算工作负载,从而降低数据传输“成本”的影响。另一方面,O(n) 问题可能不会有这种缩放动态。工作量的增加速度与数据传输的“成本”相同。
另请注意,如果将数据传输到 GPU 的“成本”可以通过将其与计算工作重叠来隐藏,那么重叠部分的“成本”将变为“免费”,即它不会影响整体求解时间。