代码之家  ›  专栏  ›  技术社区  ›  nanda

关于过早优化的另一个问题

  •  1
  • nanda  · 技术社区  · 16 年前

    Knuth说: 我们应该忘记小效率,比如说97%的时间:过早的优化是万恶之源。

    我很好奇他是怎么得出97%的结果的。有人能分享一下吗?

    更新:问题是:这句话是写在一篇研究论文中的,为什么在这样的正式文件中接受主观陈述呢?

    8 回复  |  直到 9 年前
        1
  •  12
  •   Community CDub    8 年前

    80%的统计数据都是现场统计的,包括这个。

    我想你会发现的 Jon Skeet 有正确的想法。

        2
  •  9
  •   Jon Skeet    16 年前

    我不认为这是一个确切的数字。只是“几乎总是”。

        3
  •  6
  •   Ali Parr    16 年前

    我不相信它应该是字面上的。在某些情况和环境中,优化是最重要的(因此97%而不是99%),但对于大多数程序员来说,编写大多数软件时,大多数时间优化只应在必要时和适当的分析之后进行。

        4
  •  4
  •   Stephen C    16 年前

    回答这部分问题:

    这句话是研究中写的 论文,怎么会有主观陈述 接受这样的正式文件?

    如果研究满足相关学科中“研究”的规范,那么它就会被公布。例如:

    • 实验物理和化学需要可重复的结果。如果结果不可复制,这是对研究人员的一个黑色标记。

    • 医学需要有统计意义的研究结果。具有大样本量的双盲研究是理想的,但这种研究往往过于昂贵,或者出于伦理原因不可能进行。

    • 数学家需要证明。你最好不要滑倒。

    • 哲学家喜欢一个很好的论点…'我想是纽夫说的。

    除了数学之外,几乎所有的研究论文都会有一定程度的主观性。但这并不一定会使他们变得糟糕。主观陈述 本身 只有当读者容易误解它们是客观的时候才是问题。

    计算机科学和软件工程学科的论文特别容易受到一定程度的主观性的影响。我认为这是不可避免的,因为在许多CS/SE领域,做实验是非常困难的(昂贵的),这将使人们能够作出完全客观的陈述。例如,如何衡量过早的优化(而不是其他什么)是否导致了问题?或者更具体地说,你如何客观地衡量一个整体的内核是否比一个微内核更好?

    关于Knuth的报价(我假设):

    我们应该忘记小的 效率,比如97%的 时间:过早的优化是 万恶之源。

    这是主观的,但克努斯显然没有在这里假装客观性。相反,他以一种特别简练和令人难忘的方式给出了一些建议。这是一种让研究论文变得有趣的东西。

    据记录,97%经验丰富的软件开发人员都认同Knuth的观点。(我刚刚编了一个——)

        5
  •  1
  •   Mike Dunlavey    16 年前

    我认为,克努斯的陈述主要是一个“声望辩论”的案例。谁来辩论?

    我是一位教授,相信我,教授们可以摆脱许多松散的断言,尤其是在计算机科学方面。

    我最喜欢的例子是,教授们对软件性能有偏见,他们继续进行大O和复杂的编译器优化,同时完全忽略了Gi标准软件的工业现象,以及由于过度设计而导致的大量效率低下。

        6
  •  1
  •   nanda    16 年前

    我相信迈克·邓拉维的答案是最接近的。我相信克努斯能逃脱这一切仅仅是因为他是“克努斯”。想象一下像我这样的人在报纸上说的话。好。。。也许很多人会同意我的观点,但在理论上证明之前,我的论文是不会被接受的。

    人们都有Knuth的感觉,因为他们知道谁是Knuth。假设他不知道克努斯是谁,我可以说,他拒绝这个声明的概率会大得多(斯蒂芬:不会再高达97%)。

        7
  •  0
  •   Stefano Borini    16 年前

    这句话是研究中写的 论文,怎么会有主观陈述 接受这样的正式文件?

    因为研究不仅是事实,也是公认权威的观点,不管事实是否支持,也取决于直觉。记住,爱因斯坦不相信海森堡不确定性原理。

        8
  •  0
  •   Dragon Energy    9 年前

    正如其他人所指出的,只是一个粗略的数字。值得注意的是,Qoute是70年代(1974年)的,赞成使用 goto 加速软件中测量的关键路径的语句。

    当时应用程序的性质有点不同。硬件是如此的紧凑和有限,但没有人说,光线跟踪产品,其中一半的软件可能包括试图跟踪1000亿光线和调用具有终极速度目标的着色器。

    如果我们想象像Adobe Photoshop这样的东西,他们的软件中可能至少有四分之一会花在像素上,而任何图像循环都是性能关键的,因为它可以轻松地循环通过数百万像素(只需将监视器显示的像素数作为“基本”数字)。因此,他们可能有四分之一或更多的代码库建模关键路径,并真正受益于微级优化,如多线程、SIMD或GPU处理。

    真实的数据会因上下文的不同而变化很大,但值得注意的是,Knuth试图用这个数据来表达的是,一个过早的“优化器”可能会很好地尝试优化所有东西,不管它是否真的很关键(以及它是否真的显示出真正的改进)。