我正在发现 numba 的 cuda 扩展,并查看了 CUDA 上矩阵乘法的示例实现。代码位于numba 的网站上。
\n然后我用我认为不太理想的实现对其进行了基准测试:numpy 的点函数,用于将两个 1024x1024 矩阵相乘(使用 生成randn(1024,1024))
结果:
\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编辑:
\nfrom numba import cuda, float32\n\nTPB = 16\n\n@cuda.jit()\ndef …Run Code Online (Sandbox Code Playgroud)