读《Jonathan von Neumann and EDVAC》

读《Jonathan von Neumann and EDVAC》

    读了一遍,只明白了个大概意思,没看懂作者要说什么,似乎是在讲历史。这篇文章的主要目的是介绍冯.诺依曼在EDVAC上的贡献,以及对摩尔定律的影响。
    
    这篇文章首先大概地介绍了下冯.诺依曼的生平,他是个天才,不到23岁就拿到了两个PHD,还是在不同的地方拿到的。当然,那个时代的PhD不能和现在的比,但他无疑是个出类拔萃的人物,其数学功力尤其深厚,我想这也是他能在多个领域都有非凡贡献的一个重要原因吧。

    冯.诺依曼是通过Goldstine得知ENIAC的,那时ENIAC已经快完成了,而ENIAC的设计者,Mauchly和Ekcert在制造ENIAC的经验基础上有了EDVAC的想法,他们同诺依曼进行了讨论,然后诺依曼就将他的一些想法写了篇手稿,并寄给了其他人。
    他们在设计计算机的时候并没有考虑效率的问题,因为他们遵循一条工程项目的重要原则:先将其设计出来,然后才去优化。在软件设计中这个原则也很重要,我记得有个计算机大牛说过“过早的优化时万恶之源”。另外,我觉得优化时不要使用过多讨巧的东西,因为这些讨巧的东西往往会加入一些默认的条件,而这些条件可能会限制未来的扩展,降低灵活性。
    冯.诺依曼的那篇文章中最大的贡献是提出了“stored program”的概念。我想指出的是,这个概念并不是由于苹果之类的东西砸到他头上他才想出来的,而是跟Mauchly和Ekcert讨论后经过思考得出来的,其实Mauchly和Ekcert也有了这个想法,这个想法是他们在制造ENIAC的过程中想出来的。我猜想,冯。诺依曼的数学背景使得他的抽象思维很强,将ENIAC进行抽象后也许就会发现很多改进的地方。因此,抽象能力是一个很重要的能力,他能是你很快地抓住事情的本质,并且将复杂的情况简单化,能更快地找到事情的关键所在。另外,实践也异常重要,在实践的过程中引发的思考尤为珍贵,因此在动手的过程中多思考,是极其重要的。
    “stored program”的一个核心思想是将数据和指令都放到内存中,看做是一样的。指令也可以像数据一样被修改。指令被修改,也就意味着机器“可编程”(programmable)。最初的计算机是没有程序的,程序时固化的电路,通过像这个电路输入一些不同的电讯号,然后这个电路就输出一些结果。想象一下,一个这种类型浏览器就是一个电路板(是不是记起了街机?)
    这种结构给计算机带来了很大的灵活性,但也存在一个制约现代计算机发展的瓶颈:“Von Neumann Bottleneck”。这是由CPU计算速度和CPU从内存中读取数据的速度之间的巨大差距造成的。“Von Neumann Bottleneck”这个概念是由John Backus在1977年的图灵奖颁奖典礼上说的,原文如下:
    "Surely there must be a less primitive way of making big changes in the store than by pushing vast numbers of words back and forth through the Von Neumann bottleneck. Not only is this tube a literal bottleneck for the data traffic of a problem, but, more importantly, it is an intellectual bottleneck that has kept us tied to word-at-a-time thinking instead of encouraging us to think in terms of the larger conceptual units of the task at hand. Thus programming is basically planning and detailing the enormous traffic of words through the Von Neumann bottleneck, and much of that traffic concerns not significant data itself, but where to find it."
    目前人们已经采取了很多工程学的手段来缓解这个瓶颈的影响,主要有这几种方法:
  • 在CPU和内存之间使用缓存(这个缓存的大小对机器性能影响挺大,因此在买机器时要注意)
  • 使用不同的缓存来存储指令和数据,从而将数据和指令分开(哈佛结构)
  • 使用分支预测算法

    我觉得数据和指令分开的结构在一些特殊应用中还是很有效的,未来的计算机世界可能会这样:很多适用于特殊用途的大型计算机提供服务,用户则仍使用通用的计算机。
下图为在维基百科上的冯.诺依曼的结构图

你可能感兴趣的:(优化,制造,浏览器,less,Primitive,Numbers)