-6

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

4

4 回答 4

5

将循环移动到重载运算符中不会有任何区别。

提高性能的一种方法是为此使用专门的库,例如BLAS。高质量的 BLAS 实现(例如,英特尔的 MKL)将比您可能手动编写的任何代码都要快得多。

有关 BLAS 的 C++ 包装器的一些指示,请参阅C/C++ 的 LAPACK 包装器(问题是关于 Windows,但答案比这更广泛)。

于 2013-10-23T13:37:22.410 回答
1

运算符被视为与 C++ 中的所有其他函数一样,因此只需将添加函数更改为运算符而不更改逻辑将无济于事。

您可能需要使用某种 SIMD 计算。

于 2013-10-23T13:37:12.107 回答
0

一种方法是使用 x86 扩展中可用的向量运算符。检查此示例http://en.wikipedia.org/wiki/Streaming_SIMD_Extensions#Example

如果您使用 gnu 或 Visual Studio,它们可能具有内置的内在函数,您可以将其作为函数调用,而不是在汇编中编码。

于 2013-10-23T13:41:35.573 回答
0

Put your matrices to valarray or use specialized library for that, eigen for instance. Blas is ugly and if you do not have access to commercial implementations not particularly well performing any more.

于 2013-10-23T13:45:23.823 回答