3.5 双端口RAM和多模块存储器

3.5 双端口RAM和多模块存储器3.5 双端口RAM和多模块存储器3.5 双端口RAM和多模块存储器

 

3.5 双端口RAM和多模块存储器3.5 双端口RAM和多模块存储器3.5 双端口RAM和多模块存储器 

 3.5 双端口RAM和多模块存储器3.5 双端口RAM和多模块存储器

 3.5 双端口RAM和多模块存储器

 3.5 双端口RAM和多模块存储器3.5 双端口RAM和多模块存储器3.5 双端口RAM和多模块存储器

 3.5 双端口RAM和多模块存储器

 3.5 双端口RAM和多模块存储器

兰 不装了 我就是新一~ o(╥﹏╥)o

各位同学大家好,在这一小节中,我们要学习的是双端口RAM和多模块存储器这两种储存的优化技术,那我们首先要回顾一个概念叫做存取周期,那存取周期就是我们可以连续的读写所需要的最短的时间间隔之前我们说过对于滴软件来说,由于滴乱新片它采用了电容,这种存储元,因此对于DeRay的读操作是破坏性的读书,所以这种芯片我们进行自读写操作之后,它所需要的恢复时间一般是比较长的,有可能恢复时间是存取时间的好几倍,比如说啊,存取时间我们记作R,当存取周期我们去做T,那么有可能会达到T=4倍的R,也就是需要三倍的R这么多时间来恢复,那相比之下S RAM的恢复时间就会短很多噢,那存取时间意味着CPU从内存里读出一个字的数据,实际上只需要这么多的时间存取的时间很快但是又必须得这么一段恢复时间。均等这么一段恢复时间才可以读取下一座建筑,所以这就引出了一系列的问题,我们现在的计算机啊,甚至是手机动辄就是什么双核四核甚至是8核的CPU,那么这种多核的CPU想要访问一个内存,那是不是意味着第1个CPU访问了一次之后,第2个CPU也需要等这么长的恢复时间,它才可以接着进行访问,那这个问题如何解决第2个问题,即便是单核的CPU,那CPU的读写速度依然要比储存快很多,那么储存恢复的这段时间如果太长,我们应该怎么处理呢?有没有什么思路对这个问题进行优化好,所以这就是这个小节我们要解决的两个问题,第1个问题就是多核CPU我们可以用双端口run这种方式来解决,而第2个问题我们可以用多模块存储器这样的方式来解决它多么坏存储器又可以进一步的分为单体,多字啊,多体多字游戏的内存这个名字如果你的电脑造成双通道。编制这样的一些策略,那很多爱打游戏的男生应该挺,而第2个问题我们可以用多模块存储器这样的方式来解决那多模块存储器,又可以进一步的分为单体多字啊,多题多字,高位交叉编制,低位交叉编制,这样的一些策略,那很多爱打游戏的男生应该听说过双通道内存这个名字,就是如果你把你的电脑改造成双通道内存,那么你的电脑性能其实可以得到很大提升的,你打游戏可以更少,所以这个小节的知识还是可以应用到我们现实生活当中的哦,那首先我们来看第1个技术叫做双端口量,这个技术可以用于优化多核CPU来访问一个内存条的速度,比如我们的电脑是双核的CPU只有一根内存超,然后我们的这个内存上它采用了双端口,RAM这种技术,那这样的话我们的两个CPU两个CPU的核心,就可以通过它的两个端口来对这个内存进行并行的访问,那如果要支持双端口RAM,我们就必须拥有两种完全独立的数据线和控制总线。我们就必须拥有两组完全独立的数据线,也就是数据总线,然后地址总线和控制总线,也就是说我们的总线设计会变得更复杂啊,如果用大家熟悉的东西来说,就是我们电脑主板设计的要更复杂一些,需要有两组完全独立的啊,各种各样的线,另外呢CPU里边的这个内存控制单元,还有我们内存里边的这个读写控制电路也需要有更复杂的设计好,那现在我们来分析一下,这两个CPU对这个双班口RAM的访问有可能出现的一些情况,第1种情况,两个CPU有可能通过两个端口同时对这个room里的不同地址单元进行存取数据,这种操作是可以支持的,只要他们想要访问的这个地址不发生冲突,那么他们俩就可以同时进行读,或者同时进行写好第2种情况,两个CPU也可以通过两个端口同时对同一个一纸单单元进行读数据这样的操作,因为读这个操作并不会改变这个存储单元里边存储的数据,所以两个同时读是可以被支持的。好,第2种情况两个CPU也可以通过两个端口同时对同一个地质单元进行读数据这样的操作,因为读这个操作并不会改变这个存储单元里边存储的数据,所以两个同时读是可以被支持的好,第3种情况如果说两个CPU通过两个端口同一时刻对同一个地区进行。两个CPU通过两个端口同一时刻对同一个地址进行写入数据,那此时就会发生写入的错误,左边这个CPU希望这个存储单元里写了数据a,然后右边这个CPU同时往里边写了数据B,那么他们俩写的这个数据有可能相互覆盖,所以同时对同一个地址进行写操作啊,应该是被禁止的,这是一个非法的操作好第4个操作,如果同时对同一个地址,单元其中一个进行写数据,另一个进行读数据,那么此时读出数据的呃,那个CPU就有可能会出现读出错误,比如说这个存储单元里本来存的是a右边这个CPU,它本来想把a读出去,但是由于左边这个CPU正在同时往里面写B这个数据,那么这就会导致右边这个CPU,有可能实际取得的是B因此对同一个地址单元已读一些这种操作也是应该被禁止了所以当发生三和四这两种情况都应该像两个c一个忙的有一些逻辑电路来决定暂时关闭其中某一个。两个CPU发送一个忙的信号,同时会有一些逻辑电路来决定暂时关闭集中某一个端口,比如说先把业务员这个端口给关闭,让CPU2等一下,等左边那个CPU完成操作之后,右边这个CPU再继续访问噢,所以这就是双端口run技术,那学过操作系统,同学可以把这个部分的内容和我们的读者写者问题进行一个对比,可以同时读,但是不能同时写,这个其实和读者携手问题一模一样,我们在学习各个学科的时候,除了学科内部的这些知识点,大家需要进行联系之外,其实也可以把这些化学科的知识点进行一个整合和串联,这样的话大家的理解和记忆都会更深哦呢,有了双端口,RAM技术就可以优化多核CPU访问一个内存条的这个速度啊,那接下来我们进入第2个话题之前我们说过,即便是对于一个单核的CPU,那CPU的读写速度也比要快得多之后需要一段的恢复时间连续一些数据的就必须等待他的时间。内存要快得多,而内存每一次读写之后又需要一段的恢复时间,当CPU想要连续读取一些数据的时候,就必须等待它的呼出时间,那这个问题的解决就可以使用到多体并行存储器,那大家可以把这理解成是你在你的电脑上插了4根内存条,并且每一个内存条它的大小都是一致的,那我们可以有这样的两种编制的方案,第1种叫做高位交叉编制,第2种叫做低位交叉编制好,什么意思呢我们的CPU在对内存进行访问的时候,一定需要提供一个内存的地址对吧数据存储到哪?那内存的地址肯定就是呃几个比特类的信息,那采用高位交叉编制的意思就是说我们会采用这个内存地址的更高几个比特币来区分我们想要访问的是哪一个存储体,比如说在这个图里边我们总共有4个存储器,有4个内存条,那么我们就可以用最高的两个比特币来分别区分我们要访问的是哪个内存条安能。刚好可以对应上M0~M3,那类似的,如果采用低位交叉编制的意思就是说对于我们给定的内存地址来说,我们会采用更低的两个比特币来区分这个M0~M3好了具体看一下,我们现在假设每一个存储体它总共只有8个存储单元,大家可以数一下总共有8个,那么由这4个存储体构成的,一整个储存它的空间大小地址,空间大小就应该是啊,4个存储体,每一个存储体8个存储单元48 32也就是等于2的5次方,所以我们可以用5个比克来作为储存的地址,那如果采用高位交叉编制的话就意味着第1个存储体它的第1个存储单元,我们给它的地址应该是0点高位的两个00表示的是这是ma这个总的主体,然后后面的三个0表示的是在这个存储体内部的第几个单元,所以我们把它称为体内地址,澳大利斯的下一个存储单元就应该是00,然后后面是001再往后都是类似的应该是。特别是001账号都是类似的,然后现在第2个陈述题,他开头的两个题号应该是01而后三位的体内地址,同样应该是从三个零一直到三个亿,好接下来M2M3这两个存储体他们的编制也是类似的,只不过是最高两倍的这个题号不一样好,接下来看低位交叉编制,那由于这个位置应该是M0的0号单元,所以题号应该是0,然后题目的地址也是0,那后面几个存储体的编制都是类似啊,都是题号不一样,对于同一行的存储单元来说,体内地址都是一样的,只不过题号会不一样好,那后续的这些地址也都是类似的好,那现在我们尝试着把这些地址信息把它翻译为实质性质,那对于左边这种高位交叉编制来说,这个地址翻译成十进制应该是0,然后下面这是一二三七对吧然后在这是我们的地址编号。好存储单元应该是在这9 10 11好以此类推,而对于右边这种低位交叉编制,我们的地址编号应该是这样的0123 4567就是横着边的噢,那这两种特性会导致什么区别呢?我们来看这样的一个例子,现在我们假设每个存储体也就是这样的一坨,它的存储周期为rt,然后存取时间对小儿并且是大体等于4倍的小孩,也就是说CPU从一个存储体里边取走一个字的数据总共需要2这么长的时间,但是CP想要再次访问这个存书题,就需要再等三儿这么多的时间,这是我们之前提到的恢复时间好那现在来看一下,对于高位交叉编制,如果说我们要连续访问这样的一些地址的话,那么第1个地址5个0,根据题号和体内地址可以知道,它应该是对应M0的这个存储单元,那我们画一个甘特图这个操作。 CPU对M0这个存储体进行了一次公操作,那每一次读它的存取周期是T,实际上CPU只花了R这么长的时间就完成了读这个操作,但是后面还有3R这么多的时间必须等待,等这个存储体恢复之后才可以访问接下来的这个地址,因为接下来的这个地址同样是属于M0,这个存储器好,所以必须等T这么长的时间才可以访问1号地址好,接下来再过一个周期再访问2号存储单元,3号4号总之由于我们连续访问的这些地址都属于M0这个存储器,所以每次访问完之后都必须等待它恢复,也就是总共过了T这么长的时间之后,才可以进行下一次的读写,那整个过程,我们读了5个存储字,耗时是5T,这是高倍交叉编制,接下来再看右边这种编制方案,第1位就差编制,那根据这个地址的末两位我们可以知道这个地址,它应该是从属于M0这个存储体都一个字。为我们可以知道这个地址,他应该是从属于M0这个存储体啊,所以CPU会从M0着读出一个字,那刚才我们说过,其实CPU从存储器里边读或者写一个字,实际只需要的时间,因此过了R这么长的时间之后,相当于对M0的这个存储单元的读取工作就已经完成了,那后面的3R这么长的时间,CPU不用管它,只需要让这个存储器它自己恢复就可以好,所以过了R这么长的时间之后,由于我们第2个要访问的这个存储单元,它所属的这个存储体此时是已经准备好读写的,因此CPU可以直接从M1这读取数据,好那之后是不是类似的再往后要访问的这个存储单元,2号单元它属于M22M2此时已经准备好被读或者背写了,所以读M1这个操作经过R这么长的时间之后这个地址就可以。 CPU就可以紧接着读M2,这个单元好再往后一个地址,它的题号是两个1,那么就是M3同样的此时,M3是已经准备好读写了,所以再经过rcpu,又可以在紧接着读M3好,接下来读取M3是不是也需要花而这么长的时间,所以读完M3之后,其实从刚开始算起,我们总共已经过了4I这么长的时间了,也就刚好过了一个存储周期,因此M3这个地址读取完了之后,是不是M0这个存储体又可以准备好被读取了,而刚好我们接下来要读取的这个地址,我们又回到了M0,因此到T这个时刻,CPU又可以紧接着从M0读出下一个字的数据,好,所以对于这个例子我们读出地址连续的4个存储单元,总共的时间开销应该是大T加上4R也就是也就刚好等于2T,对吧?如果你要说CPU取得这5个字所需要的时间,那其实在5R这个时刻就已经完成了我们计算的总耗时其实是考虑上的最后的三。结合就已经完成了,只不过这地方我们计算的总耗时,其实是考虑上了最后的这三个R的恢复时间,因此访问这个位置整体的耗时,我们把记作二倍的T,那如果我们把刚才计算的这个呃结论进行一个推广的话,不难得出这样的结论,当我们连续存取N个存储字的时候,采用低位交叉编制,那么我们的总耗时应该是T加上N减一倍的R,因为我们对各存储字的读取刚好是可以无缝衔接的,所以读取N个存储字啊,总共需要花N倍的R这么长的时间,而最后一个存储字读,取完了之后还需要给他留3R这么多的时间来进行恢复,所以整体来看呢,耗时就应该是T+N-1倍的R,因为T=4R好,那这是有可能遇到的一类考题,考查你对微观层面的这个时间开销的计算,那宏观上看,我们使用这种策略组写一个字的平均时间只需要2这么多就是这如果你连续的这个字数。用这种策略读写一个字的平均时间,只需要R这么多所谓的宏观,就是指如果你连续读取了这个字数,nn趋近于无穷大的时候,每一个字的平均存取时间是非常接近R的哦,所以在访问一系列地址连续的存储单元的时候,右边这种低位交叉编制的方案,他的效率要比左边这种高位交叉编制要高的多,性能几乎提升了4位,好,那这就是多体力型存储器,唉,那现在我们应该思考这样的一个问题,为什么我们这儿探讨的是连续访问的情况呢?大家可以思考一下就等于是这样的,在我们实际应用当中有很多数据,其实就是存放在地址连续的一些空间,比如说数组数组的存储,就是放在地址连续的一些啊,内存单元里边程序代码程序的指令他也是连续到什么地方否则程序的执行是这个地址。他的程序代码啊,或者说程序的指令他也是连续地存放在我们主城当中的,除非遇到什么it之类的啊,需要发生跳转的地方,否则程序指令的执行肯定是啊,顺着这个地址一条一条往下读的好,所以这地方我们着重探讨连续访问的情况是很有现实意义的,好,接下来我们来思考这样的一个问题,既然这种低位交叉编址的方案可以让我们的存取效率变得更高,那我们应该取多少个体呢?那刚才这个例子当中我们实现了存取的流水线,这个地方流水线的概念其实和工厂的流水线是很类似的啊,比如说一个工厂它的一条生产线啊,这儿有4个工人,这有4个工人,然后这4个工人他们加工好的这个零件会放到传送带里,然后在传送带的这一端会有一个机器人来处理这4个工人给的这些零件水仙他们提供数据的速度比较慢的这次的四个。进去的速度是比较慢的,这4个存储体就类似于这4个工人,而这个机器人就相当于我们电脑里的CPU,它可以快速的处理这些工人给他提供的零件好,所以正是因为这两种场景的相似性,所以我们才把这种存取方式把它称为流水线式的这种存取款,那为了保证我们的流水线工作不间断,当存储周期为T,然后存取时间为R的时候,我们应该保证存储模块的数量,M是大于等于T,除,以R的像刚才这个例子,我们刚好就取了M等于T÷R,因为之前我们说这个例子里面T=4R对吧,好,接下来分析一下为什么要有这样的规定,假设我们此时取得这个存储体的数量要小于T÷2,那还是以刚才的T=4R作为一个前提条件,那我们取M等于三只有三个存储器经过三个mm取走了三个字。三只有三个存储器好,现在经过三个R之后,CPU分别从M0M1,M2里边取走了三个字,那再往后CPU是不是又应该访问M0这个存储器,然而在3R这个时刻可以看到M0还没有恢复,所以CPU必须等待R这么长的时间才可以进行下一次的存取,所以当M小于T,除以R的时候,我们不能完全发挥这个流水线的作用好再来看,如果M大于T除以R,比如说M取5,那么当CPU从M0~M3分别取走一个字的数据之后,此时刚好过了4R这么多的时间,也就是说在这个时刻,其实M0这个存储体他已经准备好被下一次访问了,然而由于我们此时有5个存储器,所以接下CPU访问的应该是M4,那对M4的访问也需要,而这么长的时间到了玩M4之后,CPU才会再回头访问M0,所以这就导致M0这个存书题,它中间其实闲置了这么长的时间时间大于技术我们。这就导致M0这个存储器它中间其实闲置了,R这么长的时间,他本来可以继续干活的,但是这儿偷懒了一段时间,那这就意味着当M大于G除以R的时候,我们这个劳动力是过剩的,这种方案会导致各个存储主体没办法发挥到他们各自的极限,那我们知道每增加一个存储器就是要多花一些钱对吧?所以最好的方案还是之前我们提出的,刚好让M等于P除,以R这种方案,这种方案可以让我们存取流水线的这个呃效率达到一个顶峰,我们是实体的数量最少也就成本最低啊,那这也是一个考验,我们根据存取周期和存取时间来判断我们应该取多少的模块,那他的描述就是告诉你存取周期为T,然后总线调试周期为R那这种方法也是剑指的是他的一个新的平静而传说中积累而值得我们通过数据总线数据至少需要。之前我们说的存取时间二指的是这个存储体,它的一个性能的瓶颈,存取字至少也需要R这么长的时间,而下面这种说法,总线的传输周期为而指的是我们通过数据总线把一个数据传代CPU,至少需要R这么长的时间,所以虽然这两种表述方式它背后的含义是不一样的,然而无论是哪一种描述方式都意味着我们的CPU存取一次时间不可能低于R,因此无论题目别的是哪种条件,我们都按同样的算法来处理就可以好,另外还需要补充一点,如果说给你一个指定的地址X那你如何确定它属于第几个存储体呢?首先我们假设总共有M个存储体,那第1种方法就是根据这个末尾的题号来判断它属于第几个存储器,直接用二进制的判断,第2种方法就是你可以用他给的这个实际是地址,X来对M进行一个取鱼,用这样的方式也可以确定X这个地址,它应该属于哪个存储体,好那具体的题目,然后会在课后练习里面遇到目前为止我们介绍了。这也可以确定X这个地址它应该属于哪个存储器,刚才具体的题目大家会在课后练习里面遇到好的,那目前为止我们介绍了多体并行存储器,这种存储方案的特点就是每个存储模块都有相同的容量和存取的速度,并且各个模块都有独立的读写控制电路地址寄存器,还有数据形成期,他们既能并行的工作也可以交叉的动作,注意这儿想强调的点是每一个体每一个模块他们之间是相互独立的,那与这种方案相对应的另一种方案呃叫做单体多次存储器,上面这种实现方式可以让每一个存储体独立的工作,CPU可以*的选择,每一次要从哪一个存储体读出哪一个字,他们之间都是相互独立的,而采用下面这种方案的话,相当于把这几个存储体把他们进行了一个合并整个存储器我们只有一套读写电路还要地址寄存器数据及分析扩展本来没只能独自但是经过这样的。类或者本来每一次我们只能读写一个存储字,但是经过这样的合体之后,我们每一次读取的就是一整行也就是4个字,那为了配合这种单体多字存储器,我们也需要把数据总线的宽度把它改为M个字,每一次可以定型的读出M个字,显然这种单体多字的多模块存储器它的灵活性要比多体并行的存储器要更差一些,我们并不能单独的选择要读取其中的某个字,只能一次读一整行也就直接读4个字的内容,所以如果我们要读取的一系列指令或者数据它刚好在储存当中,就是连续的上到一整行,那这种情况是比较理想的,但是假如现在我们要读取一个呃总大小的4个字的变量,这个变量占的是2345这几个存储单元,那么采用下面这种方式,是不是意味着我们要先把第1行给读入,然后再读入第2行,其实我们会读入一些无用的无意义的信息,而如果从上面这种方式它的灵活性就会高一些,CPU只需要精准的命中这4个存储单元就可以不。而如果采用上面这种方式它的灵活性就会高一些,CPU只需要精准的命中,这4个存储单元就可以不会读入多余的荣誉信息好,所以下面这种方案的灵活性要差一些,不过如果要从整体的这个呃读取速度的提升来看,其实下面这种方案和上面这种方案都差不多,当T等于4R的时候,上面这种方案它的这个读取时间每读写一个字的时间可以接近于R,那下面这个方案也是一样的,每一个存取周期T,我们可以直接读入4个字的内容,因此平均来看每读入一个字所需要的时间,也就是T÷4,平均下来每读一个字只需要R这么长的时间和上面这种方案是一样的好,所以无论是哪种方案都可以很大程度上提升我们组成的一个读写速度我们注意的时间内斯但是用完全不一样的概念那我们学习这种技术可以在多个cpu同时访问一个警方下提升这个。提升储存速度的方法,首先要注意的是存取周期还有存取时间,这两个很类似,但是有完全不一样的概念,那我们学习了双关口RAM这种技术,这个技术可以在多个CPU同时访问一个RM的情况下提升这个RAM的读写速度,那需要特别注意是否可以同时读同时写的问题好呢,这些节的后半部分我们要介绍了多么快的存储器,在多体并行存储器当中,如果我们采用交叉编制的话,那么对于访问连续的地址空间这样的一个使用场景,其实性能的提升并不明显,所以高位交叉编制这种方案啊,实际效果就相当于单纯的给这个存储器进行了一个扩容,而如果采用低位交叉编制,那我们就可以实现这个存取的一个流水线,那这种方案是我们的高频考点,曾经在我们408真题里面出现过多次好的,那这就是这个小学理论部分的内容,接下来我们尝试着把这个理论啊,用到我们现实生活当中,咱都是学计算机的,那经常会有人问你会修电脑啊这时候我们好像只能绝望 

3.5 双端口RAM和多模块存储器