4 Star 12 Fork 4

RV少年 (RV4Kids) / RVWeekly

 / 详情

RV4Kids Weekly Select (1) 每周精选1 《计算机组成与设计:RISC-V》

已完成
拥有者
创建于  
2021-04-03 10:09

RV与芯片评论.20210403:2021年第14周(总第36期).md

计算机组成与设计:RISC-V (浙江大学) (From training.eeworld.com.cn 2021.04.02)

http://training.eeworld.com.cn/course/6013

输入图片说明

本课程是信息与电子工程及相关计算机专业的专业基础课,课程包括处理器RISC-V指令集、寻址模式、数据类型、汇编语言,处理器微结构、控制器和流水线,存储系统、高速缓存、虚拟存储,多处理器和并行技术,系统设计性能评估及软硬件协同设计方法等。

讲师简介

  • 刘鹏浙江大学 - 博导

面向于计算机体系结构与集成电路设计领域,负责完成国家自然科学基金2项,国家“863”项目3项,霍英东教育基金优选课题、国家重点实验室基金5项等纵向项目,授权发明专利30余项,近期科研成果主要发表于IEEE Transactions on Computers, TVLSI, TACO等国际期刊。2003年主持设计了国内首款RISC/DSP媒体数字信号处理器(“浙大数芯”),负责设计具有自主知识产权的微处理器CPU IP核,该CPU IP核授权合作单位杭州士兰微电子股份有限公司面向消费类的音频系统芯片,截止2018年底销售系统芯片超过1360万颗,产生较好的经济效益和社会效益。

注册

输入图片说明

简介

本课程是信息与电子工程及相关计算机专业的专业基础课,课程包括处理器RISC-V指令集、寻址模式、数据类型、汇编语言,处理器微结构、控制器和流水线,存储系统、高速缓存、虚拟存储,多处理器和并行技术,系统设计性能评估及软硬件协同设计方法等。

本课程可以和线下教学进行结合,为学生提供复习、答疑和自我评价的线上平台,进一步对课堂上所学内容进行巩固和拓展,加强学生和教师之间在课堂以外的交流;也作为高等院校信息工程和计算机相关专业的本科生学习“计算机组成与设计”、“计算机系统结构”等课程的在线学习资源;并可供与计算机相关的专业人士和高校的相关任课教师学习参考。

本课程基于RISC-V指令集架构进行解读教学,在掌握传统的计算机组成知识的同时,也能学习了解指令集与系统架构设计方法。

课程目录

  • 1:课程介绍视频 (11分33秒) 原课 笔记

    • 一、Hardware-software interface 软硬件接口
      Machine language and assembly language programming 机器语言和汇编语言的编程
    • 二、Compiler optimizations and performance 编译器的优化和性能评估方法
    • 三、Processor design 处理器设计
      Pipelined processor design (重点我们关注)处理器的流水线设计
    • 四、Memory hierarchy design 存储器层次设计
      Caches (重点讲解)高速缓存cache的基本原理和设计
    • 五,虚拟存储器 Virtual memory & operating systems support
      如何通过系统软件及操作系统来进行管理虚拟存储器
    • 六、Multiprocessors and Multithreading 介绍多处理器和多线程技术

RISC-V assembly language RISC-V 汇编语言

RISC-V 的六类汇编指令

RISC-V 汇编指令的电路设计单元

  • 12:数据通路的基本单元模块 (13分23秒) 原课 笔记
  • 13:R型指令和I型算术指令视频 (12分16秒) 原课 笔记
  • 14:I型访存指令和S型指令 (12分34秒) 原课 笔记
  • 15:B型指令、I型JALR指令、J型指令、U型指令 (14分49秒) 原课 笔记
    • We have designed a complete datapath
      • Capable of executing all RISC-V instructions in one cycle each
      • Not all units (hardware) used by all instructions
    • 5 Phases of execution
      • IF, ID, EX, MEM, WB
      • Not all instructions are active in all phases
    • Controller specifies how to execute instructions

同学们,我们可以回顾一下 RISC-5 数据通路的设计过程,我们设计数据通路能在一个使用周期内完成一条 RISC-5 指令的执行,但在某条指令执行的时候,并不是所有的硬件单元都会用到。我们将指令执行过程划分为:取值,译码,执行,访存,写回 五个阶段。五个阶段是所有指令都要经历的,也有的阶段只有部分指令才会用到,我们在构建数据通路的过程中,通过认识了控制器的作用,控制器通过产生各种控制信号,控制着指令如何被执行,本节课就上到这里,谢谢大家。

三、Processor design 处理器设计

Pipelined processor design (重点我们关注)处理器的流水线设计

  • 19:流水线设计与结构冒险 (10分4秒) 原课 笔记
    • Pipelining Hazards
      A hazard is a situation that prevents starting the next instruction in the next clock cycle
      1. Structural hazard
        • A required resource is busy (e.g. needed in multple stages)
      2. Data hazard
        • Data dependency between instructions
        • Need to wait for previous instruction to complete its data read/write
      3. Control hazard
        • Flow of execution depends on previous instruction
    • Structural Hazard
      • Problem: Two or more instructions in the pipeline compete for access to a single physical resource
      • Solution: Can always solve a structural hazard by adding more hardware
        1. Instructions take it in turns to use resource, some instructions have to stall
        2. Add more hardware to machine
    • Regfile Structural Hazards
      • Each instruction:
        • can read up to two operands in decode stage
        • can write one value in writeback stage
      • Avoid structural hazard by having separate "ports"
        • two independent read ports and one independent write port

流水线冒险: 流水线有这样一种情况,“在下一个时钟节拍中,下一条指令不能执行” 的这种情况,我们称为冒险或者痛苦,流水线中存在三种类型的冒险:

  1. 第一种叫结构冒险,指某个硬件资源,同时被多条指令请求使用,
  2. 第二种是数据冒险指定的数据依赖性,某条指令读写操作需要等待前一条指令执行完成,
  3. 第三种是控制冒险,指程序执行流向需要依赖于前一条指令的执行结果,

