【问题标题】:Another question about premature optimization关于过早优化的另一个问题
【发布时间】:2010-11-18 13:27:43
【问题描述】:

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

我很好奇他是如何得出 97% 的。有人可以分享一下吗?

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

【问题讨论】:

  • 请注意“说大约 97%”和“事实是 97%”之间的巨大差异。
  • 我很确定在他后来写的论文中,他解释说,每当你考虑过早优化时,你应该掷 5d20,然后只有当你掷到 98 或更高时才继续。
  • @Mark,他说 97%。你的掷骰子会给出 99.99934375%。 Knuth 会知道使用百分骰子。
  • 这里有多少 D&D 玩家? :)
  • Knuth 花了数年时间弄清楚这个数字。

标签: optimization performance


【解决方案1】:

正如其他人指出的那样,只是一个粗略的数字。值得注意的是,从 70 年代(1974 年)开始,支持使用 goto 语句来加速软件中可测量的关键路径的引用。

当时应用程序的性质有点不同。硬件如此紧凑和有限,但没有说光线追踪产品的一半软件可能包括尝试追踪一千亿条光线并以速度为最终目标调用着色器。

如果我们想象像 Adob​​e Photoshop 这样的软件,可能至少有四分之一的软件会花费在循环像素上,而任何图像循环都对性能至关重要,因为它可以轻松循环数百万像素(只需取数我们的显示器显示为“基本”图形的像素)。因此,他们可能有四分之一或更多的代码库对关键路径进行建模,并真正受益于多线程、SIMD 或 GPU 处理等微观级别的优化。

真实数据会因上下文而大相径庭,但需要注意的一点是,Knuth 试图用该数据表达的是,一个不成熟的“优化器”很可能会尝试优化所有内容,无论是否这实际上很关键(以及它是否真的显示出真正的改进)。

【讨论】:

    【解决方案2】:

    我相信 Mike Dunlavey 的回答是最接近的。我相信 Knuth 能侥幸逃脱只是因为他是“Knuth”。想象一下像我这样的人在一篇论文中说这句话。嗯……也许很多人会同意我的观点,但是在理论上证明之前,我的论文不会被接受。

    人们分享了 Knuth 的感受,因为他们知道 Knuth 是谁。想象一下,他不知道 Knuth 是谁,我可以说他拒绝该陈述的概率会大大增加(斯蒂芬:不再是 97% ;))

    【讨论】:

      【解决方案3】:

      这句话写在一篇研究中 论文,怎么来的主观陈述 在这样的正式文件中被接受?

      因为研究不仅是事实,它也是公认权威的观点,无论是否有事实支持,也有直觉。请记住,爱因斯坦不相信海森堡测不准原理。

      【讨论】:

      • 爱因斯坦相信海森堡是对的,他只是讨厌 H. 的理论所带来的后果,他花了很多年时间寻找不同的解释。
      【解决方案4】:

      我认为Knuth的说法主要是“声望论”的一个案例。谁来辩论?

      我曾是一名教授,相信我,教授们可以逃脱许多松散的断言,尤其是在计算机科学领域。

      我最喜欢的一个例子,教授们眼花缭乱的地方与软件性能有关,他们继续讨论大 O 和棘手的编译器优化,而完全忽略了由于大量过度设计而导致的巨大软件和大量低效率的工业现象.

      【讨论】:

        【解决方案5】:

        回答这部分问题:

        这句话写在一篇研究中 论文,怎么来的主观陈述 在这样的正式文件中被接受?

        如果研究满足相关学科中“研究”的规范,则该研究会被发表。比如:

        • 实验物理和化学需要可重复的结果。如果结果不可重复,则对研究人员不利。

        • 医学需要具有统计学意义的研究结果。大样本量的双盲研究是理想的,但此类研究通常过于昂贵,或者出于伦理原因而无法进行。

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

        • 哲学家喜欢一个很好的论据......我认为 nuf 谈到了他们。

        除了数学之外,几乎所有研究论文都存在一定程度的主观性。但这并不一定会使它们变坏。主观陈述本身只有在读者容易将其误解为客观的情况下才会成为问题。

        计算机科学和软件工程学科的论文特别容易出现一定程度的主观性。我认为这是不可避免的,因为在许多 CS/SE 领域中,进行能够让人们做出完全客观陈述的实验真的很困难(昂贵)。例如,您如何衡量过早的优化(而不是其他)是否导致了问题?或者更具体地说,如何客观地衡量单体内核是否优于微内核?

        关于 Knuth 的引用(我假设):

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

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

        郑重声明,97% 的经验丰富的软件开发人员都赞同 Knuth 的观点。 (我只是编造的:-)

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

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

            我想你会发现Jon Skeet 的想法是对的。

            【讨论】:

            • +1,是的,很好的玩笑,顺便说一句,无论如何都不能精确地统计数据;)
            • 没错,另外 15% 只能被解释,无疑会导致滥用常识的新方法和改进方法。
            • “有多少研究表明了这一点?” - “八十七”。 dilbert.com/strips/comic/2008-05-08
            【解决方案8】:

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

            【讨论】:

            • 问题是这个陈述是写在一篇研究论文中的。论文怎么这么主观就被接受了?
            • 这个问题与编程无关,我的朋友。
            • 这不(部分)研究是什么?即引用已发表的作品。
            • @kevindtimm:原论文中没有提及参考
            • 很多人故意不优化他们的代码,因为它不需要优化(不是瓶颈),这样做会要么降低可读性,要么只花时间。
            猜你喜欢
            • 1970-01-01
            • 2020-07-18
            • 2010-10-20
            • 2011-10-23
            • 1970-01-01
            • 1970-01-01
            • 2011-05-15
            • 2011-10-31
            • 1970-01-01
            相关资源
            最近更新 更多