gpt4 book ai didi

python - numpy 在进行矩阵乘法时是否使用内存中的空间局部性?

转载 作者:太空宇宙 更新时间:2023-11-03 17:44:11 25 4
gpt4 key购买 nike

在将大型矩阵(例如 A 和 B,A.dot(B))相乘时,numpy 是否通过计算 B 的转置并使用行乘法来使用空间局部性,或者它是否访问列中 B 的元素明智的方式会导致许多缓存未命中。我观察到,当我运行同一程序的多个实例时,内存带宽正在成为瓶颈。例如,如果我在 20 核机器上运行执行矩阵乘法(对于大型矩阵)的程序的 4 个独立实例,我只能看到 2.3 倍的加速。

最佳答案

Numpy dot 在 multiarraymodule.c 中实现为 PyArray_MatrixProduct2。它实际使用的实现取决于许多因素。

如果您将 numpy 链接到 BLAS 实现,则您的数据类型均为 double、cdouble、float 或 cfloat,并且您的数组每个维度有 2 个或更少,然后 numpy 将数组交给 BLAS 实现。它的作用取决于您使用的软件包。

否则,不,它不会执行此操作。然而,至少在我的机器上,使用转置和 einsum 执行此操作(或一般来说只是点积)比仅使用点慢十倍,因为点推送到 BLAS。

关于python - numpy 在进行矩阵乘法时是否使用内存中的空间局部性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30065905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com