当前位置: 首页 > news >正文

现代CPU设计哲学——加载/存储(Load-Store)架构

现代CPU设计哲学——加载/存储(Load-Store)架构

这是一个在计算机体系结构,特别是CPU设计中最核心、最基础的概念之一。

核心定义

加载/存储架构,也称为Load-Store架构,是一种CPU设计范式。在这种架构中,CPU只能通过两种特定的指令来访问主内存(RAM):

  1. 加载指令:将数据从内存复制到CPU内部的寄存器中。

    • 例如:LOAD R1, [0x1000] (将内存地址0x1000处的数据加载到寄存器R1中)
  2. 存储指令:将数据从CPU内部的寄存器复制到内存中。

    • 例如:STORE R1, [0x1004] (将寄存器R1中的数据存储到内存地址0x1004处)

最关键的限制是:所有算术运算(如ADD, SUB, MUL)和逻辑运算(如AND, OR, XOR)指令的操作数必须、且只能来自寄存器,运算结果也只能写回寄存器。不能直接对内存中的数据进行运算。


一个生动的比喻:厨房做饭

想象一下你在厨房做饭:

  • CPU = 厨师(你)
  • 寄存器 = 你面前的案板
  • 主内存 = 冰箱
  • 加载指令 = 从冰箱里取出食材放到案板上
  • 存储指令 = 将做好的菜从案板上放回冰箱
  • 运算指令 = 在案板上切菜、炒菜、搅拌

加载/存储架构下的工作流程(正确做法):

  1. 加载:从冰箱(内存)拿出西红柿和鸡蛋(数据),放到案板(寄存器)上。
  2. 运算:在案板(寄存器)上打鸡蛋、切西红柿(执行运算指令)。案板是唯一允许操作的地方。
  3. 存储:把炒好的西红柿鸡蛋(结果)从案板(寄存器)盛到盘子里,再放回冰箱(内存)。

非加载/存储架构(错误做法,现代CPU不允许):
试图直接把手伸进冰箱里切西红柿和打鸡蛋。这非常低效、混乱且危险。


为什么采用这种架构?

这种设计主要是为了性能和简化指令集

  1. 速度极差:寄存器的访问速度(通常<1纳秒)比内存的访问速度(通常几十到上百纳秒)要快几个数量级。让所有计算都在寄存器上进行,避免了频繁访问慢速内存,极大提升了效率。
  2. 简化指令集:运算指令只需要处理寄存器地址,不需要处理复杂的内存地址计算模式,使得指令格式非常规整和简单。这是RISC(精简指令集计算机)理念的核心基础。
  3. 硬件优化:由于操作被限制在寄存器和运算单元之间,硬件设计可以更加优化,例如采用数据旁路等技术来减少流水线停顿。

与之相对的架构:寄存器-内存架构

在CISC(复杂指令集计算机)架构(如x86)中,存在一些指令可以直接操作内存,这被称为寄存器-内存架构

  • 示例:一条x86指令 ADD [0x1000], AX 可以直接将寄存器AX中的值加到内存地址0x1000处的数据上。
  • 缺点:这种指令虽然功能强大、代码紧凑,但执行起来非常复杂,需要多个时钟周期,不利于流水线和超标量等现代CPU性能技术的发挥。
  • 现代的融合:值得注意的是,现代x86处理器(如Intel和AMD的CPU)在硬件底层实际上是将复杂的CISC指令解码并分解成多个类似于RISC的微操作,其中就包括加载、存储和运算等简单操作。所以,在硬件执行层面,现代x86 CPU也遵循着加载/存储架构的思想。

总结

特性加载/存储架构(主要用于RISC,如ARM, MIPS, RISC-V)寄存器-内存架构(主要用于CISC,如x86)
数据操作地点只能在寄存器上进行可以在寄存器内存上进行
指令特点指令长度固定,格式简单指令长度可变,功能复杂
性能易于实现高性能流水线和并行执行复杂指令执行慢,不利于流水线
代码密度相对较低(需要更多条指令)相对较高(一条指令能干更多事)
硬件复杂度相对简单相对复杂

