计算机体系结构学习笔记
文章平均质量分 75
D了一天bug忘了编译
欢迎交流!
展开
-
Gemmini测试test文件chisel源码详解(五)
【代码】Gemmini测试test文件chisel源码详解(五)原创 2023-10-13 15:33:54 · 318 阅读 · 0 评论 -
Gemmini测试test文件chisel源码详解(四)
矩阵生成TestUtils.scala。原创 2023-10-13 15:28:34 · 293 阅读 · 0 评论 -
Gemmini测试test文件chisel源码详解(三)
PipelineTester 类是一个继承自 PeekPokeTester 的测试器类,它接受一个 Pipeline[SInt] 类型的参数 c,并在其构造函数中定义了一些变量和方法。PipelineUnitTest 类是一个继承自 ChiselFlatSpec 的单元测试类,它定义了一些变量和方法。这段代码是用来测试流水线的。原创 2023-10-13 14:30:11 · 285 阅读 · 0 评论 -
Gemmini测试test文件chisel源码详解(二)
是一个测试单元,用于测试头文件生成的功能。根据给定的代码,它是一个包含单个测试用例的测试类。方法来生成一个头文件,并将结果打印到控制台输出。这个测试用例的目的是验证头文件生成的正确性。在测试用例中,通过调用。原创 2023-10-12 17:14:19 · 716 阅读 · 0 评论 -
Gemmini测试test文件chisel源码详解(一)
这段代码是用于测试 DMAReadCommandTracker 模块的功能和正确性。DMAReadCommandTracker 模块是一个用于跟踪 DMA 读取命令的状态的硬件模块,它可以分配和回收命令 id 和 tag,并在所有请求都返回后输出完成信号。DMACommandTrackerUnitTest 类是一个用于运行 DMACommandTrackerTester 的测试类,它继承自 ChiselFlatSpec 类,并指定了一些测试参数,如后端名称,目标目录等。原创 2023-10-12 16:57:43 · 266 阅读 · 0 评论 -
计算机体系结构基础知识介绍之简单回顾原码反码补码
最高位为符号位,0表示正数,1表示负数。例如:X = 0b11 (3),四比特表示原码 = 0011(3);X = - 0b11(-3) ,四比特表示原码 = 1011(11);最高位为符号位,0表示正数,1表示负数。正数的反码等于本身,负数的反码除符号位外,各位取反:例如:X = 0b11 (3),四比特表示原码 = 0011(3),对应反码为 = 0011(3);X = - 0b11(-3) ,四比特表示原码 = 1011(11),对应反码为 = 1100(12);原创 2023-07-27 15:38:32 · 328 阅读 · 1 评论 -
计算机体系结构基础知识介绍之磁盘阵列
磁盘阵列是一种将多个独立的磁盘组合在一起,形成一个大的存储系统,从而提高数据的可靠性、性能和容量的技术。磁盘阵列有不同的级别,根据不同的目标和需求,可以选择合适的方案。原创 2023-07-20 17:56:07 · 196 阅读 · 0 评论 -
计算机体系结构基础知识介绍之内存结构的36个术语汇总解释
内存访问密集的负载,可以通过使用更快的内存(DRAM)、提高内存本地性(软件配置),或者减少内存I/O数量来提高性能。页故障指的是当软件试图访问已映射在虚拟地址空间中,但是目前并未被加载在物理内存中的一个分页时,由中央处理器的内存管理单元所发出的中断。页故障通常是由于程序的内存需求超过了物理内存的容量,或者由于程序访问了无效或受保护的地址而引起的。当发生页故障时,操作系统会根据虚拟地址和页表来确定所需数据在主存储器或辅助存储器中的位置,并将其加载到物理内存中的一个空闲分页,并更新页表和其他相关数据结构。原创 2023-07-20 14:59:56 · 283 阅读 · 0 评论 -
计算机体系结构基础知识介绍之编译器优化技术和寄存器分配技术
大致来说,问题是如何用有限的颜色(对应寄存器)给图中的节点(对应数据)着色,使得相邻的节点(对应有依赖关系的数据)不同色。寄存器分配技术是编译器优化技术中最为重要的一种,因为寄存器是CPU中速度最快的存储单元,合理地利用寄存器可以显著提高程序执行速度。寄存器分配技术的基本思想是构造一个冲突图来表示程序中可能分配到寄存器的变量,然后用图着色算法来给每个变量分配一个不同颜色(对应寄存器)的标记,使得相互冲突(同时活跃)的变量不分配同一个寄存器。然后,我们需要用图着色算法来给每个节点分配一个颜色(对应寄存器)。原创 2023-07-16 15:06:54 · 324 阅读 · 0 评论 -
计算机体系结构基础知识介绍之控制流指令
控制流指令是指能够改变程序执行顺序的指令,如分支、跳转、返回等。控制流指令必须指定目标地址,即要跳转到哪里继续执行。原创 2023-07-15 17:32:52 · 473 阅读 · 0 评论 -
计算机体系结构基础知识介绍之内存寻址(二)
寻址方式是指指令用来指定要访问的对象(常量、寄存器或内存中的数据)的方式。当一个内存位置被使用时,寻址方式给出的实际内存地址叫做有效地址。立即数或字面量通常被认为是内存寻址方式(尽管它们访问的值是在指令流中),而寄存器通常被分开,因为它们通常没有内存地址。我们也把依赖于程序计数器的寻址方式,叫做PC相对寻址。PC相对寻址主要用于在控制转移指令中指定代码地址。原创 2023-07-15 15:45:59 · 1290 阅读 · 0 评论 -
计算机体系结构基础知识介绍之内存寻址(一)(包含大端小端、字节对齐等)
大端模式(Big-endian)是指将数据的低位(比如 1234 中的 34 就是低位)放在内存的高地址上,而数据的高位(比如 1234 中的 12 就是高位)放在内存的低地址上。字节对齐是指在多字节数据访问时,要求数据的起始地址能被其占用空间的整数倍整除。不同的编译器或平台可能对字节对齐有不同的要求或默认值,如果数据不对齐,可能导致数据解析错误;而如果数据对齐,一次访问就能获取完整的数据。- 小端模式(Little-endian)是指将数据的低位放在内存的低地址上,而数据的高位放在内存的高地址上。原创 2023-07-15 15:10:46 · 696 阅读 · 0 评论 -
计算机体系结构基础知识介绍之线程级并行性及其利用
线程级并行的基本原理是利用程序中的数据或任务的并行性,将程序划分为若干个相对独立的子任务,分配给不同的线程执行,然后通过同步机制协调线程之间的数据依赖和通信。- 硬件多线程(Hardware Multithreading):这种方式是在处理器硬件层面上支持多个线程的并发执行,即一个处理器可以同时拥有多个程序计数器(PC)和寄存器堆,从而在一个时钟周期内执行多条指令。线程具有状态和当前程序计数器,但线程通常共享单个进程的地址空间,允许线程轻松访问同一进程内其他线程的数据。原创 2023-07-14 18:18:00 · 654 阅读 · 0 评论 -
计算机体系结构基础知识介绍之物理寄存器和架构寄存器的区别
在简单的CPU中,物理寄存器和架构寄存器是一一对应的,也就是说每个架构寄存器都有一个固定的物理寄存器与之对应。当一条指令被发射时,它会从空闲列表中找到一个空闲的物理寄存器,并用它的标签和逻辑寄存器建立映射关系。这种方法是把ROB中的每个表项都当作一个物理寄存器,当一条指令被发射到ROB中,它就占据了一个表项,并用它的编号和逻辑寄存器建立映射关系。它们是程序员或编译器可以使用的有限的寄存器名字空间。在有重命名的情况下,重命名映射表会将架构寄存器映射到不同的物理寄存器上,从而消除除了RAW之外的所有依赖。原创 2023-07-14 14:42:00 · 1453 阅读 · 0 评论 -
计算机体系结构基础知识介绍之使用动态调度、多重问题和推测来利用流水线
我们在动态调度的超标量处理器中,发射指令的步骤是一个最基本的瓶颈。因为可能性的数量随着每个时钟周期可以发射的指令数量的平方而增长,所以发射步骤是超过四条指令每个时钟周期的尝试的一个可能的瓶颈。通过让指令发射需要多个时钟周期来完成,因为新的指令每个时钟周期都在发射,我们必须能够分配预约站并更新流水线表格,以便下一个时钟周期发射的依赖指令可以使用更新后的信息。如图所示,基本的组织结构类似于一个具有推测执行和每个时钟周期一条发射的处理器,只是发射和完成逻辑必须增强,以允许每个时钟周期处理多条指令。原创 2023-07-13 18:05:43 · 200 阅读 · 0 评论 -
计算机体系结构基础知识介绍之使用多问题和静态调度来利用 流水线
为了提高处理器的性能,我们需要让每个时钟周期内发出多条指令,而不是只发出一条。这种多发射处理器有三种主要类型:1. 静态调度的超标量处理器2. VLIW(非常长指令字)处理器3. 动态调度的超标量处理器。这三种类型的处理器的区别在于它们每个时钟周期内发出的指令数量是固定的还是可变的,以及它们是按照指令的顺序执行还是乱序执行。VLIW处理器是靠编译器来安排指令并行执行的,而超标量处理器是靠硬件来安排指令并行执行的。原创 2023-07-11 17:21:04 · 405 阅读 · 0 评论 -
计算机体系结构基础知识介绍之硬件预测(二)
可以通过清除 ROB 中出现在错误预测分支之后的所有条目、允许 ROB 中分支之前的条目继续、并在正确的分支后继处重新启动提取来完成此恢复。因此,处理分支的所有方面,预测准确性、错误预测检测的延迟和错误预测恢复时间的重要性都增加了。如果出现分支预测错误并且指令不应该被执行,则当 ROB 被清除时,异常将与指令一起刷新。如果指令到达 ROB 的头部,那么我们就知道它不再是推测的,并且应该真正采取异常。一旦一个指令提交,它在ROB中的条目被回收,并且更新寄存器或内存目标,消除了对ROB条目的需要。原创 2023-07-11 15:18:52 · 185 阅读 · 0 评论 -
计算机体系结构基础知识介绍之硬件推测(一)
简单来说,硬件推测是一种计算机体系结构的技术,它可以提高处理器的性能,通过预测指令的执行结果或控制流程,从而减少分支延迟或数据依赖。分支预测:根据历史信息或静态信息,预测分支指令的跳转方向,从而提前取指和执行目标指令。如果预测错误,就要撤销错误的指令,并重新执行正确的指令。数据预测:根据历史信息或静态信息,预测某些指令的操作数或结果,从而避免等待数据的到来。如果预测错误,就要撤销错误的指令,并重新执行正确的指令。乱序执行:根据数据依赖关系,调整指令的执行顺序,从而充分利用功能单元和流水线。原创 2023-07-11 14:59:29 · 262 阅读 · 0 评论 -
计算机体系结构基础知识介绍之动态调度(三)
WAW冒险是指后面的指令写入了前面的指令要写入的寄存器,WAR冒险是指后面的指令读取了前面的指令要写入的寄存器。在Tomasulo算法中,每个预留站都相当于一个临时寄存器,当一个指令被发射到预留站时,它就会被分配一个新的寄存器名字。在 Tomasulo 的方案中,结合了两种不同的技术:将架构寄存器重命名为更大的寄存器集以及缓冲寄存器文件中的源操作数。1.虽然Tomasulo的算法是在缓存之前设计的,但缓存的存在及其固有的不可预测的延迟已经成为动态调度的主要动机之一。首先回顾一下tomasulo算法,原创 2023-07-11 14:17:48 · 341 阅读 · 0 评论 -
计算机体系结构基础知识介绍之动态调度Tomasulo 算法(二)
类似地,存储缓冲区具有三个功能:(1)保存有效地址的组成部分直到计算出来,(2)保存等待数据值存储的未完成存储的目标内存地址,以及(3)保存 要存储的地址和值,直到内存单元可用。在这样做时,一个动态调度方案,比如Tomasulo算法,在源和结果之间引入了一个周期的延迟,因为结果和它的使用之间的匹配不能在写结果阶段结束之前完成,而不是像一个更简单的流水线那样在执行阶段结束时完成。没有显示任何执行控制表。例如,如果有一个WAW冒险,那么就意味着后面的指令可能会比前面的指令先完成,并且把前面的指令的结果覆盖掉。原创 2023-07-10 15:26:18 · 1519 阅读 · 0 评论 -
计算机体系结构基础知识介绍之动态调度(包含动态调度和乱序执行)(一)
另外,Tomasulo算法可以扩展到处理推测,一种通过预测分支的结果,执行预测目标地址的指令,并在预测错误时采取纠正措施来减少控制依赖影响的技术。动态调度的处理器通过延迟通知相关的异常,直到处理器知道该指令应该是下一个完成的指令,来保持异常行为。简单流水线技术的一个主要限制是它们使用按顺序指令发出和执行:指令按程序顺序发出,如果一条指令在流水线中停滞,则后面的指令无法继续执行。首先,它可以让用一种流水线编译的代码在另一种流水线上高效运行,避免了需要有多个二进制文件和为不同的微架构重新编译的问题。原创 2023-07-10 14:30:06 · 1084 阅读 · 0 评论 -
计算机体系结构基础知识介绍之高级分支预测(二)
Core i7 920使用了二级预测器,其中一个较小的第一级预测器旨在满足每个时钟周期预测一个分支的周期约束,并有一个较大的第二级预测器作为备份。(3)循环退出预测器。循环退出预测器使用计数器来预测被检测为循环分支的分支所采用的分支的确切数量(即循环迭代的数量)。,P(4),其中P(i)使用分支指令的地址和最近i条分支指令的历史(保存在一个移位寄存器h中,就像gshare一样)进行哈希运算来索引。不同的分支预测方法有不同的优缺点,因此有人提出了一种将多种预测方法结合起来的方案,混合预测器。原创 2023-07-09 15:05:37 · 481 阅读 · 0 评论 -
计算机体系结构基础知识介绍之高级分支预测(一)
由于需要通过分支危险和停顿来强制控制依赖,分支会损害管道性能。循环展开是减少分支危险数量的一种方法;我们还可以通过预测分支的行为来减少分支的性能损失。分支预测是一种计算机技术,它的目的是在执行分支指令之前,预测分支的方向和目标地址,从而减少流水线的停顿和冲突,提高处理器的性能。使用分支预测的原因是因为分支指令会中断指令流,导致处理器无法连续地取指和执行。如果处理器不做任何预测,就要等待分支指令执行完毕后才能确定下一条指令的地址,这样会造成很大的时间开销。原创 2023-07-09 14:51:12 · 1020 阅读 · 0 评论 -
计算机体系结构基础知识介绍之指令集并行的基本编译器技术(循环展开、基本管道调度)
大多数指令集并行技术的关键是了解何时以及如何更改指令之间的顺序。在实践中,这个过程必须通过编译器或硬件以有条不紊的方式执行。为了获得最终展开的代码,我们要求如下:■ 通过发现循环迭代是独立的(循环维护代码除外),确定展开循环是有用的。■ 使用不同的寄存器以避免由于使用相同的寄存器进行不同的计算而强制产生的不必要的约束(例如,名称依赖性)。■ 消除额外的测试和分支指令并调整循环终止和迭代代码。■ 通过观察来自不同迭代的加载和存储是独立的来确定展开循环中的加载和存储可以互换。原创 2023-07-08 18:07:49 · 728 阅读 · 0 评论 -
计算机体系结构基础知识介绍之指令级并行性:概念和挑战
如果两条指令是并行的,它们可以在任意深度的管道中同时执行,而不会导致任何停顿,假设管道有足够的资源(因此不存在结构危险)。只要指令之间存在名称或数据依赖关系,并且它们足够接近,执行期间的重叠会改变对依赖关系中涉及的操作数的访问顺序,就会存在危险。由于依赖性,我们必须保留所谓的程序顺序,即如果按原始源程序确定的一次顺序执行指令的执行顺序。最后一种依赖是控制依赖。流水线和指令级并行之间的关系是,流水线是实现指令级并行的一种基本方法,但是流水线也会受到一些因素的限制,如指令之间的相关性、结构冲突、控制冲突等。原创 2023-07-08 15:55:27 · 724 阅读 · 0 评论 -
计算机体系结构基础知识介绍之内存层次结构设计
超标量处理器的流水线一般包括取指、译码、发射、执行、访存和写回等阶段,其中取指和译码阶段可能需要多个端口来同时访问指令缓存,发射阶段可能需要检查指令的相关性和资源冲突,执行阶段可能需要多个功能单元来并行处理不同类型的指令,访存阶段可能需要多个端口来同时访问数据缓存,写回阶段可能需要重排序缓冲区来保证指令的顺序一致性。多处理器程序的性能取决于共享数据时系统的性能。对于那些将指令转换为微操作的设计,例如大多数最近的Arm和i7处理器,可以通过保持一个最近转换指令的小缓存来减少指令带宽需求和分支错误预测的惩罚。原创 2023-07-08 14:30:05 · 269 阅读 · 0 评论 -
计算机体系结构基础知识介绍之虚拟内存与虚拟机(二)
这是系统虚拟化中最困难的部分,因为I/O设备的数量和类型非常多,并且需要考虑如何在多个虚拟机之间共享一个真实设备,以及如何支持各种设备驱动程序,特别是当不同的虚拟机运行不同的操作系统时。嵌套页表是指在硬件上增加一个额外的页表级别,由VMM管理,用来记录从虚拟机的物理地址空间到真实硬件的物理地址空间的映射关系。指令集虚拟化,是一种让不同的硬件平台能够运行相同的软件的技术。虽然细粒度保护的话题已经存在了几十年,但是它没有得到很多关注,因为它的开销很高,而且有一些更有效和更不侵入的解决方案是可以接受的。原创 2023-07-07 18:31:15 · 475 阅读 · 0 评论 -
计算机体系结构基础知识介绍之虚拟内存与虚拟机(一)
这个问题以及不执行保护可能比过去更加昂贵的可能性,促使一些人寻找一个比完整的操作系统更小的代码基础的保护模型,比如虚拟机。虚拟内存可以在物理内存和辅助存储器之间传送数据的页面(一个固定大小的数据块),就像缓存可以在不同层次的内存之间传送数据的块一样。VMM 确定如何将虚拟资源映射到物理资源:物理资源可以是分时的、分区的,甚至是在软件中模拟的。TLB的条目就像一个缓存的条目一样,其中标记部分保存了虚拟地址的一部分,数据部分保存了物理页面地址、保护字段、有效位,通常还有使用位和脏位。原创 2023-07-07 18:10:38 · 543 阅读 · 0 评论 -
计算机体系结构基础知识介绍之缓存性能的十大进阶优化之编译器控制的预取和利用HBM扩展内存层次(七)
由于大多数通用服务器处理器需要的内存容量超过了HBM封装技术能够提供的范围,所以有人提出了将封装在处理器内部的DRAM用作大容量的L4缓存,这些缓存的容量可以达到128 MiB到1 GiB甚至更多,远远超过了当前片上L3缓存的容量。假设我们使用64B的块大小,那么一个1 GiB的L4缓存需要96 MiB的标记,这比CPU上的缓存中存在的静态内存还要多。第二,由于块大小很大,缓存中能够保存的不同块的数量就很低,这可能导致更多的不命中,特别是冲突和一致性不命中。这样的计算机的数据缓存通常是非阻塞的。原创 2023-07-06 20:31:42 · 1046 阅读 · 0 评论 -
计算机体系结构基础知识介绍之缓存性能的十大进阶优化之编译器优化和硬件预取(六)
下图为由于 Intel Pentium 4 上的硬件预取而加速,并且针对 12 个 SPECint2000 基准测试中的 2 个和 14 个 SPECfp2000 基准测试中的 9 个打开了硬件预取。当预取的数据没有被使用或者有用的数据被替换时,预取技术会对功耗有非常负面的影响。预取技术是一种通过提前将可能需要的数据或指令从主存中取出,放入缓存或外部缓冲区中,从而减少缓存不命中的代价,提高处理器性能的方法。原始代码将以 100 个字的步幅跳过内存,而修订版本会在进入下一个块之前访问一个缓存块中的所有字。原创 2023-07-06 15:43:03 · 1563 阅读 · 0 评论 -
计算机体系结构基础知识介绍之缓存性能的十大进阶优化之关键词优先和提前重启以减少失误处罚、合并写入缓冲区以减少惩罚(五)
注意,在填充块中的其他字时,缓存通常会继续满足对其他块的访问。写回缓存(Write-back)是指当处理器对缓存中的数据进行写操作时,只将数据写入到缓存中,而不立即写入到主存中,只有当缓存块被替换出去时,才将修改过的数据写回到主存中,这样可以减少内存访问的次数和延迟,提高系统性能,但是会导致缓存和主存的内容不一致。写直达缓存(Write-through)是指当处理器对缓存中的数据进行写操作时,同时将数据写入到缓存和主存中,这样可以保证缓存和主存的内容始终一致,但是会增加内存访问的延迟和频率,降低系统性能。原创 2023-07-06 15:10:55 · 1352 阅读 · 0 评论 -
计算机体系结构基础知识介绍之缓存性能的十大进阶优化之非阻塞缓存(四)
一个微妙而复杂的选项是,如果缓存可以重叠多个未命中,则可以进一步降低有效未命中惩罚:“多次未命中下的命中”或“未命中下的未命中”优化。有效的不命中惩罚并不是所有不命中的时间之和,而是处理器停顿的不重叠的时间。一般来说,乱序执行的处理器能够隐藏大部分一级数据缓存不命中但在二级缓存命中的惩罚,但是不能隐藏很大一部分低层次缓存不命中的惩罚。简单来说,非阻塞缓存是一种数据缓存,它可以在处理一个缓存不命中的请求时,继续响应其他缓存命中的请求,从而减少处理器的等待时间。原创 2023-07-06 14:47:16 · 1998 阅读 · 0 评论 -
计算机体系结构基础知识介绍之缓存性能的十大进阶优化之减少命中时间和流水线访问和多组缓存增加带宽(三)
软件方法是让操作系统在修改数据时,清除D高速缓存中的内容,并使I高速缓存中的内容失效,从而保证从主存中读取新的指令。这种方法,也许可以叫做路选择(way selection),在路预测正确时节省功耗,但是在路预测错误时增加了很多时间,因为访问,而不仅仅是标记匹配和选择,必须重复。I高速缓存和D高速缓存一般是私有的,每个CPU核心都有自己的I高速缓存和D高速缓存。模拟表明,两路组相联高速缓存的组预测准确度超过 90%,四路组相联高速缓存的组预测准确度超过 80%,I 高速缓存的准确度高于 D 高速缓存。原创 2023-07-05 17:31:24 · 1255 阅读 · 0 评论 -
计算机体系结构基础知识介绍之缓存性能的十大进阶优化之小型且简单的一级缓存(二)
缓存是一种高速的存储器,用于存放处理器经常访问的数据和指令。缓存的组织方式有多种,其中一种是按照不同的关联度(associativity)来划分。关联度表示一个缓存块(block)可以放在缓存中的位置数。关联度越高,缓存中可以容纳的不同块的数量越多,从而减少了冲突不命中(conflict miss)的概率。冲突不命中是指由于缓存中位置有限,导致两个或多个不同的块争夺同一个位置而发生的不命中。原创 2023-07-05 16:53:44 · 1071 阅读 · 0 评论 -
计算机体系结构基础知识介绍之缓存性能的十大进阶优化(一)
缓存是一种存储器,它可以加快计算机的运行速度。缓存优化的目标是让缓存更快、更有效地工作。有五个指标来衡量缓存优化的效果:命中时间、失效率、失效代价、缓存带宽和功耗。失效代价是指从其他存储器中获取数据所需的时间,命中时间是指从缓存中读取数据所需的时间,失效率是指缓存中没有需要的数据的概率,缓存带宽是指缓存每秒能处理的数据量,功耗是指缓存消耗的电能。原创 2023-05-30 21:22:53 · 1369 阅读 · 0 评论