下面我们对这三种冒险进行详细的讲解, 首先是结构冒险
问题来源 :流水线中两个或更多的指令在同时向同一个硬件资源发出访问请求,
有两种方法可以解决结构冒险问题:

  1. 第一种是指定轮流使用这项资源,但有时有的指令可能不得不被阻塞,以等待空闲资源,
  2. 第二种是增加更多的硬件资源,以满足硬件需求结构冒险的问题
    永远都是可以用增加硬件的方式来解决的。

这种结构冒险可能发生在寄存器文件,因为在有些指令的译码阶段,可能需要读两个寄存器值,同时可能另一条指令刚好执行到写回阶段,需要写寄存器,这个时候寄存器文件需要同时处理两个读操作。和一个写操作,为了避免这种结构冒险,就要使用独立的端口,两个读端口和一个写端口,这样三个访问请求就能同时满足。

结构冒险,也有可能发生在存储器,比如在执行如图所示的指令优势,我们看到其中的 StoreWord 指令会在访存阶段,访问数据存储器保存的数据,而在它之后,第三条指令也会在同时进入取指阶段,访问指令存储器读取指令,这就是出现的指令存储器和数据存储器被同时使用的问题,我们通过两个分离的存储单元来解决该冒险。这节课就上到这里,谢谢大家。

  • 20:数据冒险 (10分33秒) 原课 笔记
    • Pipelining increases throughput by overlapping execution of multiple instructions
    • All pipeline stages have same duration
    • Hazards potentially limit performance
      • Maximizing performance requires programmer/compiler assistance
      • We're seen so far Structure & Data hazards so far...

在这一讲中,我们对流水线进行了更为深入的学习,流水线通过重叠多条指令的执行来提高吞吐率,在流水线中,所有流水席的持续时间都是相同的,已使用节拍时间一致,同时我们介绍了流水线中可能存在的冒险问题,这些冒险问题在一定程度上阻碍了处理器的性能的发挥。我们介绍了结构冒险和数据冒险,我们看到,虽然我们可以在处理器中采用一些避免这些冒险的结构机制设计,但并不能完全做到规避冒险的发生,想要使性能最大化,还是需要借助程序员和编译器的帮助,同学们本讲到此,谢谢大家。

  • 21:控制冒险以及超标量处理器 (16分41秒) 原课 笔记
    • lw Data Hazard
      • Slot after a load is called a load delay slot
        • if that Instruction uses the result of the load, then the hardware will stall for on cycle
        • Equivalent to inserting an explicit nop in the slot
        • Performance loss
      • Idea:
        • Put unrelated Instruction into load delay slot
        • No performance loss!
    • Pipelining increases throughput by overlapping execution of multiple instructions
    • All pipeline stages have same duration
    • Hazards potentially limit performance
      • Maximizing performance requires programmer/compiler assistance
    • Superscalar processors use multiple execution units for additional instruction level parallelism

最后我们简单介绍了超标量处理器的基本概念,超标量处理器采用多个执行单元实现指令级并行,提升处理器的性能,同学们本讲到此结束。 :+1:

四、Memory hierarchy design 存储器层次设计

Caches (重点讲解)高速缓存cache的基本原理和设计

  • 22:存储器层次结构 (11分30秒) 原课 笔记

    • Cache Design
      • How do we organize cache ?
      • Where does each memory address map to?
        • Remember that cache is subset of memory, so multiple memory addresses map to the same cache location.
      • How do we know which elements are in cache?
      • How do we quickly locate them?
    • Recap
      • Caches: The key idea, Provide an illusion to the processor that the memory is infinitely large and infinitely fast.
  • 23:直接映射高速缓存 (16分12秒) 原课 笔记

  • 24:访问与缺失 (16分54秒) 原课 笔记

  • 25:高速缓存设计优化 (18分30秒) 原课 笔记

    • Recap : 其主要思想是如果做某件事情成本很大,但是我们需要重复做,那么就做一次,并且把结果缓存起来,再开始,设计过程中需要对开始的尺寸块儿大小且策略关联度块儿替换策略多级开始等进行选择,根据应用程序技术工艺成本开销,利用新的模型进行开始设计空间的探索,从而设计出合适高效的开始系统。

五,虚拟存储器 Virtual memory & operating systems support

如何通过系统软件及操作系统来进行管理虚拟存储器

六、Multiprocessors and Multithreading 介绍多处理器和多线程技术

PR 《34:共享内存多处理器》00:36

http://training.eeworld.com.cn/video/29472#showbbs

输入图片说明

课后作业:伪共享 - cache 对齐 (知乎专栏转载)

输入图片说明

输入图片说明

评论 (36)

袁德俊 创建了任务
袁德俊 关联仓库设置为RV4Kids/RVWeekly
袁德俊 修改了描述
袁德俊 修改了描述
袁德俊 修改了描述
展开全部操作日志

1. 课程的基本内容构成

http://training.eeworld.com.cn/video/29439

1

2

3

4

5

6

7

  1. 同学们好,本讲介绍,计算机组成与设计mooc课程的基本内容构成这门课的预修课程要求主要包括以下几门课程,第一是数字系统设计或者数字电路设计课程,第二是C语言或者python语言的学习,第三是对硬件电路描述语言v log,另外如果同学们学习的。编译原理操作系统和集中电路设计等课程对计算机组成与设计的这门课学习会很有帮助。

8

我们使用的课本如右图所示是机械工业出版社2019年引进的计算机组成与设计为四和五版本。

9

10

  1. 本门课的主题主要包括,一软硬件接口机器语言和汇编语言的编程,二编译器的优化和性能评估方法,三处理器设计重点,我们关注处理器的流水线设计,四存储器层次设计,重点讲解高速缓存cache的基本原理和设计。五虚拟存储器如何通过系统软件及操作系统来进行管理,虚拟存储器六介绍多处理器和多线程技术。

11

  1. 在计算机系统中一般划分为硬件和软件两个部分。在硬件上,按照计算机规模,大到仓库规模,如超级计算机系统,小到智能手机系统,计算机包括中央处理器,存储器输入输出。

12

其中高速缓存存储器cache是存储器的一种,中央处理器,包括执行单元功能单元cache功能单元。

13

  1. 一般通过逻辑门构建在软件上,程序利用不同层次的并行与硬件系统适配,从而实现计算机系统的高效能,这里如图所示的定义主要包括任务级并行。

