如何提高标准矩阵乘法算法的效率?
该方法涉及的主要操作是:C[i][j]+=A[i][p]*B[p][j]
可以做些什么来提高算法的效率?
最佳答案
您可能想看看使用 BLAS(基本线性代数子例程)库,特别是英特尔提供的 MKL here , AMD 有他们的 ACML here还有(开源)Goto BLAS here .
(密集)矩阵-矩阵乘法内核将是一个 ?GEMM
调用,其中 ?
表示浮点类型。例如 DGEMM
将调用 double
例程。
除非您非常有信心知道自己在用低级优化做什么,否则这些库可能会提供比您可以手动编写的代码更好的性能。
如果您确实想尝试自己编写代码,那么您可能需要考虑以下几点:
- 使用“向量”指令。
SSE、SSE2..4
指令得到广泛支持,一些较新的CPU
也将支持AVX
指令。 - 展开嵌套循环以最大化浮点运算与加载/存储运算的比率。
- block 级算法以确保有效的缓存使用。
- 多线程。
此引用资料可能会让您了解当前的状态:
High-performance implementation of the level-3 BLAS - K Goto.
希望这对您有所帮助。
关于performance - 提高标准矩阵乘法算法的效率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6900711/