gpt4 book ai didi

Python 数组缓存与 C 数组缓存

转载 作者:行者123 更新时间:2023-11-28 17:52:06 26 4
gpt4 key购买 nike

我对 Python 缺乏经验,我意识到这是非常基础的,但是与 C 相比,Python 的缓存 block 有多好?例如,在 C 中:

gridWidth = 100000
gridHeight = 100000

for (i=0; i<gridHeight; i++){

for (j=0; j<gridWidth; j++){

massiveNum += arr[i*gridWidth + j]
}
}

快多了
  massiveNum += arr[i + j*gridWidth]

因为数据首先被有效缓存。

如果我想在 Python 中达到同样的速度,我可以做一些简单的事情吗

for i in range(0,gridHeight):

for j in range(0,gridWidth):

massiveNum += arr[i*gridWidth + j]

或者我必须做一些特别的事情吗?

最佳答案

你的问题没有实际意义。当您在代码和机器之间获得完整的解释器、盒装数字类型、所述类型的堆分配等时,缓存效率是您最不担心的。由于 Python 的内置序列类型在底层使用(动态和过度分配)C 数组,因此应适用相同的规则,但有两个主要警告:

  • 每个 Python 操作(例如类型检查、变量和成员查找、在调用方法之前创建“绑定(bind)方法”对象、数字强制转换)之间都有很多“隐藏”的内存访问,这可能会降低 yield 。
  • 在许多情况下(即除非另有说明),所有容器都存储对装箱对象的引用,因此当您迭代 int 对象的 list 时,CPU 缓存只能帮助更快地获取这些指针,而不是处理它们背后的对象。

如果您能衡量所有差异,我会感到惊讶。如果你想优化,有很多事情会更有效一千倍,也更明显。使用内置函数、NumPy、编写一些 C、使用 Cython,或者只是优化您的 Python 代码。

关于Python 数组缓存与 C 数组缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8085237/

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