前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Julia 快到离谱?不,它并没有比 Python 快 340000,000,000 倍

Julia 快到离谱?不,它并没有比 Python 快 340000,000,000 倍

作者头像
深度学习与Python
发布于 2023-03-29 06:11:08
发布于 2023-03-29 06:11:08
88400
代码可运行
举报
运行总次数:0
代码可运行

作者 | Logan Kilpatrick

译者 | 红泥

策划 | 刘燕

Julia 运行速度很快,但从性能表现上看,也没快的那么离谱。

几周前,当我在 YouTube 上刷编程趣闻时,无意中看到一个视频,它展示了 C++ 和 Python 从 0 加到 10 亿时的性能差异。不出所料,Python 在执行此操作过程中不是非常快,耗时 1m52s,C++ 耗时 2.4s,但我很想看看 Julia 执行效果是什么样子。

接着,我开始写一些简单的 Julia 代码,来运行这个基准测试,以此看看 Julia 是否比 C++ 还快,是否能碾压 Python 很多(虽然这不是一个专业性的对比实验,但仍然可以作为一个有趣的参考指标)。

我使用的 Python 代码跟 YouTube 视频中的几乎一样,把它运行起来也比较简单:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> import time>>> def count():...     start = time.perf_counter()...     n = 0...     while n < 1000000000:...             n += 1...     print(f"Completed Execution in {time.perf_counter() - start} seconds")... >>> count()Completed Execution in 44.67635616599998 seconds

如您所见,我使用 Python 代码,整个计算过程花了惊人的 44.67 秒,这个结果比视频中的运行时间快了很多,但这可能是由于很多其它原因导致的,比如我电脑 CPU 等硬件差异。

实现相同功能的 Julia 代码,与 Python 的代码比较相似,只需做一些小的改动。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
julia> function count()           n = 0           while n < 1000000000               n +=1           end       endjulia> using BenchmarkToolsjulia> @benchmark count()BenchmarkTools.Trial: 10000 samples with 1000 evaluations. Range (min … max):  1.167 ns … 10.584 ns  ┊ GC (min … max): 0.00%0.00% Time  (median):     1.250 ns              ┊ GC (median):    0.00% Time  (mean ± σ):   1.261 ns ±  0.222 ns  ┊ GC (mean ± σ):  0.00% ± 0.00%

我相信,你肯定也跟我一样,刚开始也为这个结果大吃了一惊。这段 Julia 代码只花了 1.25 纳秒。这样的结果好的令人难以置信,它比 Python 代码快了近 34,000,000,000 倍。

一个小小的区别是,这个函数目前还没有返回 n 的值。但是即便我们加上返回值,整体运行时间也基本维持在 2.0 纳秒左右。

另外,如果在 print 语句中打印出结果,这个时间花费接近~ 33.084 微秒,这明显影响很小。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 evaluation. Range (min … max):  25.333 μs … 79.291 μs  ┊ GC (min … max): 0.00%0.00% Time  (median):     33.084 μs              ┊ GC (median):    0.00% Time  (mean ± σ):   37.645 μs ±  9.828 μs  ┊ GC (mean ± σ):  0.00% ± 0.00%  

我知道这样难以置信的效果应该不是真实的,之后我没有去 Julia slack 而是直接到 Julia 社区寻求帮助,很快我便得到了一些有效反馈,Mosè Giordano 建议使用 @code_llvm 来分析下 LLVM,看看在底层创建了什么(LLVM 是 Julia 的编译器)。

确实,之后 Julia 编译器在这个例子中发挥了关键性的作用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
julia> @code_llvm count();  @ REPL[7]:1 within `count`define i64 @julia_count_868() #0 {top:;  @ REPL[7]:6 within `count`  ret i64 1000000000}

如您所见,编译器完全移除了循环,并选择立即返回 10 亿的值。作为一个对编译器基本一无所知的人(我也期望我能有更多的了解),这种操作着实让我大吃一惊。我写这篇文章的目的也是为了防止其他人在自己的代码中发现类似的误导性基准。

在这种情况下,该函数没有足够的计算复杂度,无法与 Python 版本进行充分比较。

