我有两个非常大的矩阵。问题是使用for
循环添加它们需要时间。我开始知道我们可以在C ++中使用运算符重载来添加矩阵。这样做会减少执行时间吗?
答案 0 :(得分:5)
将循环移动到重载运算符中没有任何区别。
提高性能的一种方法是使用专门的库,例如BLAS。高质量的BLAS实现(例如,Intel's MKL)将比您可能手动编码的任何内容快得多。
有关BLAS的C ++包装器的一些指示,请参阅LAPACK wrappers for C/C++(问题是关于Windows,但答案比这更广泛。)
答案 1 :(得分:1)
运算符被视为C ++中的所有其他函数,因此只需将添加函数更改为运算符而不更改逻辑就不会有帮助。
您可能需要使用某种SIMD计算。
答案 2 :(得分:0)
执行此操作的一种方法是使用x86扩展名中提供的向量运算符。请查看此示例http://en.wikipedia.org/wiki/Streaming_SIMD_Extensions#Example
如果您使用gnu或visual studio,它们可能具有内置的内在函数,您可以将其称为函数而不是在汇编中进行编码。
答案 3 :(得分:0)
将你的矩阵放到valarray或使用专门的库,例如eigen。 Blas是丑陋的,如果你无法访问商业实现,那么表现就不那么好了。