gpt4 book ai didi

python - BigInts 在 Julia 中似乎很慢

转载 作者:行者123 更新时间:2023-12-04 22:29:22 24 4
gpt4 key购买 nike

Julia 给我留下了深刻的印象,因为它在处理器密集型 Euler 项目问题上的运行速度比 D 快。第303章 有兴趣的话

奇怪的是 Julia 中的 BigInts 似乎有多慢。奇怪是因为我看了他们的表现相当不错。

下面是一个 Julia 程序,使用欧拉的递推公式计算 15k 的分区数。

function eu78()
lim = 15000
ps = zeros(BigInt, lim)

function p(n) #applies Euler recurrence formula
if n < 0
return BigInt(0)
elseif n == 0
return BigInt(1)
elseif ps[n] > 0
return ps[n]
end
s = BigInt(0)
f = BigInt(-1)
for k = 1 : n
f *= -1
t1 = (k * (3k - 1)) ÷ BigInt(2)
t2 = (k * (3k + 1)) ÷ 2
s += f * (p(n - t1) + p(n - t2))
end
ps[n] = s
end

for i = 1 : lim
p(i)
end
println(ps[lim])
end

eu78()

以惊人的 3 分 43 秒运行以生成 132 位数字答案。

使用 pypy 运行的等效 Python 代码仅需 8 秒。

我究竟做错了什么?

最佳答案

BigInts 目前在 Julia 中相当慢。这是因为每个操作都会分配一个新的 BigInt,而不是 Python,其中所有整数都是 BigInt,因此他们花费了相当多的时间来确保基本操作是快速的。 Python 实际上使用了一种混合方法,其中小整数值被内联表示,并且只有当值变得太大时才将它们表示为 BigInt。在 Julia 中绝对可以做到这一点,但还没有人实现这一点——部分原因是标准 Int值是机器整数,因此 BigInts 的性能并不重要。 BigInt 性能的真正提升将来自于将 Julia 的 BigInt 类型与 GC 集成,并允许将小的 BigInt 值分配到堆栈中——并存在于寄存器中。然而,我们还没有到那个程度。

关于python - BigInts 在 Julia 中似乎很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37193586/

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