gpt4 book ai didi

optimization - 优化的汇编代码 (BLAS)

转载 作者:行者123 更新时间:2023-12-03 16:41:13 33 4
gpt4 key购买 nike

因此,关于通过汇编代码提高性能的问题的答案通常是“别打扰,编译器比你更聪明”。我明白了。

但是,我注意到优化的线性代数库(例如 ACML)可以实现比标准编译库高 2 到 5 倍的性能改进。例如,在我的 8 核机器上,我优化矩阵乘法的运行速度比现有的单线程 BLAS 实现快 30 倍,这意味着,在考虑到由于使用所有内核而带来的 8 倍改进之后,仍然有 4 倍仅从优化中改进。

所以在我看来,优化的汇编代码确实可以产生巨大的不同。我错过了什么吗?

我在问,因为如果它不是特别困难,我可能倾向于在其他一些代码段上尝试这个。没什么复杂的,但如果我可以通过在汇编中编写一些小的内部循环获得 2 倍的改进,这可能是值得的。

最佳答案

矩阵-矩阵乘积的加速仅部分是由于使用了汇编代码。在一个简单的实现中,主要瓶颈是内存访问。大多数情况下,您的 CPU 将等待进行实际计算。

您首先必须修改矩阵-矩阵乘法的算法,以便可以尽可能频繁地重用 L2 和 L1 缓存中的数据。这可以在 C(或 C++ 或 Fortran 或 ...)中完成。当矩阵大小变得大于缓存时,这将导致实现不会崩溃。这也意味着该实现可以一直进行计算(CPU 寄存器中需要的数据几乎总是在 L1 缓存中,L1 缓存中需要的数据几乎总是在 L2 缓存中,......)。

下一步是优化所有计算完成的热点。这仅涉及几行 C 代码(在我的 GEMM Tutorial 中只有 10 行)。汇编代码对指令流水线、循环展开(用于改进分支预测)、预取(用于减少缓存未命中)、使用 SSE(或 AVX)进行优化。

类似的技术可用于其他 BLAS 级别 3 功能。实际上他们中的大多数使用GEMM函数的内部东西(所谓的微内核)。

ulmBLAS benchmarks您会看到,大约所有 BLAS 级别 3 功能都可以实现大致相同的性能。

为了更彻底的阅读,我建议您阅读漂亮的书面论文 The Science of Programming Matrix Computations作者:Robert A. van de Geijn 和 Enrique S. Quintana-Ortí。
你也可能想看看 BLIS大多数想法都是为 ulmBLAS 采取和简化的.

关于optimization - 优化的汇编代码 (BLAS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17845972/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com