在多个计算机上并行执行线程级并行,在多个处理器合格并执行指令级并行,通过同一时刻发射多条指令,利用多个功能单元,同时执行发射多条指令数据级并行,同一时刻对不同的数据做相同的运算操作,同时可以通过。硬件描述语言来描述硬件逻辑单元的并行,这也是硬件语言的特点之一一般来说,与软件开发最相关的是数据级并行指令级并行线程级并行任务级并行。

14

  1. 计算机及结构设计的主要思路包括,一采用抽象方法来表示不同的层次,从而便于系统的设计与实现,二基于摩尔定律来预测处理器设计与工艺技术之间的关系,三采用局部性原理设计存储器层次结构四。采用并行性和阿姆达尔定律给出处理器系统的约束条件,五,通过荣誉模块设计实现系统的可靠性,我们整个课程会结合上述的五个思路来讲解我们的课程,我们看到计算机系统从高级语言到底层电路实现之间的。

15

  1. 抽象层次之间的关系示意图左图表示的是抽象层次,右图对应的是各个层次的描述,高级语言汇编代码,机器码结构电路的对应图,从左图我们可以看到,高级语言程序经过编译器被编译为汇编语言程序,汇编语言程序。由汇编器编译为对应的VS5的机器码,机器码与意念体结构描述有相对应的逻辑关系及结构的实现,对应与逻辑电路或电路原理图的设计。

16

  1. 摩尔定律与摩尔骆氏是由英特尔创始人之一戈登摩尔提出的。

他预测,集中电路上可容纳的晶体管数目约每隔两年便会增加一倍,经常被赢的18个月是我英特尔首席执行官大卫豪斯提出的,预计18个月会将新的性能提高一倍及更多的晶体管,使其更快,是一种以倍数增长的观测摩尔定律,从目前来看一直有效。

17

从下图。我们可以看到密度也是考察特性之一,这个图来自于台积电TSMC在2019年后tips的专题演讲。

18

采用局部性原理来设计处理器,存储器层次离处理器最近的这种单元分别是寄存器cache物理存储固态存储器虚拟存储器等。这个存储器层次,我们在后面的讲解中会分别详细介绍。

19

  1. 并行性,如任务级并行

20

指令级并行

21

和线程级并行等,

22

阿姆达尔定律,与阿姆的love是一个计算机科学界的经验法则,因吉恩阿姆达尔德里,它代表着处理器并行运算之后。效率提升的能力并行计算中的加速使用定型前的执行速度和定型后的执行速度之比来表示的,他表示了在定型化之后的效率提升情况,阿姆达尔定律是固定复杂的量化标准,该定理是指系统中某一部件采用更快执行方式所能。进程度取决于这种执行方式被使用的频率或所占总执行时间的比例。

23

  1. 我们可以通过荣誉模块设计实现可靠性荣誉取得失效的部分不会使整个系统失效,增加经济网密度可降低荣誉成本,

24

我们可以看到,通过荣誉模块设计,实现可靠性的例子是用于从数据中心到存储器。到内存的所有设计中,例如通过数据中心的荣誉设计保证互联网络服务正常,谷歌公司提出的荣誉计算机的设计思路,独立磁盘冗余阵列的设计以及荣誉存储系统的设备设计等,

25

如何在晶体结构的研究工作呢,我们从图中可以观察到。目前,业界先进的cpu速度基本上维持在5G赫兹左右,但是经济管的提升度还在逐步提高,对设计功耗都有约束。

26

  1. 而目前有很多应用需求,如云计算可视化虚拟现实增强现实娱乐自动驾驶教育医疗等应用。需求驱动各种架构的设计研究,因此需要应用编程创新和其架构的创新有机结合,才有可能提升系统性能

27

体系架构,随着应用和工艺技术也在不断的引进应用需求驱动技术的改进,改进的技术使应用成为现实,可能耳机应用性的软件开发成为目前。

28

  1. 我们看到如下的信息应用对数据局部性原理的需求,这个图取自国际固态电路年会,STC,我们选取了嵌入式神经网络在人工智能方面的应用,如图中所示的人脸识别增强现实等应用,如果从边缘端传输数据到云端进行处理,会耗费较大的能量。和暴露用户隐私,因此目前一般建议在边缘端进行处理,要求的能力效率为1t ops,到10t ops/w,

29

未来的应用需要不可估量的计算能力,如高性能计算机器智能大数据分析等应用。

30

  1. 高性能计算的应用,例如探索太空预测气候变化研制新药机器学习实时仿真等,这些应用对超级计算机提出了大算力的需求,2021年超级计算机可以达到每秒1500亿次浮点运算的能力,

31

本讲我们介绍了计算机系统的表示,课程的主要内容及应用需求和体系架构,软件系统设计研究的必要性,本节课上到这里谢谢各位同学。

32

