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>
为适当的值(例如,1G
或512M
)。
这一增强功能在 #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/

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Dart 3 正式发布,100% 健全的空安全
Dart 3 现已发布,这是迄今为止最大的 Dart 版本,包含了三个主要改进:完成了 100% 健全的空安全;添加了记录、模式和类修饰符的新语言特性;以及对未来进行了预览,即,通过 Wasm 编译扩大了对网络原生代码的平台支持。 100% 健全的空安全 Dart 3 已经成为了一种 100% 健全的空安全语言。100% 的空安全性为Dart 带来了健全的类型系统。你可以相信,如果一个类型说一个值不是null,那么它永远不可能是null。这避免了某些类别的编码错误,例如空指针异常。它还允许编译器和运行时以没有空安全性无法实现的方式优化代码。虽然这种设计会使得迁移变得有点困难,但开发团队认为,他们为 Dart 做出了正确的选择。 预计绝大多数已迁移到 null safety 的包和应用程序都可以与 Dart 3 一起使用。在少数情况下,Dart 3 中的少量相关清理可能会影响某些代码。一些旧的核心库 API 已被删除(#34233、#49529)并且一些工具已被调整(#50707)。如果用户在迁移到使用 Dart 3 SDK 时遇到任何问题,可查阅Dart 3 迁移指南。 主要语言特性 ...
- 下一篇
Flutter 3.10 发布
Flutter 3.10 现已发布,此版本包括了对 Web、mobile、图形、安全性等方面的许多改进。 一些更新亮点包括: Material 3:Material库现在符合最新的Material Design spec,变化包括新组件和组件主题、更新的组件视觉效果等。开发者必须使用useMaterial3主题标志"opt in"这些变化。在下一个稳定版中,useMaterial3默认为true。 ColorScheme.fromImageProvider() 方法 NavigationBar:这提供了一个 M3 版本的BottomNavigationBar小部件。 NavigationDrawer:提供了一个基于 Drawer 小部件的M3 destination selection 小部件。 SearchBar 和 SearchAnchor 二级标签栏,为M3 更新了 DatePicker、TimePicker、BottomSheet、ListTile以及Drawer。 TextField 更新 Flutter 支持 SLSA level 1 Web Flutter Web 应用程...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果