优化代码是否变得不必要?

jke*_*eys 7 optimization performance gpu cpu-speed moores-law

如果摩尔定律成立,并且CPU/GPU变得越来越快,那么软件(以及协会,您的软件开发人员)是否仍然会在您仍然需要优化代码的范围内突破界限?或者一个天真的因子解决方案是否足以满足您的代码(等)?

mqp*_*mqp 31

2倍的处理能力对改善糟糕的n ^ 2搜索的可怕性没有太大帮助.

  • 但它可以让你搜索40%以上的数据! (5认同)

lav*_*nio 18

糟糕的代码总能克服CPU速度.

有一个很好的例子,请转到这个Coding Horror专栏,然后向下滚动到描述Programming Pearls一书的部分.转载的图表显示,对于某种算法,具有4.77MHz 8位处理器的TRS-80如何能够击败32位Alpha芯片.TRS-80 vs. Alpha

加速的当前趋势是增加更多核心,因为使个别核心变得更快是困难的.因此总体速度上升,但线性任务并不总是有益.

"没有蛮力和无知无法克服的问题"并非总是如此.


Cra*_*rks 13

计算机越快,我们就越期望它们.

  • 有一个最大的素数?酷ey;) (5认同)

Nos*_*dna 13

无论是视频游戏中更多多边形的更快代码,还是金融市场交易的更快算法,如果有更快的竞争优势,优化仍然很重要.你不必去追逐追逐你和你的伙伴的狮子 - 你只需要外出你的好友.


Sho*_*og9 12

在所有程序员第一次编写最佳代码之前,总会有优化的地方.同时,真正的问题是:我们应该首先优化什么?

  • 阿门 - 打算写一些类似+1的东西.优化也可能意味着"wtf是那个人在写那个粪便时的想法." (4认同)

Ale*_*lli 10

摩尔定律谈到我们可以在芯片上装多少个晶体管 - 对于能够以越来越快的速度切换的晶体管,没有什么可说的.实际上,在过去的几年中,时钟速度或多或少停滞不前 - 我们只是不断变得越来越多"核心"(基本上是完整的CPU)每个芯片.要利用这一点需要并行化代码,所以如果你正在"天真地"编写,那么未来的神奇优化器将忙于在你的代码中发现隐藏的并行性,这样它就可以将它转移到多个核心(更现实地,对于在可预见的未来,你将不得不帮助你的编译器;-).


Igo*_*kon 10

Wirth定律:

软件变得越来越慢,硬件变得越来越快.

PS更严重的是:随着计算模型转向并行处理,代码优化变得更加重要.如果你优化你的代码2x并且它在1个单独的盒子上运行5分钟而不是10分钟,那可能不是那么令人印象深刻.具有2倍速的下一台计算机将对此进行补偿.但想象一下你在1000个CPU上运行你的程序.然后任何优化都会节省大量的机器时间.和电.优化并拯救地球!:)


Sin*_*ion 6

计算任务似乎分为大致两大类.

  1. 有限计算需求的问题.
  2. 无限计算需求的问题.

大多数问题都适合第一类.例如,实时3D光栅化.很长一段时间,这个问题是典型的消费电子产品所无法企及的.没有令人信服的3D游戏或其他程序可以在Apple上产生实时世界[].最终,技术赶上了,现在这个问题是可以实现的.类似的问题是蛋白质折叠的模拟.直到最近,才有可能将已知的肽序列转化为所得的蛋白质分子,但是现代硬件可以在几小时或几分钟的处理过程中实现.

但是有一些问题,它们本质上可以吸收所有可用的计算资源.其中大多数是动态物理模拟.显然它可以执行比如天气的计算模型.只要我们有电脑,我们就一直这样做.然而,这种复杂的系统受益于提高的准确性.在更精细的空间和时间分辨率下进行仿真可以逐位改进预测.但无论任何给定的模拟具有多大的准确性,都可以获得更高的准确性,并获得以下好处.

两种类型的问题都具有用于优化所有种类的非常重要的用途.第二种类型是相当明显的.如果进行模拟的程序稍微改进一点,那么它运行得更快一点,结果会更快或更准确.

不过,第一个是更微妙的.在一段时间内,没有任何优化是值得的,因为没有足够快的计算机存在.经过一段时间,优化有点毫无意义,因为运行它的硬件比所需的快很多倍.但是有一个狭窄的窗口,在这个窗口期间,最佳解决方案将在当前硬件上可接受地运行,但是不是最佳解决方案.在此期间,仔细考虑优化可能是首次上市的产品与之间的差异.