字幕

  1. 同学们好,本讲介绍,计算机组成与设计mooc课程的基本内容构成这门课的预修课程要求主要包括以下几门课程,第一是数字系统设计或者数字电路设计课程,第二是C语言或者python语言的学习,第三是对硬件电路描述语言v log,另外如果同学们学习的。编译原理操作系统和集中电路设计等课程对计算机组成与设计的这门课学习会很有帮助,我们使用的课本如右图所示是机械工业出版社2019年引进的计算机组成与设计为四和五版本。

  2. 本门课的主题主要包括,一软硬件接口机器语言和汇编语言的编程,二编译器的优化和性能评估方法,三处理器设计重点,我们关注处理器的流水线设计,四存储器层次设计,重点讲解高速缓存cache的基本原理和设计。五虚拟存储器如何通过系统软件及操作系统来进行管理,虚拟存储器六介绍多处理器和多线程技术,在计算机系统中一般划分为硬件和软件两个部分。

  3. 在硬件上,按照计算机规模,大到仓库规模,如超级计算机系统,小到智能手机系统,计算机包括中央处理器,存储器输入输出,其中高速缓存存储器cache是存储器的一种,中央处理器,包括执行单元功能单元cache功能单元。一般通过逻辑门构建在软件上,程序利用不同层次的并行与硬件系统适配,从而实现计算机系统的高效能,这里如图所示的定义主要包括任务级并行。

  4. 在多个计算机上并行执行线程级并行,在多个处理器合格并执行指令级并行,通过同一时刻发射多条指令,利用多个功能单元,同时执行发射多条指令数据级并行,同一时刻对不同的数据做相同的运算操作,同时可以通过。硬件描述语言来描述硬件逻辑单元的并行,这也是硬件语言的特点之一一般来说,与软件开发最相关的是数据级并行指令级并行线程级并行任务级并行。

  5. 计算机及结构设计的主要思路包括,一采用抽象方法来表示不同的层次,从而便于系统的设计与实现,二基于摩尔定律来预测处理器设计与工艺技术之间的关系,三采用局部性原理设计存储器层次结构四。采用并行性和阿姆达尔定律给出处理器系统的约束条件,五,通过荣誉模块设计实现系统的可靠性,我们整个课程会结合上述的五个思路来讲解我们的课程,我们看到计算机系统从高级语言到底层电路实现之间的。

  6. 抽象层次之间的关系示意图左图表示的是抽象层次,右图对应的是各个层次的描述,高级语言汇编代码,机器码结构电路的对应图,从左图我们可以看到,高级语言程序经过编译器被编译为汇编语言程序,汇编语言程序。由汇编器编译为对应的VS5的机器码,机器码与意念体结构描述有相对应的逻辑关系及结构的实现,对应与逻辑电路或电路原理图的设计,摩尔定律与摩尔骆氏是由英特尔创始人之一戈登摩尔提出的。

  7. 他预测,集中电路上可容纳的晶体管数目约每隔两年便会增加一倍,经常被赢的18个月是我英特尔首席执行官大卫豪斯提出的,预计18个月会将新的性能提高一倍及更多的晶体管,使其更快,是一种以倍数增长的观测摩尔定律,从目前来看一直有效从下图。我们可以看到密度也是考察特性之一,这个图来自于台积电TSMC在2019年后tips的专题演讲,采用局部性原理来设计处理器,存储器层次离处理器最近的这种单元分别是寄存器cache物理存储固态存储器虚拟存储器等。

  8. 这个存储器层次,我们在后面的讲解中会分别详细介绍适应性,如任务级并行指令级并行和线程级并行等,阿姆达尔定律,与阿姆的love是一个计算机科学界的经验法则,因吉恩阿姆达尔德里,它代表着处理器并行运算之后。效率提升的能力并行计算中的加速使用定型前的执行速度和定型后的执行速度之比来表示的,他表示了在定型化之后的效率提升情况,阿姆达尔定律是固定复杂的量化标准,该定理是指系统中某一部件采用更快执行方式所能。

  9. 进程度取决于这种执行方式被使用的频率或所占总执行时间的比例,我们可以通过荣誉模块设计实现可靠性荣誉取得失效的部分不会使整个系统失效,增加经济网密度可降低荣誉成本,我们可以看到,通过荣誉模块设计,实现可靠性的例子是用于从数据中心到存储器。到内存的所有设计中,例如通过数据中心的荣誉设计保证互联网络服务正常,谷歌公司提出的荣誉计算机的设计思路,独立磁盘冗余阵列的设计以及荣誉存储系统的设备设计等,如何在晶体结构的研究工作呢,我们从图中可以观察到。

  10. 目前,业界先进的cpu速度基本上维持在5G赫兹左右,但是经济管的提升度还在逐步提高,对设计功耗都有约束,而目前有很多应用需求,如云计算可视化虚拟现实增强现实娱乐自动驾驶教育医疗等应用。需求驱动各种架构的设计研究,因此需要应用编程创新和其架构的创新有机结合,才有可能提升系统性能体系架构,随着应用和工艺技术也在不断的引进应用需求驱动技术的改进,改进的技术使应用成为现实,可能耳机应用性的软件开发成为目前。

  11. 我们看到如下的信息应用对数据局部性原理的需求,这个图取自国际固态电路年会,STC,我们选取了嵌入式神经网络在人工智能方面的应用,如图中所示的人脸识别增强现实等应用,如果从边缘端传输数据到云端进行处理,会耗费较大的能量。和暴露用户隐私,因此目前一般建议在边缘端进行处理,要求的能力效率为1t ox,到时t ox没完,未来的应用需要不可估量的计算能力,如高性能计算机器智能大数据分析等应用。

  12. 高性能计算的应用,例如探索太空预测气候变化研制新药机器学习实时仿真等,这些应用对超级计算机提出了大算力的需求,2021年超级计算机可以达到每秒1500亿次浮点运算的能力,本讲我们介绍了计算机系统的表示,课程的主要内容及应用需求和体系架构,软件系统设计研究的必要性,本节课上到这里谢谢各位同学。

摘要

  • 目前一般建议在边缘端进行处理,要求的能力效率为1t ops,到10t ops/w,
袁德俊 修改了描述

2:算术指令

要点:

输入图片说明

输入图片说明

袁德俊 修改了描述
袁德俊 修改了描述

3:访存指令

要点

输入图片说明

输入图片说明

输入图片说明

lw sw lb sb lbu

袁德俊 修改了描述
袁德俊 修改了描述

4:条件判断分支转移指令

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

袁德俊 修改了描述

5:逻辑运算指令

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

6:函数调用

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

袁德俊 修改了描述
袁德俊 修改了描述

7:栈的使用

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

22

袁德俊 修改了描述

8:R型指令

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

袁德俊 修改了描述

9:I型指令和S型指令

1

2

3

4

5

6

7

8

9

10

11

12

13

14

袁德俊 修改了描述

10:B型指令和U型指令

1

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

输入图片说明

16

17

18

19

袁德俊 修改了描述

11:J型指令

1

2

3

4

5

6

7

8

9

10

11

12

有兴趣的同学可以查看 《RISC-V 指令集及结构手册》
https://www.doc88.com/p-5651709815801.html

袁德俊 修改了描述
袁德俊 修改了描述

12:数据通路的基本单元模块

1

2

3

4

5

6

7

8

9

10

1,寻址阶段
2,译码
3,执行
4,内存存取
5,写回寄存器

11

12

13

14

15

16

17

18

19

20

袁德俊 修改了描述
袁德俊 修改了描述

13:R型指令和I型算术指令视频

1

2

3

4

5

6

7

8

9

10

