目录
1.为什么需要优化?
存取周期的理解
一个存储器的存取周期中正真用来读写的时间其实占很少一部分,而另外一部分则是由于存储器的自身构造,需要一段时间来恢复某些存储单元,以便该单元下次还可以被访问。
对于DRAM芯片读请求是破坏性请求,读取之后需要进行恢复,存取时间就是DRAM读取一个字的时间,读完之后则需要一段恢复时间,在这个恢复时间中CPU无法访问。
而SRAM得恢复时间就很少。
而这段恢复时间可以干什么呢,就非要cpu一直等待它恢复吗?
当然不需要,我们可以将这段时间用来cpu去读写别的地方。
2.双端口RAM
多核心CPU读一块存储器:作用是优化多核CPU访问一根内存条的速度。
1.支持两个CPU同时访问RAM,
2.可同时读/写不同的存储单元;
3.可同时读同一个存储单元;
4.不能同时写(或者一读一写)同一个单元;
5.若发生“冲突”,则发出“BUSY”信号,其中一个CPU的访问端口暂时关闭
3.多模块存储器
单体多字存储器
单体多字存储器
每个存储单元存储m个字总线宽度也为m个字一次并行读出m个字
每次只能同时取m个字,不能单独取其中某个字
由指令和数据在主存内必须是连续存放的,所以这点也指向了该存储器的致命缺点。
多体并行存储器
高位交叉编址
采用这样的编址方式,实际上仅仅是对单个的存储体进行了扩容。
在实际的读取时还是需要等待存储单元恢复后才可以继续使用该单元。
假设每个存储体存取时间为r,存储周期为T,T=4r
高位交叉编址耗时5T
低位交叉编址
这种编址方式才会正真的将几个存储体做到了串行。
即一段连续的数据分开来存储在不同的存储体中,当读完其中某一部分后,另外一部分的存储体已经恢复好了,这样就大大优化了内存的访问时间。
可以看到这种方式很好的利用了存储单元的恢复时间。
应该取几个存储体?
采用“流水线”的方式并行存取(宏观上并行,微观上串行)宏观上一个存储周期内,m体交叉存储器可以提供的数据量为单个模块的m倍。
存取周期为T,存取时间为r,为了使流水线不间断,应保证模块数 m≥T/r
存取周期为T,总线传输周期为r,为了使流水线不间断,应保证模块数 m≥T/r
最好的是取T/r个存储体,做到完美衔接
4.装机时所谓的双通道
你是否听过,卖两根同样的8G内存条的内存条效果比买一根16G的内存条效果更好?
其实用两根同样的8G内存条组成双通道确实在原理上优于单根的内存条的。
宏观上将两根一样的内存条插入相同颜色的卡槽就可以让两块内存条实现:低位交叉编址,你可以理解为两块内存条宏观上是当一个整体使用的,但是在微观上是分开来存取一段连续数据的:
当程序运行需要上半部分数据时读内存条1,
当需要下班部分数据时读内存条2,
当再次需要上半部分数据时内存条1已经恢复好了,随时可以使用。