gpt4 book ai didi

multithreading - 为什么鼓励 Julia 中的去向量化?

转载 作者:行者123 更新时间:2023-12-03 21:20:49 25 4
gpt4 key购买 nike

似乎 Julia 鼓励编写去向量化代码。
甚至还有一个 package试图为你做到这一点。

我的问题是为什么?

首先,从用户体验方面来说,向量化的代码更简洁(更少的代码,那么错误的可能性更小),更清晰(因此更容易调试),更自然的编写代码的方式(至少对于那些来自科学计算背景, Julia 试图迎合)。能够写出类似 vector'vector 的东西或 vector'Matrix*vector非常重要,因为它对应于实际的数学表示,这就是科学计算人员在头脑中的想法(而不是嵌套循环)。而且我讨厌这样一个事实,即这不是编写它的最佳方式,将其重新解析为循环会更快。

目前,编写快速代码的目标与简洁/清晰的代码之间似乎存在冲突。

其次,这是什么技术原因?好的,我知道矢量化代码会创建额外的临时文件等,但是矢量化函数(例如, broadcast()map() 等)具有对它们进行多线程处理的潜力,我认为多线程的好处可以超过临时的开销和向量化函数的其他缺点使它们比常规 for 循环更快。

Julia 中向量化函数的当前实现是否在幕后进行了隐式多线程处理?

如果没有,是否有工作/计划向矢量化函数添加隐式并发并使它们比循环更快?

最佳答案

为了便于阅读,我决定将上面的评论马拉松变成答案。

core development statement Julia 的背后是“我们很贪婪”。核心开发人员希望它做所有事情,并且做的很快。特别要注意的是,该语言应该解决“双语问题”,在现阶段,它看起来会在 v1.0 到来时完成。

就您的问题而言,这意味着您所询问的所有内容要么已经是 Julia 的一部分,要么已计划用于 v1.0。

特别是,这意味着如果您的编程问题适用于矢量化代码,那么请编写矢量化代码。如果使用循环更自然,请使用循环。

到 v1.0 出现时,大多数矢量化代码应该与 Matlab 中的等效代码一样快或更快。在许多情况下,这个开发目标已经实现,因为编译器将 Julia 中的许多向量/矩阵运算发送到适当的 BLAS 例程。

关于多线程,目前正在为 Julia 实现原生多线程,我相信在 master 分支上已经有一组实验性的例程可用。相关问题页面是here .某些向量/矩阵操作的隐式多线程在理论上已经在 J​​ulia 中可用,因为 Julia 调用了 BLAS。我不确定它是否默认开启。

但请注意,许多矢量化操作(目​​前)在 MATLAB 中仍然会更快,因为 MATLAB 多年来一直在编写专门的多线程 C 库,然后在后台调用它们。一旦 Julia 拥有原生多线程,我预计 Julia 将超过 MATLAB,因为那时整个开发社区都可以搜索标准的 Julia 包并升级它们以尽可能利用原生多线程。

相比之下,MATLAB 没有 native 多线程,因此您依赖 Mathworks 以底层 C 库的形式提供专门的多线程例程。

关于multithreading - 为什么鼓励 Julia 中的去向量化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34780503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com