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


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

可变结构字段上的 const

Julia 支持使用 const 注释对可变结构的各个字段进行注释:

mutable struct T
x::Int
const y::Float64
end

这导致字段 y 保持不变(在创建类型后无法重新分配),可以用来强制执行不变量,编译器也可以利用它来改进生成的代码。

Call site @inline

在 Julia 1.8 之前,@inline 宏只能用于方法定义,且该函数将在方法的所有调用点内联。

现在还可以将@inline 宏作为@inline f(x) 应用于给定的调用站点,告诉编译器在特定调用处内联该方法。

类型化的全局变量

Julia 中的非常量全局变量会带来性能损失,因为编译器无法推断它们的类型,它们在运行时可以重新分配给其他类型的另一个对象。

在 Julia 1.8 中可以使用 x::T 语法指定非常量全局变量的类型,其中 T 是全局变量的类型。此时尝试将变量重新分配给另一种类型的对象时会出错:

julia> x::Int = 0
0

julia> x = "string"
ERROR: MethodError: Cannot `convert` an object of type String to an object of type Int64
...

类型化全局变量消除了使用非常量全局变量的大部分成本。

@threads 新的默认调度程序

在 Julia 1.3 中引入通用并行任务运行时之前,Julia 就有了用于并行化 for 循环的 @threads 宏。 由于这个历史原因,@threads 一直提供静态调度,以避免意外依赖这种严格行为而破坏程序。

为了多任务系统能更好工作, Julia 1.5 中引入了 :static 调度程序,为将来更改默认调度行为做好准备。而在 Julia 1.8 中,使用 @threads 编写的程序可以充分利用动态和可组合的任务调度程序。在 Julia 1.8 之前,该程序模拟需要 6 秒钟才能完成:

julia> @time begin
Threads.@spawn busywait(5)
Threads.@threads for i in 1:Threads.nthreads()
busywait(1)
end
end
6.003001 seconds (16.33 k allocations: 899.255 KiB, 0.25% compilation time)

在 1.8 版本中一个未占用的线程可以运行两次 1 秒的迭代来完成 for 循环,因此程序跑完只需要 2 秒:

julia> @time begin
Threads.@spawn busywait(5)
Threads.@threads for i in 1:Threads.nthreads()
busywait(1)
end
end
2.012056 seconds (16.05 k allocations: 883.919 KiB, 0.66% compilation time)

新的分配分析器 Profiling

不必要的堆分配会严重降低性能,而现有的跟踪工具(@time 和 --track-allocation)不能提供足够的细粒度细节、良好的可视化和易用性。

Julia 1.8 有了新的分配分析器 (Profile.Allocs),它使用每个类型、大小和堆栈跟踪来捕获堆分配,并使用 PProf.jl 轻松可视化。

如下所示,VS Code 的 Julia 扩展通过 @profview_allocs 提供对图解分析功能:

Packages 更新

添加了一个新工具(宏: InteractiveUtils.@time_imports),以深入了解加载依赖项对包加载时间的影响,该宏在 REPL 中直接可用。

julia> @time_imports using CSV
 50.7 msParsers 17.52% compilation time
0.2 msDataValueInterfaces
1.6 msDataAPI
0.1 msIteratorInterfaceExtensions
0.1 msTableTraits
 17.5 msTables
 26.8 msPooledArrays
193.7 msSentinelArrays 75.12% compilation time
8.6 msInlineStrings
 20.3 msWeakRefStrings
2.0 msTranscodingStreams
1.4 msZlib_jll
1.8 msCodecZlib
0.8 msCompat
 13.1 msFilePathsBase 28.39% compilation time
 1681.2 msCSV 92.40% compilation time

编译时间以百分比显示。

 

其他内容还包括改进的预编译、改进了对 Apple Silicon 的支持等,更多内容可在官方博客中阅读。


相關推薦

2023-05-11

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

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 软件支持包的开发,