Python 3.14 会比 C++ 更快吗?

分享
源代码 2024-9-30 04:37:45 168 0 来自 中国
Python 是数据科学 (DS) 和呆板学习 (ML) 中最常用的脚本语言之一。根据“ PopularitY of Programming Languages ”,Python 是 Google 上搜索次数最多的语言。除了作为将各种 DS/ML 办理方案毗连在一起的精彩胶水语言之外,它尚有许多库可以对数据举行捏造处理处罚。
约莫一个月后,我们得到了 Python 的全新年度版本:3.11 版。我对这个新版本感到非常高兴,由于这个版本的紧张特点是速率显着进步。
要相识 Python 3.11 真正的速率有多快,最好的方法是本身运行测试。
对编程语言举行基准测试并非易事。当您阅读xy快时,您应该始终对效果持保存态度。一种算法的实现大概比x更好,而另一种算法在y上更好。对于我们的基准测试,它有点简单,由于我们正在针对 Python 测试 Python,但我们大概从语言中选择了仅受到轻微影响的元素。思量到这一点,我想先容我用来举行基准测试的算法:使用蒙特卡洛方法估计 Pi。
这个算法的想法很简单,但是在大学的一些数学课程中第一次看到它让我大吃一惊。我们有一个巨细为2r的正方形,在这个正方形中我们拟合一个半径为r的圆。现在我们接纳一个随机数天生器,它在平面上天生数字:<-r, r>, <-r, r>。圆上的点与正方形上的点之间的比率(读取:全部点)是面积比的近似值,我们可以用它来近似 Pi。这在等式中更清晰一点:
在 Python 中,我将现实估计与测试脚天职开,如许我就可以重复测试并取匀称值。此处未表现,但我还使用Argparse对脚本举行了参数化,这是一个用于分析来自下令行界面 (CLI) 的参数的标准库。Python 代码如下所示:
该脚本已准备好运行,但我们希望使用它来测试各种版本的 Python,而不但仅是当前安装(或激活)的版本。测试多个 Python 版本的最简单方法是使用 Docker。Python 维护着许多 docker 镜像。天然是全部受支持的版本,尚有一些生命周期竣事 (EOL) 的版本,比方 2.7 或 3.2。它还具有效于发布候选版本的图像,比方版本 3.11。要使用 Docker,您须要安装它。在 Linux 和 Mac 中它相对容易,在 Windows 中我不太确定,但大概也不难。我发起只安装 docker CLI,桌面临我来说太痴肥了。要在容器化 Python 环境中运行当地脚本,请运行:
为了主动化各种版本的测试,我们固然也会使用 Python。这个脚本将简单地启动一个子进程来启动一个具有特定 Python 版本的容器,然后网络效果。没什么特别的:
运行这些测试时,绝对数目因呆板而异,具体取决于处理处罚器(CPU 很重)。以下是近来 7 个紧张 Python 版本的效果:
新的 Python 3.11 每次运行耗时 6.4605 秒。Python 3.5 耗时 11.3014 秒。(Python 3.11 快 74.9%)
Python 3.6 耗时 11.4332 秒。(Python 3.11 快 77.0%)
Python 3.7 耗时 10.7465 秒。(Python 3.11 快 66.3%)
Python 3.8 耗时 10.6904 秒。(Python 3.11 快 65.5%)
Python 3.9 耗时 10.9537 秒。(Python 3.11 快 69.5%)
Python 3.10 耗时 8.8467 秒。(Python 3.11 快 36.9%)</pre>
Python 3.11 的基准测试匀称耗时 6.46 秒。与之前的版本 (3.10) 相比,这险些快了 37%。相适时人印象深刻!3.9 版和 3.10 版之间的差别大抵雷同,使 3.11 版快了近 70%!我已经在图 2 中绘制了全部时间。
在批评速率时,我们总是有一个人说:如果你想要速率,为什么不使用 C。
C 比 Python 快得多!——那个人
固然我的 C 有点生锈,但我照旧想试试看。我使用了 GNU C++,由于它带有一个不错的时间丈量库(chrono)。找到下面的代码:
众所周知,C++ 是一种编译语言,因此我们须要先编译源代码才气使用它。
编译后,只需运行构建可实行文件。输出应该是如许的:
Pi 约为 3.14227,盘算时间为 0.25728 秒。
Pi 约为 3.14164,盘算时间为 0.25558 秒。
Pi 约为 3.1423,盘算时间为 0.25740 秒。
Pi 约为 3.14108,盘算时间为 0.25737 秒。
Pi 约为 3.14261,盘算时间为 0.25664 秒。每个循环匀称须要 0.25685 秒来盘算。
我们必须同意那个人的观点,由于它真的(阅读:真的)很快。实行我们之前在 Python 中编写的雷同循环只须要 0.257 秒。让我们在之前的图中将其添加为一条线,如图 3 所示。
现在,在对之前的数字举行了更长时间的欣赏之后,我们清晰地看到了 Python 得到的动力。自 3.9 版以来,Python 的速率进步了约 35%。Python 开发职员提到,接下来的几个版本将显着进步速率,因此,我们可以假设这个速率将保持稳定(是,超级安全的假设)。
现在的题目是,在这种势头固定的环境下,Python 何时会逾越 C++ 的期间。为此,我们固然可以使用外推法来猜测下一个 Python 版本的循环时间。这些可以在图 4 中看到。
图 4:推断 Python 速率 -> Python 3.14 的速率将凌驾 C++。惊人!(作者图片)。
效果真的很惊人!保持这个速率,Python 3.14 将比 C++ 更快。确切地说,循环时间为-0.232秒,因此它会在您想要举行盘算之前完成。时空连续体中似乎有一个洞,但这些盘算是坚如磐石的。因此,我以为我们大概不得不质疑爱因斯坦和朋友的工作。
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2025-2-2 18:45, Processed in 0.153994 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表