小编Chr*_*ris的帖子

为什么 CUDA GPU 矩阵乘法比 numpy 慢?numpy 为何这么快?

我正在发现 numba 的 cuda 扩展,并查看了 CUDA 上矩阵乘法的示例实现。代码位于numba 的网站上。

\n

然后我用我认为不太理想的实现对其进行了基准测试:numpy 的点函数,用于将两个 1024x1024 矩阵相乘(使用 生成randn(1024,1024)

\n

结果:

\n
    \n
  • CUDA 每次乘法 40 毫秒,
  • \n
  • numpy 每次乘法 5 毫秒。
  • \n
\n

如果 numpy 的算法是朴素矩阵乘法,那么它应该需要 1024^3 ~ 1e9 乘法和加法。这是每 5ms/1e9 = 5 皮秒一次操作的平均吞吐量。我的 CPU 运行频率约为 3.4 GHz,因此每个周期需要 300 皮秒。

\n

所以我的问题是:numpy 的矩阵乘法如何比普通矩阵乘法快 60 倍?

\n

我听说过 Strassen 的算法,其复杂度约为 N^2.8,因此每次乘法和加法需要 20 皮秒。仍然比 CPU 快 30 倍。

\n

编辑:

\n
    \n
  1. cuda方法的定义
  2. \n
\n
from numba import cuda, float32\n\nTPB = 16\n\n@cuda.jit()\ndef …
Run Code Online (Sandbox Code Playgroud)

python benchmarking cuda numpy numba

2
推荐指数
1
解决办法
2845
查看次数

标签 统计

benchmarking ×1

cuda ×1

numba ×1

numpy ×1

python ×1