如何有效地添加两个非常大的矩阵
How to add two very large matrices efficiently?
我有两个非常大的矩阵。问题是使用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 很丑陋,如果你无法访问商业实现,那么性能就不是特别好了。
相关文章:
- 如何在C++中从两个单独的for循环中添加两个数组
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- 如何返回一个类的两个对象相加的结果
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 两个字符串在 c++ 中不相等
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 两个文件使用彼此的功能-如何解决
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 如何确保在使用基于布尔值的两个方法之一调用方法时避免分支预测错误
- 停止cmake target_link_libraries将插件中静态库的两个对象文件链接到静态库本身
- 将fold表达式与std::一起用于两个元组
- 当两个功能非常相似时,如何避免复制和粘贴?
- 维护/维持两个代码集的风险,一个用于 CPU,一个用于 GPU,需要执行非常相似的功能
- 在不使用递归的情况下将 FFT 应用于两个非常大的数字的乘法
- 两个非常大的数字的乘积的第一个数字
- 如何有效地添加两个非常大的矩阵
- C++将具有非常相关数据的类 Tree 拆分为两个类
- 从两个非常大的数组中查找公共元素