Julia 1.9.0 发布,科学计算领域高性能语言


Julia 编程语言 1.9 版本已发布,这是一种通用的高性能语言,在科学计算和数值分析中较为流行。Julia 1.9 是 1.x 系列版本中的第九个次要版本,添加了一些新特性和功能,主要更改如下:

本机代码的缓存

本机代码缓存现已可用,从而显着改善了 TTFX (首次执行时间 )延迟,包作者现在可以利用带有 PrecompileTools 的precompile语句或工作负载来提前缓存重要的例程。

用户还可以创建自定义本地“启动”包,以加载依赖项并预编译适合其日常工作的工作负载。此功能带来一些额外的负载,例如预编译时间增加 10%-50%,但这是一次性成本。由于存储更多数据和使用不同的序列化格式,缓存文件也变得更大。

下图说明了从 Julia 1.7 开始加载时间 (TTL)、TTFX 和缓存文件大小的变化:

包扩展

Julia 1.9 引入了“包扩展”,从广义上讲,这是一种在加载一组包时自动加载模块的功能。该模块包含在ext父包目录中的一个文件中,加载“弱依赖”和扩展方法。

包扩展提供的功能类似于 Requires.jl 已经提供的功能,但具有关键优势,例如允许预编译条件代码,和添加弱依赖性的兼容性约束。

ForwardDiff.jl 包提供了优化的示例,在 Julia 1.8 中它无条件加载StaticArrays包,而在 1.9 中,它使用包扩展缩短加载时间:

# 1.8 (StaticArrays unconditionally loaded)
julia> @time using ForwardDiff
0.590685 seconds (2.76 M allocations: 201.567 MiB)

# 1.9 (StaticArrays not loaded)
julia>@time using ForwardDiff
0.247568 seconds (220.93 k allocations: 13.793 MiB)

有关使用包扩展的综合指南,请参阅文档。

堆快照

现在可以生成可以使用 Chrome DevTools 检查的堆快照。

要创建堆快照,只需使用Profile包并调用take_heap_snapshot函数,如下所示:

using Profile Profile.take_heap_snapshot("Snapshot.heapsnapshot")

如果对对象的数量更感兴趣,则可以使用该all_one=true参数。这会将每个对象的大小报告为一个,更容易识别保留的对象总数。

Profile.take_heap_snapshot("Snapshot.heapsnapshot", all_one=true)

要分析堆快照,请打开 Chromium 浏览器并按照以下步骤操作right click -> inspect -> memory -> load:上传您的.heapsnapshot文件,左侧将出现一个新选项卡以显示快照的详细信息。

GC 的内存使用提示--heap-size-hint

Julia 1.9 引入了一个新的命令标志--heap-size-hint=<size>,使用户能够设置内存使用限制,之后垃圾收集器 (GC) 将更积极地工作,以清理未使用的内存。

通过指定内存限制,用户可以确保垃圾收集器更主动地管理内存资源,降低内存耗尽的风险。

要使用这个新功能,只需运行 Julia,并在--heap-size-hint标志后面加上所需的内存限制:

julia --heap-size-hint=<size>

替换<size>为适当的值(例如,1G512M)。

这一增强功能在 #45369中引入,在处理内存密集型应用程序时提供更好的控制和灵活性。

排序算法性能

默认排序算法已升级为更具自适应性的排序算法,该算法始终稳定且通常具有最先进的性能,它对于简单的类型和顺序—— BitInteger  IEEEFloat  Char 使用基数排序,它具有与输入大小相关的线性运行时间。这种效果对于 Float16 尤其明显,它在 1.8 上获得了 3x-50x 的加速。

对于其他类型,默认排序算法在大多数情况下已更改为内部的 ScratchQuickSort ,它稳定且通常比 QuickSort 更快,对于内存效率至关重要的情况,可以通过指定 alg=QuickSort 来覆盖这些新的默认值。

任务和交互式线程池

在 1.9 版本之前,Julia 的任务在所有可用线程上运行,没有任何优先级区别。但是,在某些情况可能希望优先处理某些任务,例如运行心跳、提供交互式界面或显示进度更新。

现在可以在 Threads.@spawn 时将任务指定为交互式任务:

using Base.Threads @spawn :interactive f()

可以使用以下命令设置可用的交互式线程数:

julia --threads 3,1

此命令以 3 个“正常”线程和一个交互式线程(在交互式线程池中)启动 Julia。

此功能在 #42302 中引入,有关更多信息,请参阅手册中有关多线程的部分。

 

更多内容请查看更新公告:https://julialang.org/blog/2023/04/julia-1.9-highlights/


