在哪里可以了解低级,硬核性能的东西?

时间:2011-08-31 16:02:00

标签: performance optimization assembly profiling low-level

这实际上是一个2部分问题:

对于想要挤压每个时钟周期的人,人们会谈论管道,缓存局部性等。

  1. 我已经看到了这里和那里提到的这些低水平的表现技术,但我从头到尾都没有看到对这个主题的一个很好的介绍。任何资源建议? (谷歌给了我定义和论文,我非常感谢某些实用的实例/教程真实的动手实物材料)

  2. 一个人如何衡量这种事情?就像在某种形式的探查器中一样?我知道我们总是可以改变代码,回顾一下改进和理论,我只是想知道是否有成熟的工具。

  3. (我知道算法优化是大小顺序的地方。我对这里的金属感兴趣)

5 个答案:

答案 0 :(得分:3)

回复的合唱是“不要过早优化”。正如你所提到的,你会从更好的设计中获得更多的性能,而不是更好的循环,你的维护者也会欣赏它。

那说,回答你的问题: 学习装配。装配很多很多。当你可以换班时,不要以2的幂为MUL。了解xor的奇怪用法来复制和清除寄存器。具体参考, http://www.mark.masmcode.com/http://www.agner.org/optimize/

是的,您需要为代码计时。在* nix上,它可以像time { commands ; }一样简单,但您可能希望使用全功能分析器。 GNU gprof是开源的http://www.cs.utah.edu/dept/old/texinfo/as/gprof.html

如果这真的是你的事,那就去吧,玩得开心,记住,很多很多位数学。你的维护者会讨厌你;)

答案 1 :(得分:2)

EDIT / REWRITE:

如果是书籍,你需要迈克尔·阿布拉什在这方面做得很好,汇编语言的禅,一些杂志文章,大黑图书编程等等。他所调整的大部分内容不再是问题,问题已经改变。你将从中得到的是可以导致瓶颈和各种方法解决的各种事物的想法。最重要的是计算所有时间,并了解您的计时测量如何工作,这样您就不会通过错误测量来欺骗自己。计算不同的解决方案,尝试疯狂,奇怪的解决方案,你可能会发现一个你不了解的优化,直到你暴露它才意识到。

我刚开始阅读但是看到MIPS Run(早期/第一版)到目前为止看起来不错(请注意,ARM接管MIPS作为处理器市场的领导者,所以MIPS和RISC炒作有点陈旧)。关于MIPS,有许多新旧教科书。 Mips是为性能而设计的(在某些方面以软件工程师为代价)。

今天的瓶颈属于处理器本身及其周围的I / O类别以及与I / O相关的内容。处理器芯片本身(对于高端系统)的内部运行速度比I / O可以处理的速度快得多,所以在你必须离开芯片并永远等待之前,你只能调整到目前为止。下火车,从火车到目的地,乘坐火车3个小时快半分钟,不一定是值得的优化。

关于学习硬件,你可以保持在零和零的世界,而不必进入实际的电子产品。但是,如果不真正了解接口和内部结构,您实际上无法进行太多的性能调整。您可能会重新安排或更改一些说明并获得一些提升,但要使速度提高几百倍,您需要更多。学习许多不同的指令集(汇编语言)有助于进入处理器。我建议模拟HDL,例如opencores中的处理器,以了解一些人如何进行设计并掌握如何真正挤出任务中的时钟。处理器知识很大,内存接口是一个巨大的交易,需要学习,媒体(闪存,硬盘等)和显示器和图形,网络,以及所有这些东西之间的所有类型的接口。在时钟级别或尽可能接近它的理解是它需要的。

答案 2 :(得分:1)

Intel和AMD提供x86和x86-64的优化手册。

http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html/

http://developer.amd.com/documentation/guides/pages/default.aspx

另一个优秀的资源是agner。

http://www.agner.org/optimize/

一些关键点(没有特别的顺序):

  • 对齐;内存,循环/功能标签/地址
  • 缓存;非时间提示,页面和缓存未命中
  • 分支机构;分支预测和避免分支与比较和移动操作码
  • 矢量;使用SSE和AVX指令
  • 操作代码;避免慢速运行操作码,利用操作码融合
  • 吞吐量/管道;重新排序或交错操作代码以执行单独的任务,避免部分存档并使处理器的ALU和FPU饱和
  • 循环展开;为单个“循环比较,分支”执行多次迭代
  • 同步;使用原子操作码(或LOCK前缀)来避免高级同步构造

答案 3 :(得分:1)

答案 4 :(得分:1)

是的,衡量,是的,了解所有这些技术。

有经验的人会告诉你“不要过早优化”,我将其简单地称为“不要猜测”。

他们也会说“使用分析器来找到瓶颈”,但我有一个问题。我听到很多关于人们使用剖析器的故事,他们喜欢他们很多或者喜欢他们的输出。 SO满满的。

我没有听到很多成功案例,并且实现了加速因素。

我使用的方法非常简单,我试图提供很多例子,including this case