Optimization 有没有好的,现代的,在线的指南来手工优化汇编代码?

Optimization 有没有好的,现代的,在线的指南来手工优化汇编代码?,optimization,assembly,Optimization,Assembly,我正在编写一些代码,其中包含一些(编译器生成的)汇编代码块,我们已经确定这些代码块是速度瓶颈 我对组装有足够的了解,可以混过去并寻找手动优化——不过,我想知道是否有好的在线指南提供可重用的技术用于手动优化组装。这并不是我期望我必须经常做的事情,所以很可能我每次都必须从头开始学习如何做。 -必须购买,强调本质而不是组装 我会说“玩得开心”,但这可能真的很刻薄:( 我想你对第9章“速度优化”很感兴趣。虽然这可能不需要说 一般来说,通过帮助编译器,您将更进一步(我将使用GCC作为示例,但这也应该适用于

我正在编写一些代码,其中包含一些(编译器生成的)汇编代码块,我们已经确定这些代码块是速度瓶颈

我对组装有足够的了解,可以混过去并寻找手动优化——不过,我想知道是否有好的在线指南提供可重用的技术用于手动优化组装。这并不是我期望我必须经常做的事情,所以很可能我每次都必须从头开始学习如何做。

-必须购买,强调本质而不是组装

我会说“玩得开心”,但这可能真的很刻薄:(


我想你对第9章“速度优化”很感兴趣。虽然这可能不需要说

一般来说,通过帮助编译器,您将更进一步(我将使用GCC作为示例,但这也应该适用于其他编译器):

  • 暂时使用编译器选项(-march=native,-mfpmath=sse,-msse3,-marm,-mthumb)
  • 尽可能使用分析信息(-fprofile generate,-fprofile Use)
  • 调整算法以查看是什么产生了“更好”的代码(
    (x>>8)&0xFF
    (x&0xFF00)>>8
    ?这是PPC上的一条指令,但编译器可能使用两条)
  • 调整算法,使其更好地使用缓存
  • 如果编译器支持,请使用。编译器可能有其他(,)
  • 使用更好的编译器(RVCT用于ARM,ICC用于x86)

如果你能在一个像样的C编译器上获得20%以上的速度,我会感到惊讶,除非编译器没有使用特定的指令/功能。20%很少值得写在家里,除非它是你的应用程序所能做的。

我同意前面的答案,建议你的优化手册。它们真的很棒

然而,除此之外,英特尔和AMD还提供了一些免费提供的优化手册,例如,您可能对以下内容感兴趣:


Agner Fog的网站似乎是一个常见的回应。多年来,我发现另一个特别有用的页面是Paul Sheieh在


这本书看起来不错。我还推荐第13章关于向量编程。如果您有特定的体系结构,请适当标记(“x86”或“arm”或其他内容).1作为一个好的答案,并抵消不必要的否决票——这是非常重要的一点——在现代CPU的优化方面,很难打败一个好的编译器