思考:冯•诺依曼瓶颈本质的原因是什么?
冯•诺依曼型计算机以存储程序原理为基础,指令与数据混合存储,程序执行时,
CPU
在程序计数器的指引下,线性顺序地读取下一条指令和数据,以运算器为中心,这就注定了其本质特点是线性或是串行性,表现在两个方面:
1.
指令执行的串行性。
CPU
的运算依赖于寄存器。每一个指令的运算或多或少依赖于其前序指令的执行结果,尽管后来有些技术,比如将以运算器为中心通过运用
DMA
等技术变为以存储器为中心、超标量、智能预测执行、寄存器改名技术以达到多条管道并行进行,这已经或多或少地改变了冯•诺依曼的原型,但是本质还是串行执行指令。使得我们在设计程序时,基本上是按流水线的方式在思考问题,即使结构化编程,每个结构体本身也还是串行思考方式下实现的。而时下时兴的面向对象技术只是实现了封装,每个对象成员在设计时也是以串行的思考方式实现的,使得软件的实现效率比较低。
2.
存储器读取的串行性。存储器是现代冯•诺依曼体系的核心。一切数据都要在存储器里打转,但是研究计算机原理,注意到,所有对内存的读取都是独占性的,每一个瞬间,内存实体只能被一个操作对象通过片选信号占据。这就决定了内存的串行读取特性,尽管后来出现了许多新的技术,比如双端内存读取技术(可以从两个读取口同时互不影响地操作内存,初期为了解决显存的显示瓶劲)及双通道甚至多通道技术(可以将待写入的数据分块同时写入不同的存储区块,可以将内存存取速度成倍地提高,这种技术我认为源于
RAID
技术),这些技术或多或少增强了系统的性能,但都没有改变每一个单体串行工作的特点。
综上所述,我认为冯•诺依曼瓶劲的本质是串性。改善的出路是使用并行技术,在指令运算处理及数据存储上都巧妙地运用并行技术。比如:存储器的访问不再用片选控制,而是可以任意地访问单元,在读写数据时用原子操作或事务处理的思想保证数据的一致性。
下一篇准备写写"时下程序员:串行思考的世界:("