如果想了解 Julia 的真实速度性能,Mosè有一个不错的帖子,它对 Julia 的速度神话提出了挑战,我强烈建议你去看看:

1 Julia 如何做基准测试

在 Julia 社区,基准测试是个热门话题,因此有相当多的文档资源。我强烈建议您通读 BenchmarkTools.j1 文档,有很多实践案例可以查看:

https://juliaci.github.io/BenchmarkTools.jl/stable/manual/

最简单的,你可以使用 @benchmark 宏对任何函数进行基准测试(提示——基准测试会“打印”代码,如下所示,可能会导致很多东西打印在你的屏幕上):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
julia> @benchmark print("Hello world") Range (min … max):  25.125 μs … 87.625 μs  ┊ GC (min … max): 0.00%0.00% Time  (median):     32.792 μs              ┊ GC (median):    0.00% Time  (mean ± σ):   37.638 μs ± 10.026 μs  ┊ GC (mean ± σ):  0.00% ± 0.00%     ▁▃▆██▆▄▂                                 ▁                  ▂▅▇█████████▇▆▅▅▅▄▄▃▃▂▂▂▂▂▂▃▃▃▅▆▄▄▅▄▃▂▂▂▃▃▄▆█▇▆▅▃▃▃▄▃▂▂▂▁▁▁ ▃  25.1 μs         Histogram: frequency by time        59.6 μs < Memory estimate: 48 bytes, allocs estimate: 2.

你也许会对 Valentin Churavy 写的关于 Julia 性能的 notebook 程序感兴趣,可以通过它更好的理解 Julia 性能。Valentin 是 Julia 的长期贡献者,在这个领域有很大的权威性。

Valentin 是一个有智慧的人,这里分享下他在 Julia slack 说过的一段话:

基准测试是困难的,你首先需要确保度量的是真实的东西™

2 使用 Julia 可以带来哪些方面的性能改善呢?

虽然关于 Julia 的性能有很多夸大和错误引导的文章,但使用 Julia,比起 Python 和 Matlab 等语言,在多数情况下我们还是能获得比较大的性能提升。

2022 年 4 月,SciML 团队在 Julia 博客上发表了一篇关于在 Julia 中使用小型网络进行科学机器学习的文章。他们将其性能与 PyTorch 的等效性能进行了比较,并在此基础上获得了 5 倍的速度提高。虽然 PyTorch 通常是同类中最好的工具,但该文章强调,当您想将科学计算结合到您的深度学习(DL)工作流程中时,Julia 在深度学习(DL)领域确实具有较好的效果。你可以在这里阅读全文:

我们来看几个其他的例子:

图片来自 julialang.org

上图标识了几种基本操作及其在每种语言中的速度。该基准测试位于于:

https://julialang.org/benchmarks/,你可以去了解更多的细节。

Julia 提高速度性能的另一个地方是读取 CSV(大多数数据科学家应该都不愿意承认他们要频繁做这个操作)。下面这篇文章写的非常好,它描述了 Julia 和 CSV.jl 是如何做到比 Python 和 R 快 10-20 倍的。

另一个案例来源于 Pfizer(辉瑞) 公司的团队,他们使用 Julia 将他们的一些模拟速度提高了 175 倍:

为了避免重复造轮子,我想向大家推荐最后一篇关于 Julia 速度性能的文章。在下面这篇文章中,作者介绍了用 Julia 编写的一些基本算法,并将它们的性能与其他语言进行了比较:

如果您有 Julia 代码方面的疑问想要获得帮助,可以到 https://discourse.julialang.org 的“General Usage”主题、“Performance”子类别下发帖:https://discourse.julialang.org/c/usage/perf。

英文原文地址

https://juliazoid.com/no-julia-is-not-34-000-000-000-times-faster-than-python-f63e956313d7

声明:本文为 InfoQ 翻译,未经许可禁止转载。

点击底部阅读原文访问 InfoQ 官网,获取更多精彩内容!

今日好文推荐

Flink创始团队二次创业再被收购,Kafka母公司与阿里“遭遇战”已经开始

中文编程不如英文香?今年诞生的这些国产编程语言表示不服

