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

时间:2009-08-11 09:29:11

标签: optimization performance

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

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

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

8 个答案:

答案 0 :(得分:12)

所有统计数据中有80%是现场弥补的,包括这一数据。

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

答案 1 :(得分:9)

我不相信它本来应该被视为一个确切的数字。只是“几乎所有的时间。”

答案 2 :(得分:6)

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

答案 3 :(得分:4)

回答这部分问题:

  

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

如果研究符合相关学科中“研究”的规范,就会发表研究成果。例如:

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

  • 医学需要具有统计学意义的研究结果。大样本的双盲研究是理想的,但这些研究通常过于昂贵,或出于道德原因而不可能。

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

  • 哲学家们喜欢这样一个好论点......“我想,nuf对他们说了些什么。

除了数学之外,几乎所有的研究论文都会有一定程度的主观性。但这并不一定会让他们变坏。主观陈述本身只是一个问题,如果读者可能会误解为客观。

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

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

  

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

这是主观的,但Knuth显然没有在这里提出客观性。相反,他正以一种特别精辟和令人难忘的方式提供一些建议。这是让研究论文有趣阅读的东西,IMO。

据记录,97%的有经验的软件开发人员共享了Knuth的意见。 (我刚刚提到: - )

答案 4 :(得分:1)

我认为Knuth的陈述主要是“声望论证”。谁会辩论它?

我是一名教授,而且相信我,教授们会抛出很多松散的断言,特别是在计算机科学方面。

我最喜欢的教授有盲点的例子与软件性能有关,他们继续进行大O和棘手的编译器优化,同时完全忽略了由于山区过度设计导致的巨大软件和大量低效率的工业现象

答案 5 :(得分:1)

我相信Mike Dunlavey的答案是最接近的答案。我相信Knuth因为他是'Knuth'而逃脱了这一点。想象一下像我这样的人在一篇论文中说出这句话。好吧......也许很多人会同意我的意见,但直到理论证明,我的论文才会被接受。

人们分享了Knuth的感受,因为他们知道谁是Knuth。想象一下,他不知道Knuth是谁,我可以说他拒绝这个陈述的可能性会更大(Stephen:它不再是97%;)

答案 6 :(得分:0)

  

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

因为研究不仅仅是事实,它也是公认的权威观点,不论是事实支持还是非事实,也可以是直觉。请记住,爱因斯坦并不相信海森堡的不确定性原则。

答案 7 :(得分:0)

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

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

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

真实的数字会因环境而异,但需要注意的是,Knuth试图用这个数字来表达的是,过早的“优化者”可能会尝试优化一切,无论是否它实际上是至关重要的(无论它是否真正表现出真正的改进)。