我们先学习两个定义。
(1)指令流:机器执行的指令序列。
(2)数据流:由指令流调用的数据序列,包括输入数据和中间结果。
1.根据多倍性的分类
按照计算机同时处于一个执行阶段的指令或数据的最大可能个数,人们把计算机分成4种,如表1-4所示。
表1-4 指令流的分类
(1)SISD(单指令流单数据流):这是最简单的方式,计算机每次处理一条指令,并只对一个操作部件分配数据。一般认为流水线技术的计算机仍然属于SISD。
(2)SIMD(单指令流多数据流):具备SIMD的常常是并行处理机,这种处理机具备多个处理单元,每次都执行同样的指令,对不同的数据单元进行处理。这种计算机非常适合处理矩阵计算等。
(3)MISD(多指令流单数据流):这种处理方式比较难以想象,有多个处理单元,同时执行不同的指令,针对的是单一数据。但有资料认为,流水线处理机中每个数据由不同操作部件对之进行处理。
(4)MIMD(多指令流多数据流):这是一种全面的并行处理机,典型的机型是多处理机。这种计算机的设计和控制都很复杂。
2.按照程序流程机制的分类
具体的介绍如下。
1)控制流计算机
这是通常见到的计算机,使用程序计数器来确定下一条指令的地址。指令程序流由程序员直接控制,其主存是共享的,存储区可以被多指令修改,容易产生数据相关性,对并行性不利。
2)数据流计算机
在冯•诺依曼体系中,计算机是指令流驱动的,而数据流则是处于被动地位的,这看起来合理,但在某些时候也不尽然。与指令流相对的是数据流驱动,即一旦数据准备好,则立即开始执行相关的指令。非冯•诺依曼体系仍然在探索中,但对冯•诺依曼体系的改良也有相当好的成果,即流水线技术和并行计算机。
在数据流计算机中,数据不在共享的存储器中,而是在指令间传送,成为令牌。当需要使用该数据的指令收到令牌,开始执行之后,该令牌即消失,执行的指令将执行的结果数据当做新的令牌发送。这种方式不再需要程序计数器、共享的存储器,但是需要检测数据可用性的专门部件,建立、识别、处理数据令牌标记,需要时间和空间开销。
在其他方面,数据流计算机还有一些困难需要克服:在数据流计算机中由于没有程序计数器,使得程序的调试和诊断变得困难;没有共享的存储器,也就无法控制其分配,无法支持数组、递归等操作。
3)归约机
归约机(Reductions Machine)又称为需求驱动,是由对一个操作结果的需求而启动的。归约机采用一种“惰性计算”的方式,操作只有在另一条指令需要这个操作的结果时才执行。比如在计算5+(6×2–10)时,归约机并非先去计算6×2.而是先计算整个算式,碰到(6×2–10)再启动一个过程去计算它,最后需要计算6×2.计算后一层层退回,得到整个算术式的值。由于需求驱动可减少那些不必要的求值操作,可以提高系统效率。
归约机是一种面向函数式的语言,或以函数式语言为机器语言的机器,要有函数定义存储器和表达式存储;操作和数据合并存储。它需要大容量物理存储器并采用大虚拟存储容量的虚拟存储器,来满足对动态存储分配和大容量的存储空间的需求。