![](https://img-blog.csdnimg.cn/20190927151053287.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
计算机体系结构
分享计算机体系结构的知识
南方铁匠
在深度学习和体系结构熔炉的铁匠
展开
-
【缓存预取】Primer on Hardware Prefetching(一)
一 预取为了隐藏latency,预取机制需要:1)准确的预测memory访问地址 2) 预测何时预取 3)选择在哪里防止预取的数据1.1 预取地址如果程序执行的是顺序的访问数组,那么预取的地址有规律,比较方便做。但是如果是间隔的访问变量,多重数据结构或者是控制流相关的访问,比如访问二叉树,那么地址就不好预测。上面说的是数据预取,那么对指令的预取的效果就主要依赖于程序是顺序执行,还是正在执行分支。顺序预取比较简单,但是指令控制流的行为以及该行为是否可预测,就决定了指令预取的效果。预取地址也依赖于c.原创 2021-09-05 00:25:16 · 1373 阅读 · 0 评论 -
【论文导读】Register Integration: A Simple and Efficient Implementation of Squash Re-Use
高性能的CPU都是speculative out of order执行的,如果发现比如分支预测失误或者memory consistency之类的问题,或者是通过checkpoint进行瞬间的恢复,或者是等到retire时,利用retire map进行恢复。恢复时,会从失败的指令处彻底的刷新掉,重新执行。这时候的代价还是比较大的,那么我们是否可以利用之前错误路径上的指令的结果呢?这篇论文给出了解决方法。首先是指令A执行时,如果完成,则将指令A的pc,源物理寄存器和目标物理寄存器进行保存到Integratio原创 2020-12-06 19:19:32 · 223 阅读 · 0 评论 -
【论文导读】Deconstructing Commit
在微架构中,我们使用Reorder Order在commit时保证in order的顺序,一般retire的方式都是等待指令成为oldest,然后retire,这样保证了architecture state和precise exception等。但是实际上指令可能已经满足了retire的条件,只是因为该指令前面有指令一直没有执行完毕,导致需要持续的等待成为oldest,但是它实际上占据了physical register,register map entry,reorder buffer entry和LS原创 2020-10-26 11:11:50 · 355 阅读 · 1 评论 -
How to Measure Reorder Buffer Capacity
衡量Reorder Buffer Capacity 的大小的方法微处理器中取指译码重命名时顺序的,commit也是顺序的…reorder buffers是一个fifo,用来跟踪指令的status。指令在dispatch后,按照program order在ROB中排序。起到以下作用:recover from branch mispredictionretire state to register and memory in program orderprovide precise interrup原创 2020-10-25 17:56:03 · 586 阅读 · 0 评论 -
Memory Consistency (下)
Memory Consistency文章目录Memory Consistency三、 弱序 Memory Model3.1 Weak Memory Model3.2 Release Consistency Model三、 弱序 Memory Model3.1 Weak Memory Model在实际的编程过程中,我们发现不相关的memory的访问的order,我们并不在意。真正在意的是,存在对内存读写访问冲突的情况。所以在weak memory model中,我们可以放松对consist原创 2020-08-30 23:53:24 · 424 阅读 · 0 评论 -
Microarch Paper :Value Locality and Load Value Prediction
Value Locality and Load Value Prediction前言 Paper作者发现value同样具有locality,尤其是load指令,经常会反复的从memory中加载相同的数值,因此他们提出了新的架构,类似于分支预测,对load加载的数值进行预测。一、 Value Localityvalue locality体现在以下的方面:不过作者也指出,value locality受编译器影响较大,因为子表达式优化可能会解决这部分的问题。二、工作原理1. Load Valu原创 2020-08-29 12:38:15 · 377 阅读 · 0 评论 -
Memory Consistency(上)
Memory Consistency提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Memory Consistency Model介绍文章目录Memory Consistency前言一、Memory Consistency Model是什么?二、各个memory order介绍1.sequence order2. strong order总结前言Memory Consistency Model 介绍一、Memory Consistency Model是什原创 2020-08-24 00:55:33 · 887 阅读 · 0 评论 -
The Infinity Fabric
现在有大量的预测与证据说明更快的memory速度提高了Ryzen的游戏性能。这个理论基于AMD的Infinity Fabric 与内存时钟频率绑定。并且我们的一些针对性的测试也证实了这一点。Zen架构又一次使用了四核CCX(CPU Complex)模块。AMD为每个CCX提供了16路组相连8M的L3Cache。8M的cache被分为4个slice,每个core访问L3的延迟是相通的。两个CCX在一起就形成了8核Ryzen 7的die。CCX通过AMD的Infinity Fabric互联。多个CCX也共享.翻译 2020-07-19 11:09:07 · 2040 阅读 · 0 评论 -
AMD 编程手册 7.4-7.5
Contents7.4 Memory Types7.5 Buffering and Combing Memory Types7.4 Memory Types UC Uncacheable 从UC Memory中读取或者写入会导致write buffer的数据写到内存然后失效。主要用于需要严格的读写顺序的I/O 操作。注意如果其他的memory如果支持Speculative读,那么可能会bypass那些没有冲突的UC操作。 CD Cache Disable. Uncachebale 包括两种情况1原创 2020-07-18 17:42:48 · 818 阅读 · 0 评论 -
断点是如何工作的
Overview在调试代码时,一个常见的问题就是断点到底是怎么工作的。另一个问题就是软件断点和硬件断点有什么不同,我应该选择哪种。本文将会深入的介绍软件和硬件断点的不同。也会更加详细的提供Code Composer Studio 和 Target的内部工作机制。并且,也会讨论特殊的断点的case和高级用法。 Abbreviation Used t CCS - Code Composer Studio (用于 TI DSP、微处理器和应用处理器的集成开发环境)t HWBP Hardware Brea.原创 2020-07-05 21:46:14 · 1092 阅读 · 0 评论 -
CPU Wiki: Sandy Bridge Microarchitecture 后端
Execution EngineSandy Bridge 的后端执行单元处理乱序执行。Sandy Bridge的back end将NetBurst和P6进行了融合。像P6一样,Sandy Bridge 独立的处理三种类型的uOPs(浮点,整型和向量)。然而实现的方式却十分不同。Sandy Bridge 借鉴了NetBurst中更加高效的追踪tracking和重命名renaming架构。Sandy Bridge 以下简称SNB使用了NetBurst中基于物理寄存器文件(PRF)的重命名机制进行追踪。在之翻译 2020-06-17 01:29:14 · 664 阅读 · 0 评论 -
CPU Wiki: Sandy Bridge Microarchitecture 前端(下)
MSROM & Stack Engine在X86指令中,有一些连复杂解码器都认为复杂的指令。这些指令会被翻译成超过4条uops,它们是从microcode sequencer(MS) ROM 绕道译码的。此时,MSROM每周期会发射超过4条指令,直到microcode sequencer完成了工作。在此期间,译码器停止工作。x86有这一个专门的stack machine 操作。像push,pop和call,ret这样的指令,是工作在stack pointer(ESP)上的。如果没有这样专门的硬件翻译 2020-06-14 22:19:20 · 839 阅读 · 0 评论 -
CPU Wiki: Sandy Bridge Microarchitecture 前端(上)
Sandy Bridge 可以看做是自从NetBurst和P6之后的一个全新microarchitecture。Sandy Bridge回溯了最去的drawing board阶段,从P6和NetBurst引入了很多有益的结构。尽管NetBurst是一个有严重瑕疵的结构,但是它引入了一些重要的创新,这些在Sandy Brdigy中被重新实现并增强。它与一直到Nehamlem基本都没有引入P4,P6的结构的早期Core结构不同。 Sandy Bridge引入了前辈们的优先,并且提升。PipeLineSa翻译 2020-06-12 20:13:56 · 718 阅读 · 0 评论 -
Microarchitecture:Macro Fusion
Macro-Operation Fusion (Macro-Op Fusion, MOP Fusion or Macrofusion) 在现代的微架构中被广泛的使用。该技术即为相邻的marco-operations 可以被合并为单条macro-operaton,在译码期间或者更早。这些指令在后面被译码为fused-uops。 影响处理器的性能的三个因素之一是指令个数。通过减少指令个数,可以使用更少的资源完成更多的工作。macro-fusion 背后的思想就是将邻近的指令进合并为一条指令。一条被融合的指令.翻译 2020-06-08 22:42:18 · 901 阅读 · 0 评论 -
【Microarchitecture of Intel and AMD CPU】 9 Sandy Bridge and Ivy Bridge pipeline 【9.11-9.15】
9.11 部分寄存器访问一个通用寄存器的不同的部分可以存放在不同的临时寄存器中,以减少伪依赖。在向寄存器的一部分发起写操作,后续跟随一个读取完整寄存器的操作时会遇到问题。; Example 9.4. Partial register problemmov al, 1mov ebx, eax在Sandy Bridge中通过插入一个额外的uop以将不同的寄存器部分可以解决这个问题。我猜测这个额外的uop是在ROB-read 阶段生成的。在上述的例子中,ROB-read将会产生一个额外的uop,翻译 2020-05-31 17:06:32 · 615 阅读 · 0 评论 -
【Microarchitecture of Intel and AMD CPU】 9 Sandy Bridge and Ivy Bridge pipeline 【9.8-9.10】
9.8 寄存器分配和重命名所有的整数,浮点,MMX,XMM,YMM,标志寄存器,并且可能段寄存器也可以被重命名。浮点数控制字也可以被重命名。寄存器重命名被RAT(寄存器重命名表)和重排序缓冲区控制,如图6.1所示。来自译码器和stack engine的uops通过queue进入RAT,而后进入ROB-read 和保留站。RAT可以每周期处理4条uop。RAT可以每周期重命名4个寄存器,并且它甚至可以一个周期内重命名同一个寄存器4次。非依赖的case通常将一个寄存器设置为0的方式是与其自身异或翻译 2020-05-17 12:50:53 · 657 阅读 · 0 评论 -
【Microarchitecture of Intel and AMD CPU】 9 Sandy Bridge and Ivy Bridge pipeline 【9.7】
9.7 Stack EngineSandy Bridge 设计了独立的stack engine,工作方式与之前的处理器中的Stack Engine相同。引入7.7 Stack Engine对stack的介绍栈指令,比如push,pop,call 和ret都会修改栈指针。例如,指令push EAX将会在P3 处理器上产生3条uop,两条用于存储EAX,一条用于将ESP减4。在PM中,相同的指令只会产生一条uop。两条存储uops通过uop fusion的方式合并为一条,ESP-4则是通过一个专门用翻译 2020-05-15 22:02:51 · 561 阅读 · 0 评论 -
SPECCPU2006 Spec2006 使用说明
工具介绍SPEC CPU 2006 benchmark是SPEC新一代的行业标准化的CPU测试基准套件。重点测试系统的处理器,内存子系统和编译器。这个基准测试套件包括的SPECint基准和SPECfp基准。 其中SPECint2006基准包含12个不同的基准测试和SPECfp2006年基准包含19个不同的基准测试。SPEC设计了这个套件提供了一个比较标准的计算密集型,高性能的跨硬件的CPU测试工具。在SPEC CPU 2006基准有几种不同的方法来衡量计算机性能。 一种方式是测量计算机完成单一任务的速度转载 2020-05-10 16:31:55 · 5166 阅读 · 0 评论 -
【Microarchitecture of Intel and AMD CPU】 9 Sandy Bridge and Ivy Bridge pipeline 【9.4~9.6】
9.4 LoopBack BufferNehalem 中的28uop loop buffer 在Sandy Bridge和Ivy Bridge中被保留。Loop Buffer被放置在uop cache之后,但是在uop cache miss的情况下,它也可以接受来自译码器的指令。Loop buffer可以提高微小循环的性能。如果uop cache不是瓶颈的话,loop buffer没有可以测量...翻译 2020-05-03 00:20:03 · 628 阅读 · 0 评论 -
【Microarchitecture of Intel and AMD CPU】 9 Sandy Bridge and Ivy Bridge pipeline 【9.1~9.3】
Intel命名Sandy Bridge 的微架构是基于Core 2 和Nehalem的第二代设计。在解码器后面加入了新的uop cache,并且浮点执行单元从128bit扩展到256bit。Sandy Bridge 有2-8 个core,其中的一些版本可以在每个core上运行双线程。支持新的AVX 指令。将16个128bit的XMM寄存器扩展到256bit的YMM寄存器用于支持浮点向量运算...翻译 2020-04-29 00:59:51 · 305 阅读 · 0 评论 -
Microarchitecture: HyperThreading(超线程)
线程并行当代的软件趋向于运行在多线程模式,或者是并行处理。网络包传输和web服务可以运行以多线程的方式运行以达到更高的性能。甚至是桌面应用也开始增加并行性。Intel架构师已经开始尝试利用TLP( thread-level parallelism) 线程并行性,用来在较少的晶体管和功耗下就能达到更高的性能。高端和终端的服务器市场,多核已经被广泛的使用,已获得更高的性能。通过增加处理器,应用...原创 2020-04-28 18:29:50 · 911 阅读 · 0 评论 -
【Microarchitecture of Intel and AMD CPU】 2 Out-of-order execution
Intel 的第六代微处理器,从PPro开始,提供了一种重要的技术提升,乱序执行。如果一条指令的输入因为某些原因在当前时刻还未准备好,那么我们可以尝试执行这条指令后面的指令。当然,处理器需要检查时候后面的指令需要前面的指令的执行结果。如果每一条指令都依赖于前一条指令的结果,那么这就叫做依赖链。判断输入依赖关系的逻辑,和一旦其所依赖的数据一旦准备好,就立即执行机制已经就绪,这使得处理器可以在同一...翻译 2020-03-10 20:22:03 · 189 阅读 · 0 评论 -
forahead adder 超前进位加法器
数电书上说道超前进位加法器,没有仔细讲。上网搜了这篇资料,摘抄下来串行进位加法器需要一级一级的进位,进位延迟很大。先行进位加法器(也叫超前进位加法器)可以有效的减少进位延迟。 设二进制加法器的第i位输入为Xi, Yi,输出为Si,进位输入为Ci,进位输出为Ci+1则有 Si = Xi⊕Yi⊕CiCi+1=原创 2017-09-26 10:31:41 · 5952 阅读 · 4 评论 -
计算机体系架构rtl 第五章第六章
第五章:单周期的cpu以及其verilog设计1。在cpu中需要实现一个寄存器堆,这个寄存器堆中包括了:常数,汇编器专用(什么意思),表达式计算或者函数调用的返回结果,a函数调用参数,t临时变量(函数调用时不需要保存和恢复的),s函数调用时需要保存和恢复的寄存器变量,t临时变量(函数调用时不需要保存和恢复的),操作系统专用,全局变量指针,堆栈指针,帧指针,返回地址2。pc端的mux有几种?原创 2017-08-04 13:36:45 · 600 阅读 · 0 评论 -
X86-64寄存器和栈帧
X86-64寄存器和栈帧概要说到x86-64,总不免要说说AMD的牛逼,x86-64是x86系列中集大成者,继承了向后兼容的优良传统,最早由AMD公司提出,代号AMD64;正是由于能向后兼容,AMD公司打了一场漂亮翻身战。导致Intel不得不转而生产兼容AMD64的CPU。这是IT行业以弱胜强的经典战役。不过,大家为了名称延续性,更习惯称这种系统结构为x86-64。X86-64在向后兼...转载 2019-12-02 20:44:31 · 369 阅读 · 0 评论 -
C++ 使用new创建二维数组
#include <iostream>using namespace std;void main(){//用new创建一个二维数组,有两种方法,是等价的//一:int (*p)[10] = new int[5][10];//二:int **p = new int* [5];for(int i=0;i <5;i++)p[i] = new int[10];}...原创 2019-12-02 14:31:04 · 27996 阅读 · 0 评论 -
MMU和cache详解(TLB机制)
点击打开链接1.MMUMMU:memory management unit,称为内存管理单元,或者是存储器管理单元,MMU是硬件设备,它被保存在主存(main memory)的两级也表控制,并且是由协处理器CP15的寄存器1的M位来决定是enabled还是disabled。MMU的主要作用是负责从CPU内核发出的虚拟地址到物理地址的映射,并提供硬件机制的内存访问权限原创 2017-07-21 10:53:59 · 11126 阅读 · 8 评论 -
解答:x86架构下,页面大小为什么是4K?
前提:32位逻辑地址空间的计算机系统,三级页表,每个页中每个条目占4Byte,即32位的数据以上前提是目前x86架构32位系统的真实情况设:页大小为X(byte)则:X/4就是每个页中可以存取的条目个数两级页表的地址转化关系如图1所示:图1:假设在一个32位的条目中存放此内存的地址,则2*log2(X/4)就是图1中,p1+p2的位数。2^(p1+p2):系统可以寻址多...转载 2019-10-08 15:15:54 · 431 阅读 · 0 评论 -
ACE Protocol Chapter C4
C4.3 不同transaction导致的state变化state可能会被以下影响:1. 传输类型;2. 在AR通道上的读响应;3. 是否master支持外部的snoop filter;4. 是否master指定的预测读;如果传输读响应返回PassDirty,则cache line一定要变为dirty状态。PassDirty在以下状态使能:1. ReadNotSharedDirty2. ReadS...原创 2018-06-25 23:16:43 · 1710 阅读 · 0 评论 -
DDR的几个概念
转自:http://blog.csdn.net/kathyzju/article/details/6011727SDRAM(Synchronous DRAM)同步动态随机存储器:是PC 100和PC 133规范所广泛使用的内存类型,它的带宽为64位,3.3V电压,目前产品的最高速度可达5ns。它与CPU使用相同的时钟频率进行数据交换,它的工作频率是与CPU的外频同步的,不存在延迟或等待时间转载 2017-08-02 21:08:38 · 1133 阅读 · 0 评论 -
DDR3详解(以Micron MT41J128M8 1Gb DDR3 SDRAM为例)
转自:http://blog.chinaunix.net/uid-28458801-id-3459509.html首先,我们先了解一下内存的大体结构工作流程,这样会比较容量理解这些参数在其中所起到的作用。这部分的讲述运用DDR3的简化时序图。 DDR3的 内部是一个存储阵列,将数据“填”进去,你可以它想象成一张表格。和表格的检索原理一样,先指定一个行(Row),再指定一个列(C转载 2017-08-02 20:14:47 · 4441 阅读 · 0 评论 -
流水线中的Tomasulo算法
转自:点击打开链接Tomasulo算法:为IBM 360/91设计的,它采用的是寄存器重命名的方法来消除寄存器数据流之间的假相关,即用虚拟寄存器集代替真实的FPR,虚拟寄存器集在tomasulo算法中由每一功能单元所带的保留站(reservation station)、取数缓冲区(load buffers)和存数缓冲区(store buffers)组成。 Tomasulo算法的转载 2017-07-25 09:56:24 · 6725 阅读 · 1 评论 -
计算能力
以下cpu内容摘自:点击打开链接计算机的峰值速度通常是指其理论峰值速度,其计算公式是:理论峰值速度(亿次)= MHz x 每个时钟周期执行浮点运算的次数 x CPU数目其中MHz是指CPU的主频,每个时钟周期执行浮点运算的次数是由处理器中浮点运算单元的个数及每个浮点运算单元在每个时钟周期能处理几条浮点运算来决定的。以IBM POWER4为例,每个POWER4的处理器转载 2017-07-19 22:30:56 · 3536 阅读 · 0 评论 -
mips 精确异常和延时槽
转自:http://blog.csdn.net/junmuzi/article/details/8762634一、非精确异常在多发射乱序执行的流水线 CPU 上,从指令进入流水线到异常事件的发生,期间要经过若干流水级,此时 PC 的值已指向其后的某条指令,在实现非精确异常的 CPU 上就把此时的 PC 值作为引起异常指令的所在(为了表达的方便,记为 eptr)。简单地说就是 eptr 的指向,并非真正的引起异常的指令之所在,而是其后面的某条指令所在。二、精确异常简单地说就是 eptr 的指向就是真正转载 2017-08-07 21:11:42 · 1540 阅读 · 0 评论 -
Linux中的虚拟内存和物理内存
Linux 虚拟内存和物理内存的理解转自:http://www.cnblogs.com/dyllove98/archive/2013/06/12/3132940.html首先,让我们看下虚拟内存: 第一层理解1. 每个进程都有自己独立的4G内存空间,各个进程的内存空间具有类似的结构 2. 一个新进程建立的时候,将会建立起自己的转载 2016-11-21 01:21:53 · 469 阅读 · 0 评论 -
进程线程的基本概念
1. 进程用户下达运行程序的命令后,就会产生进程。同一程序可产生多个进程(一对多关系),以允许同时有多位用户运行同一程序,却不会相冲突。进程需要一些资源才能完成工作,如CPU使用时间、内存、文件以及I/O设备,且为依序逐一进行,也就是每个CPU核心任何时间内仅能运行一项进程。内容一个计算机系统进程包括(或者说“拥有”)下列数据:那个程序的可运行机器码的一个在内存的映原创 2016-11-20 17:40:17 · 456 阅读 · 0 评论 -
关于计算机的一些基本概念2
(一)非统一访问架构:非统一内存访问架构(英语:Non-uniform memory access,简称NUMA)是一种为多处理器的电脑设计的内存,内存访问时间取决于内存相对于处理器的位置。在NUMA下,处理器访问它自己的本地内存的速度比非本地内存(内存位于另一个处理器,或者是处理器之间共享的内存)快一些。非统一内存访问架构的特点是:被共享的内存物理上是分布式的,所有这些内存的集合就是转载 2016-11-20 16:48:03 · 575 阅读 · 0 评论 -
关于计算机的一些基本概念
以下转自维基百科:(一)多线程计算机:是指从软件或者硬件上实现多个线程并发执行的技术。包括软件多线程和硬件多线程。软件多线程,快速切换多个线程,造成假象。硬件多线程:1.集成多个处理器 2.集成多个核心多线程执行的粒度:粗粒度,一个线程持续运行,直到该线程被一个事件挡住而制造出长时间的延迟周期 i :接收线程 A 的指令 j周期 i+1:接收原创 2016-11-20 15:51:05 · 1030 阅读 · 0 评论 -
MIPS中的分支延迟槽
1. 概述分支延迟槽 (Branch delay slot),简单地说就是位于分支指令后面的一条指令,不管分支发生与否其总是被执行,而且位于分支延迟槽中的指令先于分支指令提交 (commit)。看这个代码片段 (MIPS Linux kernel 2.6.17):801ea9d4: 02202021 move a0,s1801ea9d8: 27a50转载 2016-12-10 17:37:27 · 4290 阅读 · 0 评论 -
计算机存储器的层次
由于硬件技术的限制,我们可以制造出容量很小但很快的存储器,也可以制造出容量很大但很慢的存储器,但不可能两边的好处都占着,不可能制造出访问速度又快容量又大的存储器。因此,现代计算机都把存储器分成若干级,称为Memory Hierarchy,按照离CPU由近到远的顺序依次是CPU寄存器、Cache、内存、硬盘,越靠近CPU的存储器容量越小但访问速度越快,下图给出了各种存储器的容量和访问速度的典型值。转载 2016-11-16 23:40:27 · 890 阅读 · 0 评论