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/

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYXZrI4T' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片