为什么numpy.dot和矩阵乘法的这些GPU实现一样快?

时间:2019-10-16 00:35:41

标签: performance numpy

根据下表(来自this paper),在使用np.dot矩阵进行的实验中,numpy的320x320性能可与CUDA实现的矩阵乘法相媲美。我确实以足够的精度在np.dot的计算机上复制了此Speedup。不过,他们使用Numba的CUDA代码运行起来要慢得多,其加速比约为1200,而不是报道的49258。

为什么numpy的实现如此之快?

https://link.springer.com/article/10.1007/s11227-017-2213-5

编辑:here是摘自本文的代码。我刚刚添加了timeit个调用。我在以下笔记本电脑上运行它。

enter image description here

2 个答案:

答案 0 :(得分:1)

除了what @norok2 links to之外,将数据传输到GPU的开销很大。在某些情况下,这变得很重要:

  • 与数据传输开销相比,与在GPU上执行的操作相比,它要昂贵得多,也就是说,您只对少于一MB的数据执行一次操作。
  • 问题的规模无法很好地解决。如果您的数据大小或潜在问题导致GPU无法充分利用其并行处理,就是这种情况。
  • 并行代码中的分支太多。这通常意味着大量的并行处理器需要在每个分支上等待(分支硬件通常按GPU上X个算术处理器的数量进行分组),从而减慢了整个计算的速度。

这两个要点都适用。 320x320的大小不是特别大,乘法是您唯一要做的事情。到目前为止,CPU还没有被GPU淘汰,而让这种事情可以证明这一点。

答案 1 :(得分:0)

NumPy之所以如此之快,是因为它使用了高度优化的BLAS库,该库可能正在使用CPU的SIMD指令。