Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 提高标准矩阵乘法算法的效率?_Performance_Algorithm_Matrix - Fatal编程技术网

Performance 提高标准矩阵乘法算法的效率?

Performance 提高标准矩阵乘法算法的效率?,performance,algorithm,matrix,Performance,Algorithm,Matrix,如何提高标准矩阵乘法算法的效率 这种方法涉及的主要操作是:C[i][j]+=A[i][p]*B[p][j] 如何提高算法的效率?我建议阅读的第1章,它解决了这个确切的问题。我建议阅读的第1章,它解决了这个确切的问题 缓存阻塞-确保正确使用和重用缓存中的值 更好的算法-按定义乘法矩阵的方法不是最优的,请看 并行化-如果你的机器有多个核心和/或处理器,你可以分而治之 SIMD—利用现代CPU体系结构中的矢量指令 GPGPU—现代GPU经过优化,可以做这类事情。调查和调查 请注意,使用这些方法并不能保

如何提高标准矩阵乘法算法的效率

这种方法涉及的主要操作是:
C[i][j]+=A[i][p]*B[p][j]


如何提高算法的效率?

我建议阅读的第1章,它解决了这个确切的问题。

我建议阅读的第1章,它解决了这个确切的问题

  • 缓存阻塞-确保正确使用和重用缓存中的值
  • 更好的算法-按定义乘法矩阵的方法不是最优的,请看
  • 并行化-如果你的机器有多个核心和/或处理器,你可以分而治之
  • SIMD—利用现代CPU体系结构中的矢量指令
  • GPGPU—现代GPU经过优化,可以做这类事情。调查和调查
  • 请注意,使用这些方法并不能保证更好的性能。需要进行大量调整,以显著提高速度。有很多钱花在研究如何快速乘法矩阵上,因此不缺少关于这个主题的期刊文章

  • 缓存阻塞-确保正确使用和重用缓存中的值
  • 更好的算法-按定义乘法矩阵的方法不是最优的,请看
  • 并行化-如果你的机器有多个核心和/或处理器,你可以分而治之
  • SIMD—利用现代CPU体系结构中的矢量指令
  • GPGPU—现代GPU经过优化,可以做这类事情。调查和调查

  • 请注意,使用这些方法并不能保证更好的性能。需要进行大量调整,以显著提高速度。有很多钱花在研究如何快速乘法矩阵上,因此这方面的期刊文章并不短缺。

    如果问题涉及多重矩阵乘法-M1 x M2 x。。。然后还有另一种基于动态规划的优化技术,这是另一种球类游戏。注意,这不适用于提高两个矩阵相乘的效率;但是,如果您以成对方式将三个或更多矩阵相乘,则可以在更高级别上进行优化。我只是想把这个答案扔到堆上,把信息凑成一个整数。

    如果这个问题涉及多重矩阵乘法-M1 x M2 x。。。然后还有另一种基于动态规划的优化技术,这是另一种球类游戏。注意,这不适用于提高两个矩阵相乘的效率;但是,如果您以成对方式将三个或更多矩阵相乘,则可以在更高级别上进行优化。我想我会把这个答案扔到堆上,把信息凑成一个整体。

    你可能想看看BLAS(基本线性代数子程序)库的使用情况,特别是Intel提供了他们的MKL,AMD有他们的ACML,还有(开源)Goto BLAS

    (密集)矩阵乘法内核将是一个
    ?GEMM
    调用,其中
    表示浮点类型。例如,
    DGEMM
    将调用
    double
    例程

    除非您非常有信心知道如何使用低级优化,否则这些库可能会提供比手动编写代码更好的性能

    如果你真的想自己编码,那么你可能需要考虑以下内容:

  • 使用“矢量”指令<代码>SSE、SSE2..4指令得到广泛支持,一些较新的
    CPU
    也将支持
    AVX
    指令
  • 嵌套循环展开以最大化浮点操作与加载/存储操作的比率
  • 分块算法可确保缓存的有效使用
  • 多线程 此参考资料可能会让您了解事物的当前状态:

    3级BLAS-K Goto的高性能实现


    希望这有帮助。

    您可能想看看如何使用BLAS(基本线性代数子程序)库,特别是Intel提供的MKL、AMD提供的ACML以及(开源)Goto BLAS

    (密集)矩阵乘法内核将是一个
    ?GEMM
    调用,其中
    表示浮点类型。例如,
    DGEMM
    将调用
    double
    例程

    除非您非常有信心知道如何使用低级优化,否则这些库可能会提供比手动编写代码更好的性能

    如果你真的想自己编码,那么你可能需要考虑以下内容:

  • 使用“矢量”指令<代码>SSE、SSE2..4指令得到广泛支持,一些较新的
    CPU
    也将支持
    AVX
    指令
  • 嵌套循环展开以最大化浮点操作与加载/存储操作的比率
  • 分块算法可确保缓存的有效使用
  • 多线程 此参考资料可能会让您了解事物的当前状态:

    3级BLAS-K Goto的高性能实现

    希望这能有所帮助。

    根据矩阵的大小,有一种算法比您列出的标准算法稍微快一点。当然有,但实现起来并不是那么简单

    标准算法是O(N^3), 斯特拉森的算法是O(N^2.8), 铜匠Winograd是O(N^2.3)

    嗯,根据矩阵的大小,它比您列出的标准算法稍微快一点。当然有,但实现起来并不是那么简单