gpt4 book ai didi

Python 时间 : results cached instead of calculated?

转载 作者:行者123 更新时间:2023-12-01 05:59:56 24 4
gpt4 key购买 nike

我正在测试几种不同的算法(用于解决 16x16 数独)相互比较,使用 timeit 模块测量它们的性能。然而,似乎只有第一次 timeit.repeat() 迭代是实际上是计算出来的,因为其他迭代的速度要快得多。使用 t.repeat(repeat=10, number=1) 测试单个算法如下得到结果:

[+] 结果......:solve1(函数 1/1)
[+]最快............:0.00003099
[+] 最慢......: 32.38717794
[+] 平均值*.......:0.00003335(计算的平均值,不含最小/最大值)

10 个结果中的第一个总是需要更长的时间才能完成,这似乎只能通过以下事实来解释:迭代 2 到 10timeit.repeat() 循环以某种方式使用循环前一个的缓存结果迭代。当实际在 for 循环中使用 timeit.repeat() 进行比较时几种算法相互对抗,再次看来解决方案拼图只计算一次:

[+] 结果......:solve1(函数 1/3)
[+]最快............:0.00003099
[+]最慢............:16.33443809
[+] 平均值*.......:0.00003263(计算的平均值,不含最小/最大值)

[+] 结果......:solve2(函数 2/3)
[+]最快............:0.00365305
[+] 最慢............:0.02915907
[+] 平均值*.......:0.00647599(计算的平均值,不含最小/最大值)

[+] 结果......:solve3(函数 3/3)
[+]最快............:0.00659299
[+] 最慢............:0.02440906
[+] 平均值*.......:0.00717765(计算的平均值,不含最小/最大值)

真正奇怪的是相对速度(相对于彼此)算法的整个测量过程是一致的,这表明所有算法都在计算自己的结果。性能的这种极端提高是否是因为大部分中间结果(得到的)当计算第一个解决方案时)仍然在某种缓存中,由python进程?

任何帮助/见解将不胜感激。

最佳答案

我认为内存分配是问题所在。

Python解释器本身拥有一个内存池,它开始时没有(或很少?)内存池。程序第一次运行后,大量内存被分配(从系统)并释放(到池),然后接下来的运行从池中获取内存,这比从系统请求内存要快得多。

但只有当您的算法消耗大量内存时,这才有意义。

关于Python 时间 : results cached instead of calculated?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10994405/

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