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

How to add two very large matrices efficiently?

本文关键字:非常 两个 有效地 添加      更新时间:2023-10-16

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

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

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

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

运算符

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

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

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

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

将您的矩阵放入 valarray 或使用专门的库,例如特征。Blas 很丑陋,如果你无法访问商业实现,那么性能就不是特别好了。