gpt4 book ai didi

python - 为什么 Pypy 添加 numpy 数组的速度较慢?

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

为了测试 Pypy JIT 明显更快的说法,我编写了一个简单的代码,重复添加两个大小为 1200x1200 的数组。我的代码如下

import numpy as np
import random

a=np.zeros((1200, 1200), dtype=np.float32)
b=np.zeros((1200, 1200), dtype=np.float32)
import timeit
#Start timer
start=timeit.default_timer()
#Initialize the arrays
for j in range(1200):
for k in range(1200):
a[j][k]=random.random()
b[j][k]=random.random()
#Repeatedly add the arrays
for j in range(10):
a=np.add(a,b)
#Stop timer and display the results
stop=timeit.default_timer()
print stop-start

对于普通的 python,执行时间大约为 1.2 - 1.5 秒。但是使用 Pypy 它超过 15 秒?同样在上述情况下,我只添加了 10 次数组。如果我将此值增加到 1000,我的计算机将停止响应。我发现这是因为在使用 pypy 时几乎消耗了整个 RAM。难道我做错了什么?还是其他问题?

最佳答案

JIT 在这种情况下无能为力,因为在 python 代码上花费的时间很少。 NumPy 是用 C 编写的,因此 JIT 无法查看该代码并使其更快。事实上,PyPy 在这种情况下受到影响,因为用 RPython 编写的 PyPy 和用 C 编写的 NumPy 之间的阻抗匹配意味着每次从 PyPy 调用 NumPy 函数时,必须运行额外的转换代码来准备和调用 C 函数。

CFFI 是专门为这个用例编写的,调用 C 所需的转换已经在对象创建时处理,因此程序可以更无缝地运行两者。

内存问题是一个单独的问题,应该得到解决,请参阅上面垃圾收集问题的答案。

关于python - 为什么 Pypy 添加 numpy 数组的速度较慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42536308/

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