“优化延迟”是一个神话还是真实的?

时间:2009-06-29 13:42:42

标签: optimization

您不时会听到故事,这些故事旨在说明某人有多善于某事,有时您会听到这个人如何进行代码优化,以便优化他的延迟循环。

因为这听起来真的很奇怪,因为开始“定时器中断”而不是优化的buzy等待会好得多, 并且没有人倾向于告诉你优化黑客的名字。

这让我想知道这是一个都市神话还是真的?

你说什么,现实还是虚构?

由于 约翰


更新:听起来像ShuggyCoUk的东西, 想知道我们是否能找到一个例子。

更新:稍微澄清一下,这个问题是关于它自身的“延迟”功能以及如何实现,而不是如何以及在何处调用它。 那个目的是什么,以及该系统如何变得更好。

更新:这不是神话,那些家伙似乎存在

由于 ShuggyCoUk

3 个答案:

答案 0 :(得分:4)

这不仅仅是关于它的真相......

旋转等待可以比基于信号的中断或产量更好。

  • 您可以交换一些吞吐量,从而大大减少延迟。
    • 在操作系统本身中,这通常非常重要。
  • 您允许自己在中断处理程序中自由执行操作
      例如,
    • 内存分配。
  • 您可以对等待的间隔进行相当精细的控制,因为您基本上可以测量循环次数。

然而旋转等待是正确的。

  • 如果可以,您应该使用适当的空闲指令:
    • 可以关闭核心部分,提高功耗/散热,甚至允许其他核心更快。
    • 在基于超线程的CPU中allow the other logical thread to use the full CPU pipeline while you spin
    • 您可能认为是无操作的指令可能导致CPU通过超级标量执行单元无序执行它们。由此产生的代码可能会出现无法预料的乱序伪像,迫使CPU在停滞和内存障碍方面投入大量精力。

这就是为什么在大多数情况下让别人为你编写旋转等待循环的原因..

关于使用PAUSE进行旋转等待的一些引用:

  • PostGresSQL
  • Linux
    • 另请注意,由于功率降低,这在非P4上也会更好

答案 1 :(得分:2)

我一直听到的版本是一群硬件程序员,他们开发了一条特殊指令,优化了操作系统的空闲(非忙)循环。 Kernighan & Pike's book 编程实践中提到了这一点,但即便如此,他们也承认它可能是一种都市神话。

答案 2 :(得分:0)

我听过程序员故意在项目早期故意放入长延迟循环的故事,并在以后删除它们作为“优化”以给管理留下深刻印象。从未弄清楚这些故事是否是杜撰的。