11

12

13

14

These slides contain material from courses: USB CS61C.

【读书笔记】《Computer Organization and Design: The Hardware/Software Interface》(1)
https://blog.csdn.net/weixin_30256505/article/details/99564193
weixin_30256505 2018-12-19 10:35:00
转载于:https://www.cnblogs.com/luhuidu/p/10141749.html
相关资源:Computer Organization and Design The Hardware Software Interface ARM 无水印pdf

Computer Organization and Design The Hardware Software interface 阅读笔记3
https://blog.csdn.net/qq_26371477/article/details/109705452
源级小赵 2020-11-18 09:13:42 阅读笔记 1 2 4 5

《计算机组成与设计》David A.Patterson-英文原版之处理器4.1,4.2章节思维导图(一) (二) (三)

袁德俊 修改了描述

14:I型访存指令和S型指令

1

2

3

4

5

6

7

8

9

10

建议:实际设计芯片时固定一个值较好,避免在门级仿真产生X信号的传播问题。

11

这是RISC-V编码的特点和MIPS的复杂指令的不同,造成了RISC-V的译码复杂。这点同学们在设计译码的时候要查阅指令集系统。因此很难说,RISC-V 是一个很好的指令编码设计。上述仅代表我个人的观点。

  • B 型指令 的实现

12

13

袁德俊 修改了描述

15:B型指令、I型JALR指令、J型指令、U型指令

1

2

3

4

5

6

7

8

9

10

11

12

13

14

同学们,我们可以回顾一下 RISC-5 数据通路的设计过程,我们设计数据通路能在一个使用周期内完成一条 RISC-5 指令的执行,但在某条指令执行的时候,并不是所有的硬件单元都会用到。我们将指令执行过程划分为:取值,译码,执行,访存,写回 五个阶段。五个阶段是所有指令都要经历的,也有的阶段只有部分指令才会用到,我们在构建数据通路的过程中,通过认识了控制器的作用,控制器通过产生各种控制信号,控制着指令如何被执行,本节课就上到这里,谢谢大家。

袁德俊 修改了描述
袁德俊 修改了描述
袁德俊 修改了描述

16:控制信号、关键路径

1

2

3

4

5

6

7

8

袁德俊 修改了描述

17:控制器实现

1

2

3

4

5

6

7

8

9

10

袁德俊 修改了描述

18:处理器性能

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

袁德俊 修改了描述

19:流水线设计与结构冒险

1

2

3

4

5

6

7

8

9

10

11

12

13

14

袁德俊 修改了描述
袁德俊 修改了描述
袁德俊 修改了描述

20:数据冒险

1

2

3

4

5

6

7

8

9

10

11

12

13

在这一讲中,我们对流水线进行了更为深入的学习,流水线通过重叠多条指令的执行来提高吞吐率,在流水线中,所有流水席的持续时间都是相同的,已使用节拍时间一致,同时我们介绍了流水线中可能存在的冒险问题,这些冒险问题在一定程度上阻碍了处理器的性能的发挥。我们介绍了结构冒险和数据冒险,我们看到,虽然我们可以在处理器中采用一些避免这些冒险的结构机制设计,但并不能完全做到规避冒险的发生,想要使性能最大化,还是需要借助程序员和编译器的帮助,同学们本讲到此,谢谢大家。

袁德俊 修改了描述
袁德俊 修改了描述

21:控制冒险以及超标量处理器

1

2

3

4

lw Data Hazard

  • Slot after a load is called a load delay slot
    • if that Instruction uses the result of the load, then the hardware will stall for on cycle
    • Equivalent to inserting an explicit nop in the slot
    • Performance loss
  • Idea:
    • Put unrelated Instruction into load delay slot
    • No performance loss!

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

  • Superscalar processors use multiple execution units for additional instruction level parallelism
袁德俊 修改了描述
袁德俊 修改了描述
袁德俊 修改了描述
袁德俊 修改了描述

22:存储器层次结构

1

2

3

4

图书馆为例!

5

6

7

8

高速缓存(Cache)

9

10

11

12

局部性原理

13

14

15

16

Cache Design

  • How do we organize cache ?
  • Where does each memory address map to?
    • Remember that cache is subset of memory, so multiple memory addresses map to the same cache location.
  • How do we know which elements are in cache?
  • How do we quickly locate them?

17

18

Recap

  • Caches:
    The key idea, Provide an illusion to the processor that the memory is infinitely large and infinitely fast.
袁德俊 修改了描述

23:直接映射高速缓存

1

2

3

4

时间局部性原理与空间局部性原理。

5

How do we quickly locate them?

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

袁德俊 修改了描述

24:访问与缺失

1

  1. Lecture 24: Cache: Miss

2

  1. Accessing Data in a Direct-Mapped Cache

3

  1. Accessing Data in a Direct-Mapped Cache

4

  1. 16 KB Direct Mapped Cache, 16B blocks

5

    1. Read 0x00000014

6

  1. So we read block 1 (0000000001)

7

  1. No valid data

8

  1. 从主存中读取数据到 CACHE 索引为1的块中

9

  1. So load that data into cache, setting tag, valid

10

  1. Read from cache at offset, return word b

11

    1. Read 0x0000001C = 0 ... 00 0..001 1100

12

  1. Index is Valid

13

  1. Index valid, Tag Matches

14

  1. Index Valid, Tag Matches, return d

15

    1. Read 0x00000034 = 0...00 0..011 0100

16

  1. So read block 3

17

  1. No valid data

18

  1. Load that cache block, return word f

19

    1. Read 0x00008014 = 0...10 0..001 0100

20

  1. So read Cache Block 1, Data is Valid

21

  1. Cache Block 1 Tag does not match (0!=2)

22

  1. Miss, so replace block 1 with new data & tag

23

  1. Miss, so replace block 1 with new data & tag

24

  1. And return word J

25

  1. Do an example yourself. What happens?

26

  1. Answers

27

  1. Multiword-Block Direct-Mapped Cache

28

  1. Multiword-Block Direct-Mapped Cache (graphs)

29

30

31

  1. What kind of locality are we taking advantage of?

