Optimization 是";“优化延迟”;是神话还是真实?

Optimization 是";“优化延迟”;是神话还是真实?,optimization,Optimization,有时你会听到一些故事来说明某人在某件事情上有多么出色,有时你会听说这个家伙是如何如此热衷于代码优化,以至于优化了他的延迟循环 因为这听起来很奇怪,因为启动“计时器中断”比优化的buzy等待要好得多, 没有人会告诉你黑客的名字 这让我怀疑这是一个城市神话还是真实的 你说什么,现实还是虚构 谢谢 约翰 更新:听起来ShuggyCoUk好像发现了什么, 不知道我们是否能找到一个例子 更新:仅作一点澄清,这个问题是关于“延迟”功能本身以及如何实现它,而不是如何以及在何处调用它。 这个目的是什么,以及这

有时你会听到一些故事来说明某人在某件事情上有多么出色,有时你会听说这个家伙是如何如此热衷于代码优化,以至于优化了他的延迟循环

因为这听起来很奇怪,因为启动“计时器中断”比优化的buzy等待要好得多, 没有人会告诉你黑客的名字

这让我怀疑这是一个城市神话还是真实的

你说什么,现实还是虚构

谢谢 约翰


更新:听起来ShuggyCoUk好像发现了什么, 不知道我们是否能找到一个例子

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

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

谢谢
ShuggyCoUk

我一直听到的版本是一群硬件程序员开发了一种特殊指令,优化了他们操作系统的空闲(非忙)循环。《编程实践》中提到了这一点,但即使在那里,他们也承认这可能是一个城市神话。

我听过一些程序员的故事,他们在项目早期有意加入长延迟循环,后来将其作为“优化”删除,以给管理层留下深刻印象。从来没有弄清楚这些故事是否是虚构的。

这不仅仅是真相的核心

自旋等待比基于信号的中断或屈服要好得多

  • 您可以用一些吞吐量来换取大大减少的延迟。
    • 这在操作系统本身中通常是至关重要的
  • 您可以自由地执行中断处理程序中不可能执行的操作
    • 例如,内存分配
  • 您可以对等待的时间间隔进行更细粒度的控制,因为您基本上可以测量周期计数
然而,旋转等待很难做到正确

  • 如果可以,应使用适当的怠速说明,其中包括:
    • 可以关闭内核的部分电源,提高功耗/散热,甚至可以让其他内核运行得更快
    • 在基于超线程的CPU中,您可以
    • 您可能认为是no op的指令可能会导致CPU通过超标量执行单元无序执行它们。由此产生的代码可能会出现不可预见的无序伪影,迫使CPU在不需要的暂停和内存障碍方面付出大量努力
这就是为什么在大多数情况下,您会让其他人为您编写自旋等待循环

  • 在Linux中有

    • 手臂上是障碍物()
    • 在x86上,这是rep_nop()
  • 窗户里有

    • 可通过.Net访问
  • OSX,除非您在内核中

    • 请参阅并注意,它鼓励仅使用lck_spin_\t
关于使用暂停进行旋转等待的一些引用:

    • 另请注意,由于降低了功耗,这在非P4上也更好

我写了一个答案,但由于它已经关闭,我将留下一条评论:这不仅仅是关于它的真相的核心。。。自旋等待比基于信号的中断或屈服要好得多。您可以用一些吞吐量来换取大大减少的延迟。这在操作系统本身中通常是至关重要的。您可以自由执行中断处理程序中不可能执行的操作,例如内存分配。您可以使用适当的空闲指令:关闭部分内核的电源,提高功耗/散热,甚至允许其他内核运行得更快。在基于超线程的CPU中,您允许另一个逻辑线程在旋转时使用完整的CPU管道。您可以对等待的时间间隔进行更细粒度的控制,因为您基本上可以测量周期计数。这就是为什么在大多数情况下,你让其他人为你编写旋转等待循环…我怀疑他们会将buzy等待转换为buzy等待,但实际上是某种睡眠模式。我不明白为什么这是关闭的,这是一个问题,与编程有关(如果是真的)但这是另一种“把戏”,那就是不让项目经理插手……但这很有趣;)不,没有关系。但我听到的关于这些延迟的说法是,当管理层希望看到结果时,“团队”稍微减少了这些延迟(并且无法显示其他结果)。因此,管理者们总是时不时地得到很好的基准,他们可以将基准剪切并粘贴到powerpoint中,通过这样做,他们在一两周内都有喘息的空间……这一定是虚构的。在出现PowerPoint之前,我就听过这个故事。:-)我不这么认为,但这是一个关于咖啡休息时间的好故事;)