如何有效地添加两个非常大的矩阵?

时间:2013-10-23 13:33:52

标签: c++ arrays matrix

我有两个非常大的矩阵。问题是使用for循环添加它们需要时间。我开始知道我们可以在C ++中使用运算符重载来添加矩阵。这样做会减少执行时间吗?

4 个答案:

答案 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是丑陋的,如果你无法访问商业实现,那么表现就不那么好了。