读论文笔记:Memory Ordering: A Value-Based Approach

本文介绍了一种新型的Value-Based Replay机制,旨在优化计算机中的Load/Store队列,通过在Load指令提交前重新加载值,确保数据依赖性和内存一致性,同时大幅减少了对内容可寻址内存(CAM)的需求,降低了能耗并提高了处理效率。

ABSTRACT:

 

常规的乱序处理器采用多端口,全关联的load queue保证单线程和多处理器多线程的正确内存引用计数,但随着频率加快和工艺改进,in-flight的load数量变多,缩放原有的结构困难且高耗能,因此,本文完全消除关联load queue,而是在retirement前按程序顺序重新执行和加载指令即可保证数据依赖性和内存一致性约束。

 

1. Introduction

 

本文通过改进load/store队列来提供计算机效率。

 

Load和store队列通常使用内容可寻址的内存为保障内存指令的正确依赖提供一个地址匹配机制。一个load指令发布,store queue CAM会寻找一个与之匹配的地址。当一个store地址产生,load queue CAM会寻找一个先于这个store指令错误猜测发布的相匹配的load指令。load queue也会在每次load发布时被寻找,有时也在外部的无效请求时被查找。由于指令窗口的增加,in-flight的loads和stores数量增加,导致了增长的CAM访问时间。

 

针对现有问题别人的解决方案面临过于复杂或者无法伸缩(scalability)的问题。

 

本文不再通过CAM在load queue中寻找,而是提出了一种value-based repaly machanism,在load指令commit前重新载入一遍load的值,若相等则继续,若不相等说明该load和一个之前的store乱序了,违反了内存一致性模型,之前利用了不正确的值的指令都会被squashed。

 

为了缓解replay带来的花销(增加的缓存带宽和资源侵占),本文评估了几种过滤出需要replay的loads的启发式方法。平均只有0.02提交的指令需要replay。

 

本文只消除了load queue的RAM而没有消除store queue的RAM,原因在于,1、load指令比store指令占比更多(30%、14%),因此load queue的RAM更复杂。2、store-to-load,从store转发到load是更正常的,而违反RAW是小概率事件,因此store quque的RAM对性能比较关键,不能消除。3、load queue的CAM查找更加频繁(既被load又被store指令以及外部的无效信号查找),需要更多的ports。

 

总结本文贡献:

1、通过value-based replay消除了load queue的关联查找逻辑;

2、Replay-reduction heuristics: 过滤出了需要replay的load指令(只占很小一部分),对缓存带宽的影响可以忽略。

3、consistency model checking: 定义了检查内存一致性的限制,可以检测一些错误。

 

(本节中介绍了背景,提高IPC和时钟周期是相违背的,因此把目光瞄向影响性能且难于按比例扩大的load/store queue的CAM,现有的维持内存一致性的方法是每发布一个load/store指令就在CAM中查找是否有与之对应地址的已发布的load/store指令,本文提出了基于value的replay的方法,完全消除了对load queue的CAM,在每次Load提交前reload这个值,如果和之前使用的值相同,就继续,如果不同,就说明可能违反了内存一致性,因此squash这个load及之后的操作。但是replay会带来cache port的增加和资源侵占,因此本文提出了几种过滤器,可以过滤出只占很少比例的需要replay的Load。还提出了一些限制条件来检验内存一致性。)

(2节中描述了原本的关联载入队列的微结构。3节中提出了我们的value-based replay mechanism和过滤器。4节中介绍了实验,之后是我们的机制和原有load queue设计的性能对比。)

 

2. Associative Load Queue Design

 

2.1. Functional Requiremen

要在本地运行基于PHP的在线点餐系统并访问 `http://localhost/online-food-ordering-system-using-php` 页面,需按照以下流程进行操作: --- ### ### 环境准备 首先,需要在本地计算机上安装一个支持 PHP 和 MySQL 的 Web 服务器环境。推荐使用 **XAMPP** 或 **WAMP** 工具包。 - XAMPP 安装完成后,其默认的 Web 根目录位于 `C:\xampp\htdocs`。 - 将下载的在线点餐系统源代码解压后复制到该目录下,例如路径为:`C:\xampp\htdocs\online-food-ordering-system-using-php`[^2]。 --- ### ### 数据库配置 系统依赖于 MySQL 数据库进行数据存储和管理。启动 XAMPP 中的 Apache 和 MySQL 服务后,执行以下步骤: 1. 打开浏览器,访问 [phpMyAdmin](http://localhost/phpmyadmin)。 2. 创建一个新的数据库,命名为 `fos_db`。 3. 在源代码中找到数据库文件夹中的 `.sql` 文件,并将其导入到新建的数据库中,以初始化表结构[^2]。 --- ### ### 访问项目页面 完成上述步骤后,即可通过浏览器访问系统: - 客户端首页地址为:`http://localhost/online-food-ordering-system-using-php` - 后台管理页面地址为:`http://localhost/online-food-ordering-system-using-php/admin` 管理员默认登录凭据如下: - 用户名:`管理员` - 密码:`admin123` --- ### ### 功能模块说明 系统分为两个主要部分: #### **后台管理端** - **登录页面**:管理员通过输入用户名和密码进入后台。 - **类别管理页面**:用于添加、编辑或删除菜单分类。 - **菜单管理页面**:可对菜品信息进行增删改查操作。 - **系统设置页面**:用于配置网站的基本信息,如名称、联系方式等。 #### **客户端** - **主页**:展示所有菜品及分类,用户可浏览并选择商品。 - **购物车页面**:显示用户已选中的菜品,支持修改数量或移除。 - **关于页面**:介绍餐厅的基本信息或经营理念。 - **结账页面**:用户提交订单并完成支付操作。 --- ### ### 示例代码片段 以下是一个简单的 PHP 数据库连接示例,用于验证是否能够成功连接到 MySQL 数据库: ```php <?php $servername = "localhost"; $username = "root"; // 默认用户名 $password = ""; // 默认无密码 $dbname = "fos_db"; // 创建连接 $conn = new mysqli($servername, $username, $password, $dbname); // 检查连接 if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } echo "成功连接到数据库"; ?> ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值