字节回应员工因没年终奖与 HR 互殴;乐视实行 4 天半工作制:不降薪无 996,研发可准点下班;亚马逊发全员信,拟裁员 1.8 万人|Q 资讯

2022年全球程序员收入报告出炉:首席工程师最高年薪超700万,字节跳动成国内唯一上榜公司

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-01-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 InfoQ 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
13 如何写出高性能的Julia
全局变量的值和类型随时都会发生变化。 这使编译器难以优化使用全局变量的代码。 变量应该是局部的,或者尽可能作为参数传递给函数。
猫叔Rex
2020/06/30
1.5K0
13 如何写出高性能的Julia
学界 | MIT正式发布编程语言Julia 1.0:Python、R、C++三合一
在过去一年中,研究者利用 Julia 在一台超级计算机上分析天文图像,速度提升了 1000 倍,在 15 分钟内将接近 2 亿个天体进行分类。从技术上来看,这种语言还会长期发展下去。然而,现在是一个里程碑的时刻:在本周于伦敦举办的 Julia 语言年会上,Julia 1.0 正式发布!一起发布的还有 JuliaCon。
机器之心
2018/08/21
1.2K0
学界 | MIT正式发布编程语言Julia 1.0:Python、R、C++三合一
Julia编程01:介绍Julia语言
前三门语言很类似,是可以一起学的,julia像是处于动态语言向静态语言过度的语言,既可以指定类型又可以不指定,优点就是速度极快,缺点就是造好的轮子不多。
生信探索
2023/04/05
9130
为什么Julia比Python快?因为天生理念就更先进啊
其实像以前 C 或其它主流语言在使用变量前先要声明变量的具体类型,而 Python 并不需要,赋值什么数据,变量就是什么类型。然而没想到正是这种类型稳定性,让 Julia 相比 Python 有更好的性能。
机器之心
2019/03/12
1.8K0
为什么Julia比Python快?因为天生理念就更先进啊
Julia焦虑?这有份Facebook软件工程师的测试差评
近日,MIT CSAIL 实验室正式发布了 Julia 1.0,不少人称,该语言结合了C语言的性能和Python 的易上手性,被称为最聪明的一群大脑创造出的现代编程语言。
大数据文摘
2018/08/21
1.1K0
Julia焦虑?这有份Facebook软件工程师的测试差评
我是如何实现Go性能5倍提升的?
代码的稳健、可读和高效是每一位 coder 的共同追求,写出更高效的代码不仅让自己爽、让 reviewer 赏心悦目,更能对业务带来实际的正面影响。本文将从实践及源码层面对 Go 的高性能编程进行解析,带你进入 Go 的高性能世界。
腾讯云开发者
2024/01/04
2.3K1
我是如何实现Go性能5倍提升的?
碾压 Python!为什么 Julia 速度这么快?
来源:AI前线(ID:ai-front) 作者: UCI Data Science Initiative
新智元
2019/05/08
2.6K0
碾压 Python!为什么 Julia 速度这么快?
都有Python了,还要什么编译器!
诚然,编译器可以为你生成高性能的代码,但是你真的需要编译器吗?另一种方法是用 Assembly 编写程序,虽然有点夸大,但这种方法有两个主要缺陷:
AI科技大本营
2019/03/19
1.1K0
都有Python了,还要什么编译器!
集 Python、C、R、Ruby 之所长,动态编程语言 Julia 1.0 正式发布
Julia 可以看作是一门集众家之所长的编程语言,在首次公开时开发团队就已明确其需求:
CDA数据分析师
2018/09/17
1.5K0
集 Python、C、R、Ruby 之所长,动态编程语言 Julia 1.0 正式发布
Julia开源新框架SimpleChain:小型神经网络速度比PyTorch快5倍!
---- 新智元报道   编辑:LRS 【新智元导读】世上没有免费的午餐,享受了通用框架的便利,在特定任务上就要牺牲性能。最近Julia开源了一个新框架SimpleChain,在小型神经网络的运行速度上比PyTorch至少快5倍! Julia从一出生开始,就瞄准了科学计算领域,并且一直在与Python暗中较量。 在神经网络的框架上,Python有PyTorch和TensorFlow,几乎是深度学习开发的首选框架,并且获得了Meta和Google在技术和资金上的支持,蓬勃发展。 虽然Julia也有Flu
新智元
2022/04/26
1.4K0
Julia开源新框架SimpleChain:小型神经网络速度比PyTorch快5倍!
Python高性能编程:五种核心优化技术的原理与Python代码
在性能要求较高的应用场景中,Python常因其执行速度不及C、C++或Rust等编译型语言而受到质疑。然而通过合理运用Python标准库提供的优化特性,我们可以显著提升Python代码的执行效率。本文将详细介绍几种实用的性能优化技术。
CoovallyAIHub
2025/02/18
1060
Python高性能编程:五种核心优化技术的原理与Python代码
我好像发现了一个Go的Bug?
最近在重构一个路由功能,由于路由比较复杂,需求变化也多,于是想通过责任链模式来重构,刚好这段时间也在 Sentinel-Go 中看到相关源码。
龟仙老人
2021/12/08
4380
有望取代Python的新型语言Julia:简介
Julia是一种高级编程语言,由麻省理工学院(MIT)的4个人开发。它是一种开源的、高性能的、高级的、用于科学计算的动态编程语言。它主要用于数据分析和统计计算,类似于R编程语言。
HuangWeiAI
2020/07/27
1K0
Python 在这点上竟被 Julia 和 R 碾压?!
本文作者戴卓嘉,拥有 10 年开发经验的数据科学家,以下是他对 Julia、R、Python 分别在字符串排序速度上的示例与对比,Python 为何会被碾压?废话不多说,马上开讲。
CSDN技术头条
2019/11/19
1.6K0
Python 在这点上竟被 Julia 和 R 碾压?!
大佬 Python 对阵新秀 Julia,谁能问鼎机器学习和数据科学?
关键时刻,第一时间送达! 【CSDN 编者按】在数据科学领域,你最常用的编程语言是哪种?对此,不同职业背景下的开发者答案各尽不同,一般来说,Python 和 R 语言是需要重点掌握的,但是如今有一枝独秀悄然而至,其创作理念是像 Python 一样通用、像 R 语言一样适用于统计、像 Perl 一样适用于字符串处理、像线性代数 Matlab 一样强大、像 Shell 一样擅长粘合程序,且可以像 C 语言一样高效,它的名字叫做——Julia。如今,在面对 Python 俨然已成为数据科学和机器学习领域的中流砥柱
企鹅号小编
2018/01/23
1.7K0
大佬 Python 对阵新秀 Julia,谁能问鼎机器学习和数据科学?
Julia 1.0 正式发布,这是新出炉的一份简单中文教程
文章地址:https://zhuanlan.zhihu.com/p/41802723
机器之心
2018/08/21
5.1K0
Julia 1.0 正式发布,这是新出炉的一份简单中文教程
BCC(可观测性)
BCC是一个用于跟踪内核和操作程序的工具集,其软件包中包含了一些有用的工具和例子,它扩展了BPF(Berkeley Packet Filters),通常被称为eBPF , 在Linux3.15中首次引入,但大多数BCC的功能需要Libux4.1及以上版本。
charlieroro
2020/07/09
3.3K0
Julia篇(外传)-Julia常用函数
Julia Manual - Function List and Reference View by functional groups
Pulsar-V
2019/03/12
1.9K0
为科学计算而生的Julia——基于Manjaro Linux的安装与入门
Julia是一门为科学计算而生的编程语言,其着重强调了开源、生态与性能。从开源角度来说,相比于Matlab就要友好很多,用户可以免费使用,而且MIT协议应该是最宽松的开源协议之一(截图来自于参考链接3):
DechinPhy
2021/05/21
2.2K0
Julia推出新机器学习框架MLJ,号称超越机器学习pipeline
Julia新推出了一个超高纯度的机器学习框架MLJ,团队希望把MLJ打造成一个灵活的、用于组合和调整机器学习模型、具备高性能、快速开发的框架。Julia团队之所以推出MLJ,部分原因也是受到MLR的影响。
新智元
2019/05/14
1.5K0
推荐阅读
相关推荐
13 如何写出高性能的Julia
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验