APP下载

Julia 1.5改进多执行绪功能正式发布稳定版API

消息来源:baojiabao.com 作者: 发布时间:2024-05-09

报价宝综合消息Julia 1.5改进多执行绪功能正式发布稳定版API

资料科学家爱用程式语言Julia现在释出了1.5版本,经过多年发展,多执行绪功能终于在这个版本,从实验性功能进入稳定阶段,另外,官方还加入了新的函式库,也改进了建置系统。

官方在这个版本,进行了一项重要的最佳化,便是最佳化结构配置(Struct Layout)以及分配(Allocation),这个改进将能够极大程度降低部分工作负载的堆分配。Julia中有可变和不可变两种物件,以Struct宣告的纪录类型是不可变物件,当开发者想要使其转为可变,则必须使用可变结构宣告,Julia会自动为每种类型选择内存配置和呼叫惯例。

官方解释,在这个版本之前要对不可变物件的配置进行最佳化,存在许多限制,因为不可变物件指向可变物件的堆分配时,那其本身就必须要进行堆分配,而在Julia 1.5之后,任意不可变物件都可以进行堆叠分配,按值传递和回传,并内联储存在阵列或是其他物件中,简单来说,不可变物件参照可变值,现在变得更有效率,就像是不可变结构参照其他不可变物件一样。

之所以这项改进很重要,是因为许多重要抽象,都只能透过将可变物件打包在结构中实作,官方表示,这项最佳化带来的加速程度并没有很大,是因为Julia的分配器本身就非常高效能,只是让View物件不再需要堆分配。

从Julia 0.5开始,官方开始加入实验性多执行绪平行运算功能,到了现在1.5版,终于成为稳定功能。Julia的平行运算能力,一直是官方的重点工作之一,每个版本官方都会增加执行绪安全性,并且持续添加新的功能,特别是在Julia 1.3,更是执行绪功能的一个里程碑,加入了可组合多执行绪的@spawn结构。

由于目前已经有许多Julia开发人员正在使用执行绪功能,而且功能本身也趋于稳定,因此官方认为,已经不适合将执行绪功能标上实验性标签,因此将大多数执行绪API都标记为稳定,并使@sync和SuiteSparse系结成为执行绪安全,还加入新的语法@threads。

官方为Julia编译器添加每模组最佳化等级功能,也就是说开发人员可以指定每个模组最佳化的等级,官方提到,编译时间和执行时间是一个权衡,为了让初始使用体验更好,他们预设最佳化等级为-O2,而这和gcc或clang中的-O2选项差不多,但因为并非所有程式码都对效能影响很大,而且也有越来越多Julia开发者,载入较大的套件执行绘图,或是其他非内部循环支援的工作,为了减少这类套件编译延迟时间,现在开发者可以指定每个模组最佳化等级,像是可将Plots.jl指定为@optlevel 1,这代表该套件将使用-O1最佳化等级,可以减少首次绘制时间约三分之一。

2020-08-04 16:48:00

相关文章