APP下载

资料科学爱用程式语言Julia将加入多执行绪平行运算功能

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

报价宝综合消息资料科学爱用程式语言Julia将加入多执行绪平行运算功能

高阶通用程式语言Julia官方宣布,在1.3.0 Alpha测试版开始加入多执行绪任务平行(Task Parallelism)功能,这仍是1.3.0的早期预览版本,正式版预计将会在数个月后推出。

随着软件效能提升,越来越仰赖在多个处理器核心同时执行工作,官方过去为Julia添加了多程序、分散式程式开发和GPU运算功能,官方提到,他们受到英特尔TBB(Threading Building Blocks)和Go的启发,现在再次增加了多执行绪,为Julia程式加入全新的执行绪界面。

任务平行化模型可以允许多个程式平行执行,而任务将在可用的执行绪上同时执行所有的程式码,官方提到,这个平行化功能运作的方式,类似垃圾回收模型,开发者可以自由地分配物件,而不需要担心这些物件在什么时候应该被释放,而任务平行化则让开发者可以自由地发布数百万个任务,而不需要担心任务在哪个执行绪上执行。

Julia采用的这个模型是可移植的,而且没有低阶细节,开发者不需要主动启动和停止执行绪,甚至不需要关心系统有多少处理器和执行绪。除此之外,这个平行模型可支援使用巢状结构,并且是可组合的,开发者可以呼叫函式库的平行任务,而这些任务还可以启动自己的平行任务。

透过多执行绪工作平行化功能,Julia程式可以排程许多呼叫函式库函式的平行任务,官方提到,这是高阶语言很重要的功能,因为在高阶语言程式需要经常呼叫函式,而Julia增加了平行运算的能力,同时也就为整个Julia套件生态系增加了多核平行运算的能力。

目前这个多执行绪任务平行化功能仍有许多限制,官方提到,在实作上,每一个任务都需要有自己的执行堆叠,但这与一般Unix操作系统提供的程序与执行绪堆叠不同,因此Julia自己实作了一个替代切换堆叠,不过,这是需要在任务切换时,以时间来交换内存空间的折衷做法。

另外,任务现在也无法在不同执行绪中搬迁,官方提到,这在未来的版本会修正。而且为了避免CPU的使用率总是维持100%,因此系统会让部分任务睡眠,但当一些执行绪在其他执行绪继续睡眠的时候排程新工作,则会产生同步上的问题。

官方提到,多执行绪任务平行功能的发展,从Julia 0.1就开始,他们提供了对称式协作程式功能,并将其应用于事件I/O上,因此Julia程式中总会有一个并行单元运作,在2014年,官方明确的认为Julia需要基于执行绪的平行化功能,在开发垃圾收集器以及执行绪本地储存功能时,奠定了一些基础。

在2016年Julia 0.5版本提供了宏执行绪(Threads for Macro)功能,可以让开发者在所有核心中,简单地处理平行循环,但这个多执行绪有着巨大的限制,与任务和I/O系统不相容,开发者无法在执行绪循环中,进行任何I/O或是在任务间切换。2016年之后官方投入更多的人力,在平行化这项功能的开发,最后花了约两年的时间,现在得以在Julia中开始真正提供多执行绪能力。

2019-07-26 11:52:00

相关文章