gpt4 book ai didi

Python矩阵乘法索引交换内存使用示例

转载 作者:行者123 更新时间:2023-11-30 14:41:41 25 4
gpt4 key购买 nike

在 c 语言中,有一个说明内存利用率重要性的示例:使用 3 个 for 循环 (i,j,k) 的朴素矩阵乘法。并且可以证明,由于内存合并,使用 (i,k,j) 比 (i,j,k) 快得多。在 python numpy 中,索引的顺序(同样是简单的 3 个循环,而不是 np.dot)并不重要。这是为什么?

最佳答案

首先,您需要知道为什么循环 (i,k,j) 在 C 上比 (i,j,k) 更快。​​这是因为内存使用优化,在您的计算机内存中,矩阵以线性方式分配,因此,如果您使用 (i,k,j) 进行迭代,您将在每个循环占用一个 block 的情况下使用它内存并加载到 RAM 中。如果你使用(i,j,k),那么你就是在对抗它,每一步都会将一 block 内存加载到你的RAM中,并在下一步中丢弃,因为你正在迭代跳跃 block 。

numpy 的实现会为您处理它,因此即使您使用最差的顺序,numpy 也会让它工作得更快。

丢弃缓存并一直改变缓存的事件称为Cache miss

this link您可以看到有关如何分配内存以及为什么在某些特定的迭代方式下速度更快的更好解释。

关于Python矩阵乘法索引交换内存使用示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54828517/

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