一些Python模拟角谷猜想的性能测试

228 字
1 分钟
一些Python模拟角谷猜想的性能测试

公共部分#

def solve(n):
step = 0
while n != 1:
if n % 2 == 0:
n //= 2
else:
n = 3 * n + 1
step += 1
return step
N = 1000000

v1#

没啥好说的 顺序求解
主要代码:

x = [i for i in range(1, N + 1)]
y = list(map(solve, x))

v2#

测试电脑为6C12T 故采用max_workers=12
主要代码:

from concurrent.futures import ThreadPoolExecutor
x = [i for i in range(1, N + 1)]
with ThreadPoolExecutor(max_workers=12) as e:
y = list(e.map(solve, x))

v3#

主要代码:

import numpy as np
x = np.arange(1, N + 1, 1)
y = solve(x)

np.vectorize版:

import numpy as np
x = np.arange(1, N + 1, 1)
solve_vector = np.vectorize(solve)
y = solve_vector(x)

测试结果#

+njit指给solve()函数加上了@njit标签
+vectorize指给solve()函数加上了@vectorize()标签
numpy不带(vec)指使用numba#vectorize()标签而不使用np.vectorize 反之亦然

版本说明最大内存占用时间1时间2时间3平均时间
v1Serial106.1MB10272.937ms10022.724ms10065.625ms10120.429ms
v1.1Serial+njit119.6MB712.524ms699.496ms691.721ms701.247ms
v1.1pSerial+njit105.8MB232.681ms239.268ms234.367ms235.439ms
v2ThreadPoolExecutor(12)1750.6MB43345.733ms44833.593ms40681.212ms42953.513ms
v2.1ThreadPoolExecutor(12)+njit2013.0MB17897.805ms16293.948ms16591.327ms16927.693ms
v3numpy(vec)108.8MB9986.405ms10205.962ms9894.202ms10028.856ms
v3.1numpy(vec)+njit115.1MB736.445ms796.545ms749.636ms760.875ms
v3.2numpy+vectorize93.2MB538.277ms532.579ms542.114ms537.657ms
v3.3numpy+vectorize+njit99.3MB932.287ms907.180ms927.224ms922.230ms
v3.3pnumpy+vectorize+njit92.7MB231.020ms227.666ms228.072ms228.919ms

总结#

numba就完事了
最后放张算出来的图吧

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
一些Python模拟角谷猜想的性能测试
https://blog.truebigsand.top/posts/collatz-conjecture-python/
作者
真-大沙子
发布于
2024-06-15
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
真-大沙子
编程 · 数学 · 二次元 · 生活
公告
音乐
封面

音乐

暂未播放

0:000:00
暂无歌词
分类
标签
站点统计
文章
45
分类
5
标签
51
总字数
42,438
运行时长
0
最后活动
0 天前
站点信息
构建平台
GitHub Actions
博客版本
Firefly v6.13.5
文章许可
CC BY-NC-SA 4.0

文章目录