- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
似乎 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 .某些向量/矩阵操作的隐式多线程在理论上已经在 Julia 中可用,因为 Julia 调用了 BLAS。我不确定它是否默认开启。
但请注意,许多矢量化操作(目前)在 MATLAB 中仍然会更快,因为 MATLAB 多年来一直在编写专门的多线程 C 库,然后在后台调用它们。一旦 Julia 拥有原生多线程,我预计 Julia 将超过 MATLAB,因为那时整个开发社区都可以搜索标准的 Julia 包并升级它们以尽可能利用原生多线程。
相比之下,MATLAB 没有 native 多线程,因此您依赖 Mathworks 以底层 C 库的形式提供专门的多线程例程。
关于multithreading - 为什么鼓励 Julia 中的去向量化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34780503/
我认为允许在 Haskell 中进行任意链式比较会很好,因此您可以进行简单的范围检查,例如: x ), (>=), (==), (/=)) class Booly v a where truthy
(请注意,当我说“JVM”时,我的意思是“热点”,我正在运行最新的 Java 1.6 更新。) 示例情况: 我的 JVM 运行时 -Xmx 设置为 1gb。目前,堆分配了 500mb,其中 450mb
我试图利用 上的崩溃安全漏洞Ubuntu 16.04 ,带有未修补的 内核 4.8.0-36 在 英特尔酷睿-i5 4300M 中央处理器。 首先,我使用内核模块将 secret 数据存储在内核空间中
假设我想在 do 中 fork 一个线程-notation block ,但我不关心线程ID。如果我写 forkIO action GHC 发出警告 Warning: A do-notation st
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 8 年前。 Improve
我正在用 Java 探索一棵树,但我的内存有限。我通过查看占用统计数据来处理这个问题,当我超过 80%(比如说)时,停止分配树的新位以避免内存不足。只需使用我到目前为止所得到的 20% 净空进行计算即
我是一名优秀的程序员,十分优秀!