首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >软件优化与硬件优化--什么影响更大?

软件优化与硬件优化--什么影响更大?
EN

Software Engineering用户
提问于 2012-05-23 15:19:40
回答 6查看 10K关注 0票数 8

我想知道软件优化和硬件优化如何比较它们对计算机的速度和性能提高的影响。

我听说,多年来提高软件效率和算法取得了巨大的性能提高。显然两者都非常重要,但在过去的10、20或30年里,是什么造成了更大的影响呢?

硬件的变化如何影响软件的变化?软件优化有多少是硬件改进的直接结果,有多少是独立于硬件的?

明确地说,我询问的是编译器和操作系统级别的软件优化。显然,使用更好的高层次算法将导致最大的速度提高(想想:快速排序与泡沫排序),但是这个问题是关于计算机为什么今天更快的根本原因。

EN

回答 6

Software Engineering用户

回答已采纳

发布于 2012-05-23 19:07:37

性能的更大提高肯定来自于硬件。

在软件方面,过去30年来最大的变化之一是我们编写的代码没有以前那么多了。例如,软件现在依赖于自动编译器优化,而不是手工编写的程序集,并且广泛使用过去几十年来已经成熟的现有框架和模式。另一方面,软件变得越来越复杂,出现了相应的性能问题。

然而,硬件能力的提高主要是根据摩尔定律,CPU速度和内存带宽在过去30年里增加了数百倍。制造工艺有所改进,使元件变得更小更快,因为更多的晶体管可以组装在一起。加快计算机速度的最大因素之一是内存访问和缓存的使用。CPU缓存大小现在比以前的总RAM要大,低级别的程序已经转移到更好地利用这一点。此外,当64位CPU变得司空见惯时,需要一个相应的指令集(即x86-64,其使用可能仍然被限定为“软件”)来适当地利用这一点。通过这种方式,它是硬件改进的组合,软件设计的变化更好地利用了这些改进。

简而言之,性能上最大的增量来自于硬件--然而,要优化使用新的硬件,往往需要对软件进行更改。不管哪一种没有另一种都不起作用!

票数 7
EN

Software Engineering用户

发布于 2012-05-23 16:33:53

我听说多年来软件效率和算法的提高带来了巨大的性能提升。

我认为你在这里听到的是关于更好的算法,但这就是你明确排除在你的问题之外的东西。

在操作系统层面上,我认为今天没有多少应用程序比10年前运行得更快,因为操作系统已经有所改进(在大多数情况下恰恰相反--大多数OSs每年都越来越大,产生更多的开销)。唯一的例外可能是对多处理器和并行计算的更好支持,但这不能被看作是独立于硬件改进的。

对于编译器来说,过去几十年来有了一些改进,但对性能影响最大的是支持新硬件特性的改进。IMHO并行计算功能(多核、SIMD等)64位处理是这里要提到的最重要的事情。编辑:在过去10-20年里,编译器软件的改进使应用程序性能提高了大约一个数量级:实时编译器,尤其是用于Java的编译器(自1999年起),以及后来的Javascript。

因此,它主要归结于硬件。在20或30年前,主要是处理器时钟速度,在许多应用程序中,应用程序性能的增加大约是1:1 (这不是完全正确的,因为应用程序的性能也取决于其他硬件组件,如内存访问速度、硬盘驱动器速度、GPU速度等)。想想过去的10年,处理器时钟速度并没有增加多少,因为处理器厂商已经到了实际生产的极限。相反,出现了向并行计算的范式转变。近十年来,多核处理器、GPU计算(这也是并行计算的一种形式)、主流SIMD等都占据主导地位。

票数 6
EN

Software Engineering用户

发布于 2012-05-23 19:57:16

如果硬件的加速比为2倍,那么每件事都比以前快了2倍。

如果一个新的编译器优化提供了2倍的加速比,那么这也使得所有的事情都比以前快了2倍。

这些加在一起将使事情比以前快4倍。

在此之前,有一个非常古老的规则:大自然厌恶真空。如果内存里有多余的空间,就会有人把它填满。如果磁盘上有多余的空间,就会有人把它填满。如果你的CPU上有多余的周期,有人会使用它们。

不会吧?找到有500 the处理器和3gb磁盘的旧的废弃笔记本电脑,并尝试在其上安装一些新的软件。

程序员(包括我)倾向于编写耗尽可用周期的代码,而不管多少辛勤工作的工程师给了我们多少,也不总是为了更多的功能。

票数 5
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/149855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档