【发布时间】:2016-06-03 05:42:45
【问题描述】:
我目前正在使用 Julia,但我有一个性能关键函数,它需要对固定大小的小矩阵(3 维或 4 维)进行大量重复的矩阵运算。似乎 Julia 中的所有矩阵运算都由 BLAS 和 LAPACK 后端处理。在其中一些函数中似乎还进行了大量的内存分配。
small matrices 有一个 julia 库,它拥有令人印象深刻的 3x3 矩阵加速,但它已经 3 年没有更新了。我正在考虑在Eigen 中重写我的性能关键函数
我知道 Eigen 声称对于固定大小的矩阵非常有用,但我仍在尝试判断是否应该在 Eigen 中重写此函数。性能benchmarks 适用于动态大小的矩阵。有没有人有任何数据表明一个人从固定大小的矩阵中获得了多少性能?我正在做的操作类型是矩阵x矩阵,矩阵x向量,正定线性求解。
【问题讨论】:
-
完成一些基准测试并亲自看看。这是肯定地回答这个问题的唯一方法。确保使用优化编译 Eigen。在启用和不启用 OpenMP 的情况下尝试一下。
-
回忆这句话的好时机:“优化的第一条规则:不要这样做!”,或者 Knuth 的明智之言:“过早的优化是万恶之源。”。积极的一面是:如果存在特定的性能瓶颈,那么在问题中分享一些代码会有所帮助。
-
你试过
Base.LinAlg.matmul3x3!这个模块的其他功能吗?它们绕过 BLAS 并允许最少的分配计算。 -
这个很有意思,没试过,我看看。之后还有其他专门针对 3x3 矩阵的函数吗?
-
我想你的答案就在这里:github.com/SimonDanisch/FixedSizeArrays.jl