32

  1. What to Do on a Write Hit?
  • Write-through
    • Update both cache and memory
  • Write-back
    • update word in cache block
    • allow memory word to be "stale"
    • add 'dirty' bit to block
      • memory & Cache inconsistent
      • needs to be updated when block is replaced
    • ...OS flushes cache before I/O
  • Performance trade-offs? (33.)

33

34

  1. 块大小的选择是一个权衡的设计过程
    通常来说使用较大的块可以减少缺失率,因为利用了空间局部性原理。对于连接数组的访问有比较好的效果。

35

  1. Block Size Tradeoff
  • Benefits of Larger Block Size
    • Spatial Locality: if we access a given word, we're likely to access other nearby words soon
    • Very applicable with Stored-Program Concept
    • Works well for sequential array accesses
  • Drawbacks of Larger Block Size
    • Larger block size means larger miss penalty
      • on a miss, takes longer time to load a new block from next level
    • If block size is too big relative to cache size, then there are too few blocks
      • Result: miss rate goes up

36

  1. 举一个极端的例子来说明为什么随着块大小增大缺失率最终会上升

37

  1. Extreme Example: One Big Block
    Valid Bit[] Tag[ ] Cache Data [B3|B2|B1|B0]
  • Cache Size = 4 bytes Block Size = 4 bytes
    • Only ONE entry (row) in the cache!
  • If item accessed, likely accessed again soon
    • But unlikely will be accessed again immediately!
  • The next access will likely to be a miss again
    • Continually loading data into the cache but discard data (force out) before use it again
    • Nightmare for cache designer: Ping Pong Effect

38

  1. Block Size Tradeoff Conclusions
  • Miss Penalty vs Block Size
  • Miss Rate vs Block Size
    • Exploits spatial local
    • Fewer Blocks: compromises temporal local
  • Average Access Time vs Block Size
    • Increased miss penalty & miss rate

39

  1. Types of Cache Misses (1/2)
  • "Three Cs" Model of Misses
  • 1st C: Compulsory Misses
    • occur when a program is first started
    • cache does not contain any of that program's data yet, so misses are bound to occur
    • can't be avoided easily, so won't focus on these in this course
    • Every block of memory will have one compulsory miss (NOT only ever block of the cache)
  • 本课程中不过多关注这类缺失

40

  1. Types of Cache Misses (2/2)
  • 2nd C: Conflict Misses
    • miss that occurs because two distinct memory addresses map to the same cache location
    • two blocks (which happen to map to the same location) can keep overwriting each other
    • big problem in direct-mapped caches
    • how do we lessen the effect of these?
  • Dealing with Conflict Misses
    • Solution 1: Make the cache size bigger
      • Fails at some point
    • Solution 2: Multiple distinct blocks can fit in the same cache Index?

41

  1. Fully Associative Cache(1/3)
  • Memory address fields:
    • Tag: same as before
    • Offset: same as before
    • Index: non-existant
  • What does this mean?
    • no "rows": any block can go anywhere in the cache
    • must compare with all tags in entire cache to see if data is there

42

  1. Fully Associative Cache(2/3)
  • Fully Associative Cache (e.g., 32 B block)
    • compare tags in parallel

43

  1. Fully Associative Cache(3/3)
  • Benefit of Fully Associative Cache
    • No Conflict Misses(since data can go anywhere)
  • Drawbacks of Fully Associative Cache
    • Need hardware comparator for every single entry: if we have a 64KB of data in cache with 4B entries, we need 16K comparators: infeasible

44

  1. Final Type of Cache Miss
  • 3rd C: Capacity Misses
    • miss that occurs because the cache has a limited size
    • miss that would not occur if we increase the size of the cache
    • sketchy definition, so just get the general idea
  • This is the primary type of miss for Fully Associative caches.

45

  1. How to categorize misses
  • Run an address trace against a set of caches:
    • First, consider an infinite-size, fully-associative cache. For every miss that occurs now, consider it a compulsory miss.
    • Next, consider a finite-sized cache(of the size you want to examine) with full-associativity. Every miss that is not in # 1 is a capacity miss.
    • Finally, consider a finite-size cache with finite-associativity. All of the remaining misses that are not # 1 or # 2 are conflict misses.

46

  1. Recap
  • Divide into T I O bits, Go to Index = I, check valid
    1. If 0, load block, set valid and tag(COMPULSORY MISS) and use offset to return the right chunk (1,2,4-bytes)
    2. If 1, check tag
      1. If Match (HIT), use offset to return the right chunk
      2. If not(CONFLICT MISS), load block, set valid and tag, use offset to return the right chunk
        ADDRESS: TAG INDEX OFFSET

