3.1.4.1 并行访问存储器

  要在一个存储周期内访问到多个数据,最直接的办法是增加存储器的字长。例如,一般存储器在一个存储周期内只能访问到一个字。如图3.7(a)所示,一个存储容量为m字×w位的存储器,每个存储周期只能访问到w位(一个字)。现在把存储器的字长增加n倍,成为n×w位,为了保持总的存储容量不变,可以把存储器的字数(也可以说是地址数)相应减少n倍,成为m/n个字。这样,在一个存储周期内就能访问到n个数据(每个数据的字长是w位),如图3.7(b)所示。

图3.7 并行访问存储器与一般存储器比较

  在具体实现时,要把地址码分成两个部分,其中一部分仍作为存储器的地址去访问存储器(因为存储器的字数减少了,因此访问存储器的地址码可以缩短),而另一部分则去控制一个多路选择器,从同时读出的n个数据中选择一个数据输出。

  并行访问存储器的主要优点是实现非常简单、容易。主要缺点是访问的冲突大,主要冲突来自如下几个方面:
  1、取指令冲突。在遇到程序转移,而且转移成功时,一个存储周期中读出的n条指令,后面的几条指令将无用。
  2、读操作数冲突。一次同时读出的n个操作数,不一定都有用。换一种说法,需要的多个操作数不一定正好都存放在同一个存储字中。
  3、写数据冲突。这种并行访问的存储器,必须凑齐了n个数之后才能一起写入存储器。如果只写一个字,必须先把属于同一个存储字的n数读到数据寄存器中,然后在地址码的控制下修改其中的一个字,最后再把整个存储字写回存储器。
  4、读写冲突。当要读出的一个字和要写入存储器的一个字处在同一个存储字内时,无法在一个存储周期内完成。

  这4种冲突中,第1种冲突的概率比较小,因为,程序在大多数情况下是顺序执行的。第2种冲突的概率比较大,因为操作数的随机性比程序要大。第3和第4种冲突,解决起来有一定困难,需要专门进行控制。

  分析发生这些冲突的原因,从存储器本身看,主要是因为地址寄存器和控制逻辑只有一套。如果在图3.7(b)中有n个独立的地址寄存器和n套读写控制逻辑,那么,上述第3和第4种冲突就自然解决了,第1和第2种冲突也会有所缓解。