Mojo比Python快35000倍?让我们来测试一下

291 阅读7分钟

图片

创作不易,方便的话点点关注,谢谢

本文是经过严格查阅相关权威文献和资料,形成的专业的可靠的内容。全文数据都有据可依,可回溯。特别申明:数据和资料已获得授权。本文内容,不涉及任何偏颇观点,用中立态度客观事实描述事情本身。

文章结尾有最新热度的文章,感兴趣的可以去看看。

文章有点长(2342字阅读时长:8分),期望您能坚持看完,并有所收获


几天前,我在网上看到了Mojo。我停下来看了下:“Mojo比Python快35000倍!”等等,什么情况?我已经使用Python三到四年了,现在突然出现一种新语言,声称能做和Python一样的事情——但比Python更快。所以我决定亲自测试一下。那么,让我们对Mojo进行测试,检验一下这个说法。

图片

在测试之前,让我们简要讨论一下Mojo,这样大家就能明白我在说什么。Mojo是一种新的编程语言,外观和感觉很像Python。但Mojo最棒的特性是——速度。对于机器学习和数据处理等任务,Python可能会比较慢,但Mojo和C或C++一样快——而且不用为编写这些语言而头疼。

Mojo可以使用像NumPy和Pandas这样的Python库。所以,你不必从头开始。

但问题依然存在,它会取代Python吗?

让我们一探究竟。

测试1:速度测试(斐波那契数列)

我从一个简单的任务开始:计算斐波那契数列。这是测试一种语言到底有多快的好方法。

这是我写的用于计算斐波那契数列的Python代码:

def fibonacci(n):
    if n <= 1:
        return n
    else:
        return fibonacci(n - 1) + fibonacci(n - 2)

print(fibonacci(30))

我用Mojo做了同样的事情:

fn fibonacci(n: Int) -> Int:
    if n <= 1:
        return n
    else:
        return fibonacci(n-1) + fibonacci(n-2)

print(fibonacci(30))

你可以看到代码看起来几乎一样。

但结果呢?

Python计算fibonacci(30)花费了0.4秒。Mojo花费了0.0012秒。Mojo不只是更快——简直令人惊讶。

测试2:Mojo能使用Python库吗?

我听说Mojo的一个特点是——它能与Python库协同工作。

所以,我尝试用Matplotlib(一个用于创建图表的流行库)来使用Mojo。

Python代码:

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [i**2 for i in x]
plt.plot(x, y)
plt.title("Simple Plot")
plt.show()

Mojo代码:

from python_imports import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [i**2 for i in x]
plt.plot(x, y)
plt.title("Simple Plot Verification")
plt.show()

Mojo完美地处理了这个任务。

图表看起来和我用Python绘制的一模一样。

图片

测试3:用Mojo进行机器学习

接下来,我尝试更高级的东西:我用Scikit-learn构建一个机器学习模型。

Python代码:

from sklearn.linear_model import LinearRegression
import numpy as np

X = np.array([[1], [2], [3]])
y = np.array([123])
model = LinearRegression()
model.fit(X, y)
print(model.predict([[4]]))

x = 4时的预测值是4.0。

Mojo代码:

from python_imports import sklearn.linear_model.LinearRegression
from python_imports import numpy as np

X = np.array([[1], [2], [3]])
y = np.array([123])
model = LinearRegression()
model.fit(X, y)
print(model.predict([[4]]))

Mojo代码:x = 4时的预测值是4。

Mojo再次通过了测试。

代码运行顺畅,并且给出了和Python相同的结果。

Mojo语言的快速性能主要归因于以下几个关键因素:

1. 类型注释与代数简化

Mojo通过引入类型注释来消除Python动态类型带来的性能损失,这一措施使得代数计算可以得到优化,避免了开方运算等复杂操作,从而实现了约89倍的加速。

2. 向量化与SIMD

Mojo利用向量化技术和单指令多数据(SIMD)并行计算,能够根据CPU的浮点乘法累加单元(FMA)数量来优化向量宽度,这一过程带来了高达874倍的性能提升。

3. 多核并行化

在实现了单线程优化后,Mojo进一步将其转变为多核并行化,在88核系统上实现了额外的30倍加速。这使得整体性能相比原始Python达到了约26000倍。

4. 动态任务加载

Mojo还解决了并行化中的加载不均衡问题,允许线程从任务池中动态获取任务,这一策略最终使得其性能提升至约68000倍。

编译器技术

Mojo基于最新的编译器技术MLIR(多层中间表示),这使得它能够生成高度优化的CPU代码,并支持GPU等加速器,从而在特定算法上表现出色。这种设计不仅兼顾了Python的易用性,还提供了接近C语言的运行速度。

我发现Mojo的优点

  • 速度:快得惊人。对于繁重的计算或人工智能任务,它的速度令人震撼。

  • 类Python:Mojo看起来和感觉上更像Python,所以Python开发者学习Mojo非常容易。

  • 库支持:我们可以使用我们喜欢的Python库,如NumPy、Pandas和Scikit-learn。

你应该转向Mojo吗?

我知道Mojo在速度方面令人难以置信。如果你从事机器学习或数据处理工作,尝试一下它会很有价值。

但如果你认为它会完全取代Python,那你就错了。因为这暂时还不会发生。

我建议两种语言都尝试一下。

日常工作使用Python,当你需要额外的速度提升时,使用Mojo。

那么,你对Mojo有什么看法?你会尝试它吗?

以上就是我的分享。这些分析皆源自我的个人经验,希望上面分享的这些东西对大家有帮助,感谢大家!

图片

点个“在看”不失联

最新热门文章推荐:

为什么说C和C++比其他语言更能培养优秀程序员?底层思维的重要性

必学!你的第一个C++ WebSocket客户端程序

必看:CTC训练神经网络中的波束搜索解码

C语言程序:从头开始编写一个实时嵌入式操作系统的内核

使用 TensorFlow 构建手写文本识别系统

深度学习中的池化层:减少计算量的背后是牺牲了分类准确性吗?

何恺明团队挑战CNN霸权,ViT能否颠覆目标检测传统?

用纯C++实现神经网络:不依赖Python和PyTorch,260行代码训练手写数字分类器准确率高达99%,你敢信?

我从VSCode转向Cursor的原因

监控你的Linux系统只需一个脚本!

干净简洁的实现Go项目结构 | GitHub 4.8k 星

为什么开发人员讨厌PHP?(世界上最好的语言)

中国人眼中的Yoshua Bengio:将人工智能安全理念带入现实应用并影响全球政策制定?

为何开发者:正在抛弃PostgreSQL、MySQL 和 MongoDB

马斯克等大佬质疑:OpenAI引领的人工智能发展道路,究竟是进步还是灾难的前奏?

国外程序员分享:C++在底层性能和实时线程处理方面碾压Rust

震撼!国外2024年AI界十大传奇人物,引领全球科技变革

多年Rust编程:学到的8个Rust性能技巧

国外大厂程序员分享: 30多场面试失败经历总结出来的经验

不要盲目刷题(LeetCode):先学会这 15 种模式,做题变得简单

还在为代码部署发愁?学会这25个Docker命令,让一切变得简单高效!

参考文献:《图片来源公共网络》

《探讨了Mojo如何使用SIMD技术来提高性能》

本文使用 文章同步助手 同步