TEXT

  1. Lecture 24: Cache: Miss
  2. Accessing Data in a Direct-Mapped Cache
  3. Accessing Data in a Direct-Mapped Cache
  4. 16 KB Direct Mapped Cache, 16B blocks
    1. Read 0x00000014
  5. So we read block 1 (0000000001)
  6. No valid data
  7. 从主存中读取数据到 CACHE 索引为1的块中
  8. So load that data into cache, setting tag, valid
  9. Read from cache at offset, return word b
    1. Read 0x0000001C = 0 ... 00 0..001 1100
  10. Index is Valid
  11. Index valid, Tag Matches
  12. Index Valid, Tag Matches, return d
    1. Read 0x00000034 = 0...00 0..011 0100
  13. So read block 3
  14. No valid data
  15. Load that cache block, return word f
    1. Read 0x00008014 = 0...10 0..001 0100
  16. So read Cache Block 1, Data is Valid
  17. Cache Block 1 Tag does not match (0!=2)
  18. Miss, so replace block 1 with new data & tag
  19. Miss, so replace block 1 with new data & tag
  20. And return word J
  21. Do an example yourself. What happens?
  22. Answers
  23. Multiword-Block Direct-Mapped Cache
  24. Multiword-Block Direct-Mapped Cache (graphs)
  25. What kind of locality are we taking advantage of?
  26. What to Do on a Write Hit?
  • Write-through
    • Update both cache and memory
  • Write-back
    • update word in cache block
    • allow memory word to be "stale"
    • add 'dirty' bit to block
      • memory & Cache inconsistent
      • needs to be updated when block is replaced
    • ...OS flushes cache before I/O
  • Performance trade-offs? (33.)
  1. 块大小的选择是一个权衡的设计过程
    通常来说使用较大的块可以减少缺失率,因为利用了空间局部性原理。对于连接数组的访问有比较好的效果。
  2. Block Size Tradeoff
  • Benefits of Larger Block Size
    • Spatial Locality: if we access a given word, we're likely to access other nearby words soon
    • Very applicable with Stored-Program Concept
    • Works well for sequential array accesses
  • Drawbacks of Larger Block Size
    • Larger block size means larger miss penalty
      • on a miss, takes longer time to load a new block from next level
    • If block size is too big relative to cache size, then there are too few blocks
      • Result: miss rate goes up
  1. 举一个极端的例子来说明为什么随着块大小增大缺失率最终会上升
  2. Extreme Example: One Big Block
    Valid Bit[] Tag[ ] Cache Data [B3|B2|B1|B0]
  • Cache Size = 4 bytes Block Size = 4 bytes
    • Only ONE entry (row) in the cache!
  • If item accessed, likely accessed again soon
    • But unlikely will be accessed again immediately!
  • The next access will likely to be a miss again
    • Continually loading data into the cache but discard data (force out) before use it again
    • Nightmare for cache designer: Ping Pong Effect
  1. Block Size Tradeoff Conclusions
  • Miss Penalty vs Block Size
  • Miss Rate vs Block Size
    • Exploits spatial local
    • Fewer Blocks: compromises temporal local
  • Average Access Time vs Block Size
    • Increased miss penalty & miss rate
  1. Types of Cache Misses (1/2)
  • "Three Cs" Model of Misses
  • 1st C: Compulsory Misses
    • occur when a program is first started
    • cache does not contain any of that program's data yet, so misses are bound to occur
    • can't be avoided easily, so won't focus on these in this course
    • Every block of memory will have one compulsory miss (NOT only ever block of the cache)
  • 本课程中不过多关注这类缺失
  1. Types of Cache Misses (2/2)
  • 2nd C: Conflict Misses
    • miss that occurs because two distinct memory addresses map to the same cache location
    • two blocks (which happen to map to the same location) can keep overwriting each other
    • big problem in direct-mapped caches
    • how do we lessen the effect of these?
  • Dealing with Conflict Misses
    • Solution 1: Make the cache size bigger
      • Fails at some point
    • Solution 2: Multiple distinct blocks can fit in the same cache Index?
  1. Fully Associative Cache(1/3)
  • Memory address fields:
    • Tag: same as before
    • Offset: same as before
    • Index: non-existant
  • What does this mean?
    • no "rows": any block can go anywhere in the cache
    • must compare with all tags in entire cache to see if data is there
  1. Fully Associative Cache(2/3)
  • Fully Associative Cache (e.g., 32 B block)
    • compare tags in parallel
  1. Fully Associative Cache(3/3)
  • Benefit of Fully Associative Cache
    • No Conflict Misses(since data can go anywhere)
  • Drawbacks of Fully Associative Cache
    • Need hardware comparator for every single entry: if we have a 64KB of data in cache with 4B entries, we need 16K comparators: infeasible
  1. Final Type of Cache Miss
  • 3rd C: Capacity Misses
    • miss that occurs because the cache has a limited size
    • miss that would not occur if we increase the size of the cache
    • sketchy definition, so just get the general idea
  • This is the primary type of miss for Fully Associative caches.
  1. How to categorize misses
  • Run an address trace against a set of caches:
    • First, consider an infinite-size, fully-associative cache. For every miss that occurs now, consider it a compulsory miss.
    • Next, consider a finite-sized cache(of the size you want to examine) with full-associativity. Every miss that is not in # 1 is a capacity miss.
    • Finally, consider a finite-size cache with finite-associativity. All of the remaining misses that are not # 1 or # 2 are conflict misses.
  1. Recap
  • Divide into T I O bits, Go to Index = I, check valid
    1. If 0, load block, set valid and tag(COMPULSORY MISS) and use offset to return the right chunk (1,2,4-bytes)
    2. If 1, check tag
      1. If Match (HIT), use offset to return the right chunk
      2. If not(CONFLICT MISS), load block, set valid and tag, use offset to return the right chunk
        ADDRESS: TAG INDEX OFFSET

