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


    双端口RAM

     多核CPU进行并行读写操作同一根内存条中的数据,RAM需要有两组完全独立的数据线、地址线、控制线。CPU、RAM中也要有更加复杂的控制电路。

    两个端口对同一主存操作有以下4种情况:

    1. 两个端口同时对不同的地址单元存取数据。(可以执行)
    2. 两个端口同时对同一地址单元读出数据。(可以执行)
    3. 两个端口同时对同一地址单元写入数据。(被禁止,会出现错误)
    4. 两个端口同时对同一地址单元,一个写入数据,另一个读出数据。(被禁止,会出现错误)

    解决方法:

    置“忙”信号为0,由判断逻辑决定暂时关闭一个端口(即被延时),并未关闭的端口正常访问,被关闭的端口延长一个很短的时间段后被再访问。如下图:

    这样就 可以优化多核CPU访问同一根内存条的速度

    多模块存储器

    多体并行存储器

    高位交叉编址的多体存储器

     

    上图:4个模块每个模块8个字,所以存储容量为32个字,为2的5次方,所以需要5位地址,由于只有四个模块,所以将高位的两个地址(体号)用来区分选择的是哪个模块,低位地址(体内地址)用来选择每个模块中的8个字,所以每个字的地址就如上图一样。

    低位交叉编址的多体存储器

    上图:4个模块每个模块8个字,所以存储容量为32个字,为2的5次方,所以需要5位地址,由于只有四个模块,所以将低位的两个地址(体号)用来区分选择的是哪个模块,高位地址(体内地址)用来选择每个模块中的8个字,所以每个字的地址就如上图一样。 

    区别

    实际应用中很多数据都是连续的存储,所以访问的时候也需要连续访问

    设每个存储体的 存储周期为T,存储时间为r,假设T=4r,连续访问00000 00001 00010 00011 00100

    先看高位交叉编址的多体存储器,由于连续访问的数据都存储在同一个存储体中,所以只能等前一个读取周期过了之后,才能继续访问,所以如果要连续读取n个存储字->耗时nT ,该例子耗时5T

     看低位交叉编址的多体存储器,由于连续访问的数据分别存储在不同的存储器中,所以当前一个存储体被存取后(r时间后),第二个存储体能直接被存期,依次进行存取。所以如果要连续存取n个存储字->耗时T+(n-1)r,宏观上(当n趋近于无穷)的时候,该例子耗时T+4r=2T

     应该取几个"体"

    采用“流水线“的方式并行存取(宏观上并行,微观上串行)

    宏观上,一个存储周期内,m体交叉存储器可以提供的数据量为单个模块的m倍。

    存取周期为T,存取时间为r,为了保证流水线不间断,应保证模块数m>=T/r

    存取周期为T,总线传输周期为r,为了使流水线不间断,应保证模块数m>=T/r

    分别看mT/r、m=T/r情况,第二种和第三种都能保证不间断,但是第二种效率没有达到极限

     

     

     多体并行存储器

    每个模块都有相同的容量和存取速度。各模块都有独立的读写控制电路、地址寄存器和数据寄存器。它们既能并行工作,又能交叉工作。

    单体多字存储器

    每个存储单元存储m个字,总线宽度也为m个字,一次并行读出m个字(一行),每次只能同时取m个字,不能单独取其中某个字,所以如果访问的两个数据分别在不同的行,需要将两行数据都取出来,存在了数据冗余情况

  • 相关阅读:
    manifold.ext.rt manifold @Extension
    QT绘图项目 - 汽车表盘
    阿里巴巴开源组件Easy Excel的Excel导入导出
    【小程序】微信小程序自定义导航栏及其封装
    蓝牙资讯|AirPods Pro 2推送新固件,苹果Find My功能受到好评
    leetcode 304. Range Sum Query 2D - Immutable 二维区域和检索 - 矩阵不可变(中等)
    循环神经网络RNN+长短期记忆网络LSTM 学习记录
    最牛逼的 Java 日志框架,性能无敌,横扫所有对手
    嵌入式Linux裸机开发(二)C语言LED驱动
    【flask入门系列】Flask-SQLAlchemy的安装与配置
  • 原文地址:https://blog.csdn.net/m0_59860403/article/details/127664901