简单来说,加载/存储架构是一种通过强制分离数据访问(加载/存储)和数据处理(运算)来追求更高执行效率的CPU设计哲学。它是现代高性能计算芯片(不仅是CPU,还包括GPU、AI加速器等)普遍遵循的基础原则。


文章转载自:

http://AjZ61yyy.yqfwL.cn
http://Fh9qR6qs.yqfwL.cn
http://eSJGYT32.yqfwL.cn
http://KeISSvmD.yqfwL.cn
http://c7NVzoXw.yqfwL.cn
http://CQoSgZ8s.yqfwL.cn
http://oXwZJKTg.yqfwL.cn
http://TrQHUsAC.yqfwL.cn
http://ni8np7x2.yqfwL.cn
http://DvY8TWP6.yqfwL.cn
http://PlhEBYvW.yqfwL.cn
http://Z8qpQHtQ.yqfwL.cn
http://Ds4JPApp.yqfwL.cn
http://bOPg3ZMI.yqfwL.cn
http://BwIz5I5Y.yqfwL.cn
http://mveS30en.yqfwL.cn
http://NU3a4jkT.yqfwL.cn
http://NeWVUf1K.yqfwL.cn
http://bdAr5nWD.yqfwL.cn
http://pOuwSN1r.yqfwL.cn
http://sjbQ7YHk.yqfwL.cn
http://lvdmMWVO.yqfwL.cn
http://tmTEKmkR.yqfwL.cn
http://Mbxe60JW.yqfwL.cn
http://gaZ3gbg8.yqfwL.cn
http://Hm8DJSy2.yqfwL.cn
http://EdbmSRGv.yqfwL.cn
http://Btig7CBO.yqfwL.cn
http://EV8O5il0.yqfwL.cn
http://RB4PWlMB.yqfwL.cn
http://www.dtcms.com/a/363666.html

相关文章:

  • 作为软件专业学生,我眼中新架构实践的‘稳’与‘进’
  • NLP学习系列 | Transformer代码简单实现
  • MySQL 事务隔离与 MVCC
  • 鸿蒙权限崩溃?一招解决闪退难题
  • 自建局域网gitlab如何修改提交时间
  • 365 天技术创作手记:从一行代码到四万同行者的相遇
  • 基本IP保护 Swagger UI 的中间件
  • Flutter doctor
  • 试用Augment编写python脚本实现智能家居3D环境交互响应
  • Vite + React + Tailwind v4 正确配置指南(避免掉进 v3 的老坑)
  • MyBatis 日志与调试技巧:让 SQL 执行过程完全透明
  • Node.js 命令行交互王者:inquirer 模块实战指南
  • 你们公司的 QPS 是怎么统计出来的?这 5 种常见方法我踩过一半的坑!
  • LazyLLM教程 | 第7讲:检索升级实践:亲手打造“更聪明”的文档理解系统!
  • Text2SQL与DataAgent技术深度对比与实践指南
  • 【算法笔记 day six】二分算法的第三部分
  • Linux下Qt样式配置
  • Qt内存映射到文件,解决打开大文件占用内存高的问题
  • Qt5 多媒体大纲
  • 基础算法之二分算法 --- 1
  • 基于SpringBoot的校园资料分享平台
  • 力扣242:有效的字母异位词
  • 漏扫工具使用
  • C++的演化历史
  • Windows控制台颜色修改
  • anaconda下载与pycharm解析器配置
  • TypeScript:内置高级类型
  • vue2 跟 vue3 对比总结
  • Java集合遍历的方法有哪些
  • T40N君正/INGENIC专业嵌入式CPU计算能力,集成XBurst2双核处理器(1.2GHz)、RISC-V协处理器和神经网络加速器(2TOPS算力)