性能比较 - Mojo 与 Python

问题描述 投票:0回答:1

Mojo,一种编程语言,声称比 python 快 65000 倍。我很想知道,有没有具体的基准数据支持这个说法?另外,它在现实世界的问题中有何不同?

我主要是在他们的网站上遇到这种说法,并且观看了几个讨论 Mojo 速度的视频。然而,我正在寻找具体的基准数据来证实这一断言。

提前谢谢您。

python performance benchmarking mojo
1个回答
0
投票

该声明直接来自Mojo 网站上的博客。基准是 Mandelbrot 集的计算。它“不是一个严格的基准测试,也不是大多数 Python 应用程序的代表”。这也明显有偏见 他们选择它是因为它具有以下属性:“易于表达”、“纯计算”(即计算限制)、“不规则计算”、“令人尴尬的并行”、“可向量化”。这是 Python 无法解决的问题(并且它不适合用来解决),因此加速可能是最重要的。因此,这个基准测试是您可以获得的最大加速,而不是许多实际应用程序的平均值。

首先,比较语言性能没有任何意义。我们比较

实现

。 CPython 是标准的 Python 实现,但不是唯一的实现。 CPython 是一个解释器,因此当代码被完全解释时,速度非常慢。优化的 Python 代码往往不会运行太多解释代码,而是运行向量化代码(例如,脚本主要调用用 C 编写的 Numpy 优化函数)。 PyPy 是一种替代实现,它使用

JIT 编译器

来更快地运行代码。通过一组详细的基准测试(几何平均值),它声称性能比 CPython 快 4.8 倍。即使使用母语,也很难提高一些基准测试的速度。符号和大型字符串计算很难加快(CPython 字符串已经在 C 中得到了很好的优化)。对于数字代码来说,它往往会更快。 在 Mojo 基准测试中,原生 Python 代码、Numpy 代码和 PyPy 代码是“顺序”的,而最终的 Mojo 代码是多线程的。这

不是一个公平的比较

。人们应该至少使用multiprocessing模块来比较并行代码。这是一个关键点,因为他们在 88 核 Intel Xeon CPU 上运行代码。事实上,由于计算是受计算限制的,因此使用多个线程可以预期速度提高到接近 88。事实上,他们的并行 Mojo 实现比顺序 Mojo 快 85 倍。如果没有并行的 Python 实现,更公平的说法是 Mojo 比简单的 CPython 实现快 874 倍,比(相当简单的)Numpy 代码快 175 倍,比 PyPy 实现快 40 倍(在这个特定的 Mandelbrot 上)设置计算)。 顺序而言,大部分加速来自于SIMD指令和

指令级并行性

的使用。 Python 实现往往不使用它们。虽然 Numpy 可以做到这一点,但并非所有函数都可以很好地矢量化(据我所知,对复数进行操作的函数往往不是这样),并且由于创建了许多大型临时数组,Numpy 代码往往会受到内存限制。 请注意,Numba 和 Cython 等工具并未显示在基准测试中,尽管它们经常用于加速数字代码。添加它们(或者至少提及它们)会更公平。

© www.soinside.com 2019 - 2024. All rights reserved.