11越5日,三年前的这一周,阿姆达尔去世了,他是最伟大的计算机架构师之一、阿姆达尔法则的提出者、微软FUD策略的提出者、“地狱常客”。这一天,吴军老师在得到APP专栏发文介绍了阿姆达尔法则。
以下前半部分来自吴军老师的文章,后半部分是我的思考。
阿姆达尔法则是IT行业得以快速进步的战术,与之相对的是摩尔定律,这是IT行业的战略。我们对后者都比较熟悉,但对前者却很陌生,虽然我们或许在很多领域用过这一法则。
阿姆达尔在IBM期间设计了大型计算机“系统360”,这是历史上最成功的大型机,没有之一,它和随后的变种今天仍然为蓝色巨人带来数十亿美元的收入。
阿姆达尔在设计计算机系统时,充分认识到计算机各部分的性能必须平衡匹配,才能得到整体性能最佳的系统,他将这种思想用一个简单的公式描述出来,请看下图:
公式这就是阿姆达尔法则。在公式最左边的大写S,代表系统的最后性能提升或加速,右边分母的小写s代表系统内某一项性能的提升,比如把内存速度提高了2倍,右边的s就是2倍,右边的p代表这项性能被用到的比例或概率,比如内存的读写访问占用了计算机程序运行的20%时间。
好了,在这样假定的前提下,如果你把内存的速度翻一番,也就是s=2,那么整个计算机性能的提升是多少呢?根据这个公式,是提升11%,这个好像还不错。如果你把内存提升100倍,整个计算机的速度提升12.47%,这个就不太有效了。
在每一次设计新的计算机产品时,都会有各种技术突破可供使用,但是考虑到成本因素和设计的复杂度,都需要有所取舍,那么该引入哪些技术呢?阿姆达尔法则是计算机行业做选择的铁律。接着看下面这个例子:
假如说,内存读写占用程序运行时间的20%,处理器占用60%,现在有两个技术,一个可以将内存读写速度提高5倍,另一个可以将处理器速度提高50%,受到成本和研发时间的限制,下一个版本该选用何种技术呢?表面看来,20%的5倍肯定比60%的50%要大得多,阿姆达尔法则给出的结论则恰恰相反,根据上面公式,内存新技术只能让整体性能提高20%,而处理器是25%。
接下来,假定一年后又要推出一个新系统,而内存与处理器提升的性能与上次一样,那这一次该选哪个技术呢?很多人会说继续提高处理器性能,很遗憾,根据阿姆达尔法则,这一次该提升内存性能了。请注意,这一次处理器所占用程序运行时间,也就是p,从之前的60%下降为50%,那么再提高处理器的油水就没那么多了。事实上,这一次提高处理器只能让整体性能提高20%,而提高内存则可以让整体性能提升25%。
阿姆达尔法则是整个计算机领域的铁律,不但在硬件产品设计、软件开发与调试方面是原则,还可以作为研发投入的依据。也就是说如果当前计算机某个部分陷入瓶颈拖了后腿,就必须集中精力与经费进行突破。这也解释了为什么计算机领域的一些关键突破总是恰逢其时,比如2000年后CPU的发展放缓,因为太快了内存和硬盘跟不上,2005年之后基于新的半导体技术,闪存的固态硬盘快速发展,容量扩展成本降低,这是因为磁质硬盘成了计算机大型服务器的瓶颈。
与阿姆达尔法则相反的做法是,尽捡些容易改进的地方改进,比如某些工程主管做了一辈子存储就永远强调存储的重要性,熟悉处理器就强调处理器的重要性。这样一来,没有原则的公司要么面面俱到,要么做没有必要的投入,用不了几年,进步的速度就落后了。
这就是攻城与守城的关系,当一项改进完成之后,相应部分所占资源比重就下降,人必须转移到下一项去解决瓶颈问题。
阿姆达尔法则不断适用于计算机领域,在经济学和资源调配上也有指导意义,比如二氧化碳减排。目前各国政府还在为二氧化碳等温室气体的减排政策而争论不休,为什么没有结果呢?因为提倡二氧化碳减排的国家在全球碳排放中占比很少,在整个欧洲除俄罗斯以外,碳排放最多的五个国家是德国、英国、意大利、法国、波兰,他们只占全球碳排放的6%,即便降到0也没太大作用,而中国和美国加起来占全球碳排放43%,这两个国家如果能降低15%,就比上面五个国家还多。
对于个人来说。阿姆达尔法则也是决定我做什么和不做什么的原则。对于那些只能产生1%贡献的事情,即便你提高100倍作用也有限,但对于有一半作用以上的事情,哪怕提高5%,你都能看到整体2.5%的提高。当然,当一些问题得到解决之后,它的重要性就下降了,我们就要着手解决新的瓶颈问题。
我们个人在运用阿姆达尔法则的时候,还可能遇到下面三个问题。
1、阿姆达尔法则与将一件事做到极致是否冲突呢?
阿姆达尔法则从本质上来讲是一个做事优先级顺序的原则,并不是说事情不要做到极致,因此它们并不矛盾
阿姆达尔是从整体上优化一个系统,一个整体包括很多部分,先优化哪个部分,后优化哪个部分就有讲究了,阿姆达尔法则是帮助大家挑出当前最需要优化的部分,当然这并不意味着其他部分不需要优化了,只是优先级低罢了。
在优化整个系统的过程中,通常瓶颈问题被解决了之后,它就从主要矛盾下降为次要矛盾,比如说原先占据计算读取时间50%的内存下降为20%,下一次或许就要改进其他问题了,而不是继续提高内存速度,因为其他问题就可能成为瓶颈问题,改进之后对整体效率提升会更明显。因此,IT行业大家采用阿姆达尔法则一遍又一遍改进计算机系统的性能,可能有些部分在一次次循环改进中已经实现了做到极致。
2、阿姆达尔法则如何用在生活中?
在应用阿姆达尔法则的时候,量化度量、数据、测试非常重要。
计算机的性能是可以通过标准测量得出的,可以准确地判断出计算机在完成程序时每一个部分所需的时间。但是在现实工作中,其实没有这样现成的测试工具,需要自己根据实际工作来设计或者采用其他办法来得到统计数据,经验是不准确的。现在数据非常重要,在没有数据支持的情况下最好不要下结论。
3、阿姆达尔法则是时间管理重要的守则,永远做那些对结果贡献比例最大的事情。但是我在生活和工作中遇到的事情是这样的,一件事情对未来的贡献是50%,另一件事对现在的贡献是10%,那么该如何取舍?是做对未来贡献大的事情还是对现在贡献大的事情呢?
其实考虑这一问题非常简单,眼前这个10%的事情如果不做是否有麻烦,如果麻烦不大,那建议还是做对未来有50%贡献的事情。
我的思考
为什么我要一个字一个字的将吴军老师的文章内容敲出来,因为这个阿姆达尔法则对我有很大的启发,它推动了计算机行业的快速进步,我也在追求个人的快速进步。
有一点是共识,找到最重要的事情,全力以赴。可是“什么最重要?”其实有很多模糊的地方,笑来老师两年前丢下这句话,后来的践行中果然遇到问题了,现在结合今天的这个阿姆达尔法则与以往的思考总结一下。
1、量化。什么最重要?我以前毫不犹豫的回答“成长”,可是,成长太模糊了,很多都能让自己成长,自己最需要什么呢?不同方面的占比如何?目前的性能如何?都不知道,因为没有量化。
2、动态滚动。最重要的事情当然是占比最高的,去做了对整体提升也最大。但现在占比最高,不代表永远最高,最重要的事情是不断动态滚动变化的,需要轮动发展。
3、密度。这是从《指导生活的算法》一书中学到的概念,一个任务的密度=重要程度/完成时间。按照任务密度从高到低去做事情,这样就可以让总的心理负担最小,这叫做“加权最短时间处理算法”。简单说,做工作要首先考虑单位时间内收入最高的。
4、后果与贴现率。针对上面提到的第三个问题,对于是做对未来贡献大的事情还是对现在贡献大的事情呢,除了考虑不做的后果,还要考虑贴现率,也就是你认为未来价值与当下价值的比率,这与当下是否短缺有关,如果当下处于短缺状态,那么自然是先做对现在有贡献的事情,管不了太久的以后。
网友评论