中文机翻

  1. 第二十四讲:缓存:缺失
  2. 访问直接映射缓存中的数据
  3. 访问直接映射缓存中的数据
  4. 16 KB直接映射缓存,16B块
    1. 读取0x00000014
  5. 所以我们读块1(0000000001)
  6. 无有效数据
  7. 所以将数据加载到缓存中,设置tag,valid
  8. 在偏移量处从缓存读取,返回字b
    1. 读取0x0000001C=0。。。00 0..001 1100
  9. 索引有效
  10. 索引有效,标记匹配
  11. 索引有效,标记匹配,返回d
    1. 读取0x00000034=0…00 0…011 0100
  12. 所以读第三块
  13. 无有效数据
  14. 加载缓存块,返回单词f
    1. 读取0x00008014=0…10 0…001 0100
  15. 所以读缓存块1,数据是有效的
  16. 缓存块1标记不匹配(0!=2)
  17. 缺失,所以用新的数据和标记替换块1
  18. 缺失,所以用新的数据和标记替换块1
  19. 返回单词J
  20. 自己举个例子。会发生什么?
  21. 答案
  22. 多字块直接映射缓存
  23. 多字块直接映射缓存(图)
  24. 我们在利用什么样的地方?
  25. 写命中怎么办?
  • 直写
    • 同时更新缓存和内存
  • 回写
    • 更新缓存块中的字
    • 允许内存字“过时”
    • 将“脏”位添加到块
      • 内存和缓存不一致
      • 当块被替换时需要更新
    • …操作系统在I/O之前刷新缓存
  • 性能权衡?(33.)
  1. 块大小的选择是一个权衡的设计过程
    通常来说使用较大的块可以减少缺失率,因为利用了空间局部性原理。对于连接数组的访问有比较好的效果。
  2. 块大小权衡
  • 较大块大小的好处
    • 空间位置:如果我们访问一个给定的单词,我们很可能很快就会访问附近的其他单词
    • 非常适用于存储程序概念
    • 适用于顺序阵列访问
  • 块大小较大的缺点
    • 较大的块大小意味着\u较大的未命中惩罚_
      • 在未命中时,从下一级加载新块需要较长的时间
    • 如果块大小相对于缓存大小太大,则块太少
      • 结果:漏检率上升
  1. 举一个极端的例子来说明为什么随着块大小增大缺失率最终会上升
  2. 极端的例子:一个大街区
    有效位[]标记[]缓存数据[B3 | B2 | B1 | B0]
  • 缓存大小=4字节块大小=4字节
    • 缓存中只有 一个 条目(行)!
  • 如果项目被访问,可能很快会再次访问
    • 但不太可能会立即再次访问!
  • 下一次访问可能会再次失败
    • 继续将数据加载到缓存中,但在再次使用之前丢弃数据(强制输出)
    • 缓存设计器的噩梦:乒乓效应
  1. 块大小权衡结论
  • 未命中惩罚vs块大小
  • 未命中率与块大小
    • 利用空间局部
    • 更少的块:折衷时间局部
  • 平均访问时间与块大小
    • 未命中惩罚和未命中率增加
  1. 缓存未命中的类型(1/2)
  • 失误的“三个C”模型
  • 1st C:强制未命中
    • 在程序第一次启动时发生
    • 缓存尚未包含该程序的任何数据,因此必然会发生未命中
    • 这是很难避免的,所以在本课程中,我们将不重点讨论这些问题
    • 每个内存块都将有一个强制未命中(不仅仅是缓存的任何一个块)
  • 本课程中不过多关注这类缺失
  1. 缓存未命中的类型(2/2)
  • 第二个C:冲突未命中
    • 因为两个不同的内存地址映射到同一个缓存位置而发生的未命中
    • 两个块(恰好映射到同一位置)可以不断地相互覆盖
    • 直接映射缓存中的大问题
    • 我们如何减少这些影响?
  • 处理冲突遗漏
    • 解决方案1:使缓存的大小更大
      • 在某个时候失败了
    • 解决方案2:多个不同的块可以放在同一个缓存索引中?
  1. 完全关联缓存(1/3)
  • 内存地址字段:
    • 标签:和以前一样
    • 偏移量:同上
    • 索引:不存在
  • 这是什么意思?
    • 没有“行”:任何块都可以放在缓存中的任何地方
    • 必须与整个缓存中的所有标记进行比较,以查看是否存在数据
  1. 完全关联缓存(2/3)
  • 完全关联缓存(例如,32 B块)
    • 并行比较标记
  1. 完全关联缓存(3/3)
  • 完全关联缓存的好处
    • 没有冲突未命中(因为数据可以去任何地方)
  • 完全关联缓存的缺点
    • 每个条目都需要硬件比较器:如果缓存中有64KB的数据和4B条目,则需要16K比较器:不可行
  1. 缓存未命中的最终类型
  • 3rd C:容量未命中
    • 由于缓存大小有限而发生的未命中
    • 如果我们增加缓存的大小,则不会发生丢失
    • 大概的定义,所以只要大致了解一下
  • 这是完全关联缓存的主要未命中类型。
  1. 如何对未命中进行分类
  • 对一组缓存运行地址跟踪:
    • 首先,考虑一个无限大小的完全关联缓存。对于现在发生的每一次失误,都将其视为强制性失误。
    • 接下来,考虑一个具有完全关联性的有限大小的缓存(您要检查的大小)。不在#1:我们的目标是 RISCV-CHINA WEEKLY :D中的每一次失误都是一次能力失误。
    • 最后,考虑具有有限关联性的有限大小缓存。其余所有不是1或2的未命中都是冲突未命中。
  1. 扼要重述
  • 分成T I O位,转到索引=I,检查有效
    1. 如果为0,则加载块,设置valid and tag(强制未命中),并使用offset返回正确的块(1,2,4字节)
    2. 如果为1,请检查标签
      1. 如果匹配(命中),使用offset返回正确的块
      2. 如果没有(冲突未命中),则加载块,设置valid和tag,使用offset返回正确的块
        地址:标记索引偏移
袁德俊 修改了描述

25:高速缓存设计优化

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

40

41

42

43

44

45

46

  1. Recap:
    其主要思想是如果做某件事情成本很大,但是我们需要重复做,那么就做一次,并且把结果缓存起来,再开始,设计过程中需要对开始的尺寸块儿大小且策略关联度块儿替换策略多级开始等进行选择,根据应用程序技术工艺成本开销,利用新的模型进行开始设计空间的探索,从而设计出合适高效的开始系统。
袁德俊 修改了描述
袁德俊 修改了描述

26:操作系统和虚拟存储

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

袁德俊 修改了描述

27:页表

1

2

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

袁德俊 修改了描述

28:地址变换高速缓存I

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

袁德俊 修改了描述

29:地址变换高速缓存II

1

2

3

6

7

  1. Adding I/O

8

9

11

12

13

14

袁德俊 修改了描述

30:单指令流多数据流

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

袁德俊 修改了描述

31:多指令多数据流

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

袁德俊 修改了描述

32:线程级并行编程

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

袁德俊 修改了描述

33:硬件同步

1

2

3

4

5

6

7

8

9

10

11

12

13

14

袁德俊 修改了描述

34:共享内存多处理器

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

  • 同学们的课后作业:伪共享

33

34

35

袁德俊 修改了描述

note_4769541

袁德俊 修改了描述
袁德俊 修改了描述
袁德俊 修改了描述
袁德俊 修改了描述
袁德俊 修改了描述
袁德俊 修改了标题
袁德俊 置顶等级设置为

RV4Kids/Shiliu PI, Shiliu Silicon, Shiliu Si, 石榴核.md

收录!

将被 PLCT 实验室 汪辰老师的“从0”计算机操作系统课替代,并以石榴派为实验系统。
这是第一份 RV4kids 的学习笔记,详实完整,对整个计算机体系结构有了全面的了解。

袁德俊 任务状态待办的 修改为已完成
袁德俊 置顶等级 修改为不置顶

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(1)
5631341 yuandj 1624973227
1
https://gitee.com/RV4Kids/RVWeekly.git
git@gitee.com:RV4Kids/RVWeekly.git
RV4Kids
RVWeekly
RVWeekly

搜索帮助