并行存储器和无冲突访问存储器的工作原理
主存两大指标:延迟(cache解决)和带宽 并行以及无冲突解决的是带宽低的问题
并行存储器
= 单体多字存储器 同时拿出n个字
缺点:访存效率不高 容易发生冲突
- 取指令冲突:如果一次读取的m个指令字中有分支指令,而且分支成功,那么该分支指令之后的指令是无用的
- 一次取出的m个数据不一定都是有用的。另一方面,当前执行指令所需要的多个操作数也不一定正好都存放在同一个长存储字中
- 写数据冲突:写入有可能变得复杂
- 读写冲突:当要读出的数据字和要写入的数据字处于同一个长存储字内时读和写的操作就无法在同一个存储周期内完成
【.】多体交叉访问存储器
- 高位交叉访问(竖式)
用于扩容
高位交叉编址指的是对存储单元按体内地址顺序存放,(故又称顺序存储)
作用于多用户多任务或者指令和数据分开,每一列都互不相干,扩容很方便
- 低位交叉访问(横式)
和并行存储器目的一样,都是为了提高速度(带宽)
流水线式,在一个时间段内拿出一整串,不容易发生冲突
低位交叉编址:对存储单元矩阵按行优先进行编址
无访问冲突存储器
解决冲突的本质是让访问时可以并发的读取不同存储体,而不是只读取一个
一维数组
向量子集(一维数组)的元素逐次按2的整数次幂相间访问
- 先间隔2^0=1访问
- 再间隔2^1=2访问
- 间隔2^2=4访问
存储体个数为质数,保证不冲突
二维数组
要求:nxn二维数组要求按行、列、对角线、反对角线访问,且在不同变址位移量都能实现无冲突访问
列冲突
对角线冲突
解决方案1
通用,但是会浪费一个存储体的资源
在上述第2个的基础上,解决列冲突即可,解决方案如下
- 存储体个数m>=n,且取质数
- 同一列相邻元素在存储体中错开d1个存储体
- 同一行相邻元素在存储体中错开d2个存储体
- m=22p+1, d1=2p,d2=1
计算公式:
解决方案2
有前提,要满足存在 n = 22p
优先选这个,节省存储体资源