相關推薦

2022-08-20

Julia 编程语言 1.8 版本已发布,这是一种通用的高性能语言,在科学计算和数值分析中较为流行。Julia 1.8 是 1.x 系列版本中的第八个次要版本,添加了一些新特性和功能,主要更改如下: 可变结构字段上的 const Julia 支持使用 co

2022-09-06

单前 20 名的位置仅差 0.05%,它是一种为数值分析和计算科学设计的语言。在该领域有许多相互竞争的语言,那么是什么让 Julia 脱颖而出呢? TIOBE 方面指出,“Julia 击败了 Matlab,是因为它更现代并且可以免费使用;击败了 Python

2023-05-18

用的标准,能够提供高效的线性代数运算,同时也是很多高性能库的基础,如OpenBLAS、MKL等。 随着计算机技术的发展和日益广泛的应用,数学计算库也不断演进,常用函数已经达到一万个,版本多种多样,也成为国际巨头掌控

2023-05-05

众所周知,Python 是 AI 和 ML 领域最受欢迎的语言,如果翻看过去数月,甚至是数年的 TIOBE 榜单,Python 也一直占据着榜单前两名的位置。随着近段时间的 AI 的火热,以及 AI 在各个行业的应用,Python 受欢迎的程度有望进一步提升

2022-11-15

研究公司 SlashData 最新发布了一份”State of the Developer Nation“第 23 版报告,基于 2021 年 6 月至 2022 年 8 月期间对 166 个国家/地区的 26000 多名开发者进行调查的数据。该研究旨在探索 2022 年第三季度及以后的关键开发人员

2022-09-19

数据科学公司 Anaconda 最新发布的一项 2022 数据科学状况调查报告指出,大约 40% 的行业专业人士表示,出于对安全性的担忧,他们的组织减少了对开源软件的使用。该调查持续时间为 2022 年 4 月 25 日至 5 月 14 日,基于来自 133

2023-09-22

CPC竞赛,华为也愿意赞助其他学科的竞赛,以此推动基础科学的人才培养。华为欢迎ICPC在华为园区举办比赛,并将对年轻人开放研发区,让他们体验华为的工作环境。同时,华为愿意面向全球优秀青少年开放技术难题和实习机

2022-09-17

法国国家数字科学与技术研究所 Inria 的 Julia Lawall 在本周举行的  Linux Plumbers 大会 (LPC 2022)上介绍了新的 Linux 内核调度方法 “Nest”, Nest 调度程序由 Inria  研究所、 oracle Labs 、悉尼大学合作开发。据  Julia 介绍称

2022-08-18

Racket v8.6 已发布,Racket(原名 PLT Scheme)是一门通用、多范型,属于 Lisp 家族的函数式程序设计语言,它的设计目之一是为了提供一种用于创造设计与实现其它编程语言的平台,Racket 被用于脚本程序设计、通用程序设计、计算机

2023-11-24

布。 Fortran 2023是Fortran编程语言的最新版本。它是一种高性能并行编程语言,专为科学和工程计算而设计。Fortran 2023具有许多强大的特性,使得它成为处理大规模数值数组的快速计算的理想工具。 高性能:Fortran 2023针对科

2023-09-12

n 是另一种有前途的语言。JetBrains 公司于 2016 年首次正式发布 Kotlin 语言;2017 年,Google 宣布为 Android 版 Kotlin 提供一流支持。彼时,由于 Java(Android 的传统语言)被认为过于冗长,Kotlin 的受欢迎程度上升至 1%,并在当时的 TIOBE

2022-09-10

工程师 骆涛博士毕业于中国科学技术大学,研究方向高性能计算,目前负责 Paddle 主框架开源生态建设。 彭靖田,品览联合创始人兼CTO 彭靖田是 Google Developers Expert,加州大学访问学者,毕业于浙江大学竺可桢学院。 张

2023-06-28

器人。Hassabis 一月份透露称,他们考虑将在今年某个时候发布 Sparrow 的私人测试版;但目前上不清楚这些计划是否仍在按计划进行。 除了推动谷歌的 AI 工作进展外,Hassabis 同时也身兼管理未知和潜在严重风险的责任。针对最近

2022-11-20

美国计算机架构师、软件工程师和计算机科学家 Fred P. Brooks 于当地时间 2022 年 11  月 17 日去世,享年 91 岁 (1931 年 4 月 19 日 - 2022 年 11 月 17 日)。 Fred 曾领导了 IBM System/360 系列计算机和 OS/360 软件支持包的开发,