【问题标题】:why does Julia uses column major? is it fast为什么 Julia 使用专栏专业?快吗
【发布时间】:2017-12-07 09:32:50
【问题描述】:

我已经阅读了很多关于 Julia 及其性能的文章。但是在哪里,我可以找到有关为什么 julia 团队决定使用列专业进行矩阵运算的线索。是不是因为他们对矩阵的操作方式适合列专业或其他东西。

提前谢谢。

【问题讨论】:

  • 大多数计算都可以用所有变量转置来重写。这会将行变成列。选择的顺序使一侧的向量乘以比另一侧更快,一旦做出选择,您应该将选择传播到算法中的所有其余计算。具体来说,乘以w*AA*v 慢。于是就有了答案:人们更喜欢A*v
  • 线性代数更方便一点,它继承自Matlab,这是寻找用户友好linalg灵感最明显的地方。另外,你必须选择some维度,选择first维度而不是second不是更自然吗?为什么不是第三个,或者最后一个。让第二维度最快一直让我觉得特别奇怪和武断。
  • 可能是因为大多数数字库最初是用 Fortran 编写的,它使用列优先存储,然后模仿数学中的向量按惯例列的事实。同样适用于 Matlab,它最初是一种与一些 Fortran 线性代数包对话的便捷方式。
  • 不,不是列专业比行专业快或慢。您可以选择是否需要快速列操作或快速行操作。一个本身并不比另一个快。
  • 我知道这是严重的吹毛求疵,但不,C 在设计上不是“行专业”,这只是一个人如何创建多维数组的结果记忆。例如,对于 3 维数组,最里面的维度将是内存中连续的一维,而不是第二维。而在设计时考虑到数组/矢量化编程的科学编程语言往往会明确决定如何在内存中表示此类数组。大多数科学编程语言都选择如上所述的“向量”表示。 Python 是一个例外,主要是作为历史意外

标签: performance matrix julia


【解决方案1】:

“Julia 中的多维数组以列优先顺序存储。这意味着数组一次堆叠一列。这可以使用 vec 函数或语法 [:] ... 进行验证”

“这种对数组排序的约定在 Fortran、Matlab 和 R(仅举几例)等许多语言中很常见。列优先排序的替代方法是行优先排序,这是 C 和 Python 采用的约定(numpy) 在其他语言中。”

有关性能差异的示例和讨论,请参阅 Julia 手册的 Performance Tips 部分。

【讨论】:

  • 来自链接:“数组连续存储在内存中,有助于 CPU 矢量化,并且由于缓存而减少内存访问。这些与建议以列优先顺序访问数组的原因相同(见上文)。”
猜你喜欢
  • 2016-02-16
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 2016-03-05
  • 2018-07-24
  • 1970-01-01
相关资源
最近更新 更多