Microarchiture
文章平均质量分 79
南方铁匠
在深度学习和体系结构熔炉的铁匠
展开
-
GPU Microarch 学习笔记【3】Tensor Core
Tensor Core是如何进行计算的原创 2023-11-20 05:29:01 · 437 阅读 · 0 评论 -
GPU Microarch 学习笔记 [1]
从CPU Microarch的角度学习学习GPU原创 2023-08-13 23:48:41 · 456 阅读 · 0 评论 -
Introduction of DRAM
DDR简介,待完善。原创 2022-12-07 21:01:23 · 278 阅读 · 0 评论 -
computer architecture simulator汇总
最近读了【A Survey of Computer Architecture Simulation Techniques and Tools】,这篇文章汇总了常用的模拟器。原创 2022-11-15 05:35:38 · 1369 阅读 · 0 评论 -
memory virtualization: shadow page & nest page
系列文章目录文章目录系列文章目录前言一、标准page walk二、软件页表虚拟化 shadow page三、硬件页表虚拟化 nested page四、对比前言虚拟化是一个比较复杂的概念,包括硬件抽象层级别的虚拟化,操作系统层面的虚拟化,以及库函数的虚拟化,还有编程语言层面的虚拟化。java virual machine就是编程语言层面的虚拟化,可以实现跨平台的运行。本文指的虚拟化是在系统层面,一个host 系统上运行多个guest系统。当然这也是一个比较大的话题,先介绍最近学习的页表虚拟化。原创 2021-12-12 16:27:40 · 1250 阅读 · 0 评论 -
【缓存预取】Primer on Hardware Prefetching(二)
二 指令预取乱序执行可以掩盖寄存器不足以及数据访问带来的部分latency。但是,乱序执行无法缓解取指的latency。因此,取指的latency也是内存墙的瓶颈之一。2.1 Next-Line PrefetchingNext-Line Prefetching是指令预取最简单的形式,在现代大多数的处理器中都有使用。因为代码在内存中是线性按序存放的,通常超过一半的指令取指都是按序的。其结构如下:如上图所示,我们可以将预取的指令存入stream buffer,如果处理器访问该PC,就将指令从strea原创 2021-09-05 11:44:00 · 1624 阅读 · 0 评论 -
【缓存预取】Primer on Hardware Prefetching(一)
一 预取为了隐藏latency,预取机制需要:1)准确的预测memory访问地址 2) 预测何时预取 3)选择在哪里防止预取的数据1.1 预取地址如果程序执行的是顺序的访问数组,那么预取的地址有规律,比较方便做。但是如果是间隔的访问变量,多重数据结构或者是控制流相关的访问,比如访问二叉树,那么地址就不好预测。上面说的是数据预取,那么对指令的预取的效果就主要依赖于程序是顺序执行,还是正在执行分支。顺序预取比较简单,但是指令控制流的行为以及该行为是否可预测,就决定了指令预取的效果。预取地址也依赖于c.原创 2021-09-05 00:25:16 · 1360 阅读 · 0 评论 -
【译文】CPU空闲时做什么?
https://manybutfinite.com/post/what-does-an-idle-cpu-do/https://www.kernel.org/doc/html/v5.0/admin-guide/pm/cpuidle.htmlhttps://unix.stackexchange.com/questions/426190/why-is-cpu-idle-called-as-the-last-function-of-the-start-kernel-routinehttps://unix.s翻译 2021-08-29 23:08:38 · 1073 阅读 · 0 评论 -
Spectre & Meltdown Vulnerability一图总结
欢迎关注我的公众号《处理器与AI芯片》原创 2021-07-10 22:21:01 · 241 阅读 · 1 评论 -
【技术文章】Understanding Spectre & Meltdown Vulnerability 3
这篇文章中,我们将要讨论spectre以及它对当前系统的影响。正如之前文章介绍的,处理器使用推测执行以及分支预测来更好的利用CPU的周期。Spectre 攻击会推测执行一些永远不会被执行的指令。这些推测执行的指令会改变微架构状态(比如CPU cache),从而引起side channel attacks。这些side channel attacks包括Flush-Reload Attack(相同的攻击也在Meltdown中使用)。Understanding SpectreSpectre和Meltdo.翻译 2021-07-10 21:45:14 · 211 阅读 · 0 评论 -
【技术文章】Understanding Spectre & Meltdown Vulnerability 2
现代操作系统的一个核心安全特性就是在同一个系统中提供不同进程之间的隔离,确保一个进程不能访问另一个进程的数据。在我们现在的系统中,我们经常提供多个虚拟机,作为不同的进程,运行在一个机器上,假设其中的一个是victim,另一个是attacker,因此我们更加需要process isolation。上篇文章介绍了,现代的处理器通过privilege level提供了这种隔离。一个特权级别比较低的进程无法访问另一个特权级别高的进程的资源,比如kernel memory。然而,meltdown技术破解了这个se翻译 2021-07-04 15:45:30 · 167 阅读 · 0 评论 -
【技术文章】Understanding Spectre & Meltdown Vulnerability 1
这个blog的系列文章会介绍最近的security Spectre和Meltdown。程序是如何执行的 一段程序就是在memory中的一系列指令。这些指令在处理器中一条接一条的被执行。每个指令执行时都有其对应的特权级别,privilege level。特权级别在X86指令集中,控制当前运行在处理器上的程序的访问资源权限,比如memory区域,I/O 端口以及特殊的指令。因此,这基本上也意味着在处理器上执行的任何指令都是有特殊的权限级别,可能只能访问系统资源(memory region或者IO端.翻译 2021-07-03 22:48:04 · 195 阅读 · 0 评论 -
【论文导读】 The Design Space of Register Renaming (五)
The design space of register renaming techniques Overviewrenaming技术的design space有以下四个维度:Register renaming的范围Rename buffer的layoutRegister mapping的方法Rename rateScope of register renamingregister renaming的范围表示处理器在多少范围内使用renaming。从这个角度我们将其分为.原创 2021-05-06 22:50:26 · 274 阅读 · 0 评论 -
【论文导读】 The Design Space of Register Renaming (四)
The process of renaming, assuming dispatch bound operand fetching 假设我们基本上还是用之前的core,但是使用dispatch bound operand fetching,rename process如下图所示:(i) 在instruction issue时,目标寄存器(Rd)和源寄存器(Rs1和Rs2)与issue bound operand fetching相同的方式rename。renamed register value(R.原创 2021-03-26 00:34:27 · 199 阅读 · 3 评论 -
【论文导读】 The Design Space of Register Renaming (三)
The process of renaming, assuming issue bound operand fetching我们只关注rename process相关的微架构,如下图所示的微架构执行定点FX 指令,包括architectural register file(ARF)和execution unit(EU).我们通过使用reservation station(RS)来实现shelving技术,该dedicated buffer位于EU之前。我们假设指令可以从RS 发射到EU inorde.原创 2021-03-21 17:31:22 · 267 阅读 · 0 评论 -
【论文导读】 The Design Space of Register Renaming (二)
register renaming的原理与演进寄存器重命名是为了移除false data dependancy。它减少了指令执行序列之间的要求,因此更多的指令可以并行的执行,进而处理器的性能增强。寄存器重名的原理是简单地。如果处理器遇到了一条指令,它会将指令的结果写到一个动态分配的rename buffer,而不是指令所指定的寄存器。比如在下面的case中,发生了write after read(WAR) dependency其中i2的目标寄存器r2被重命名到,比如r33寄存器。在重命名r2之后,.原创 2021-03-21 00:17:35 · 411 阅读 · 1 评论 -
【论文导读】 The Design Space of Register Renaming (一)
Data dependency 发生在连续的指令的操作数,或循环指令的操作数之间。连续指令会在read after write(RAW),write after read(WAR),或者write after write(WAW)依赖。为了解决寄存器操作数或者memory访问之间的依赖,各种静态的、动态的、或者混合的技术都被引入。图1我们总结了目前已经才用的技术。Instruction shelving(也被称作indirect issue或者dynamic instruction sheduling.原创 2021-03-17 00:38:49 · 315 阅读 · 0 评论 -
【论文导读】Scalable Hardware Memory Disambiguation for High ILP Processors
随着issue宽度和pipeline深度的增加,in-flight的指令的数量也会增加,成为了功耗和latency的瓶颈。我们提出了两种基于Bloom filter的机制来进行filter: searching filtering, 使用hash算法来减少查询LSQ和entries的次数;以及 state filtering,用来减少保存在LSQ中数量。对于out-of-order memory issue的系统来说,memory ordering会遇到三个问题:需要检查所有发射的load来决定是否p原创 2021-01-03 22:57:12 · 419 阅读 · 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 · 219 阅读 · 0 评论 -
Deallocation of Physical Register
物理寄存器的释放是要等待下一条相同目标寄存器的指令Commit时,才能释放上一次将目标寄存器映射到的物理寄存器,这样物理寄存器的占用时间就比较久。目前看到了几种可以提前释放物理寄存器的方法,不过它们要么是硬件的speculative deallocate,可能需要recover,要么需要额外的硬件保存物理寄存器的值,要么就是需要软件的支持:1) 类似于智能指针中的share_pointer,使用计数的原则,在该物理寄存器被读取的引用计数为0,并且已经作为目标寄存器被映射后,释放;2)在L2 Miss时原创 2020-11-11 14:51:51 · 170 阅读 · 0 评论 -
TLB Consistency
TLB,translation lookaside buffer,缓存了页表中Virtual Address→Physical Address的映射以及虚拟地址的权限。为了提高原创 2020-11-08 18:31:39 · 354 阅读 · 0 评论 -
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 · 581 阅读 · 0 评论 -
X86指令:NOP指令
NOP指令的作用通常NOP用于对齐指令的地址。NOP指令的特性:因为NOP是X86指令中最短的,只有1byte处理器执行NOP指令时,不进行任何的操作,不会影响系统的状态NOP也有其他的用途:1)编程时如果使用了支持lable标记的编译器,如果使用JXX someLabel1(JXX是条件跳转),编译器将会将someLabel替换为Label对应的地址。然而如果我们手动修改了汇编代码,那么指令的长度就会发生了变化,Label的地址也会发生变化,因此可以使用NOP来将Label的地址恢复到之前原创 2020-10-04 17:28:33 · 2889 阅读 · 0 评论 -
Cache Replacement Policy: Cache 替换策略
cache 是 CPU和memory中间的缓存,如果访问时选中的set已经满了,就需要从set中选择一个wayLeast recently used (LRU) replace最近最少使用的block。算法记录访问的cache block以及时间顺序,完整的实现这个方式代价比较大。实现时需要为每个cache line记录“age bit”,基于age bit 记录“Least Recently Used” 。每次访问cache-line,所有的其他的cachline的age都需要修改。如果访问顺序是原创 2020-09-26 15:06:11 · 2286 阅读 · 0 评论 -
Memory Type: WB, WT, UC, WC,WP
Memory Type:目前的主流处理器,都支持这些memory type Write Back, Write Through, Write Protect,Uncacheable Write, Write CombineWrite Back最常见的 cacheable write, read → modify→ writeWrite Throughcachable readwrite:when hit in cache, update cache and memorywhen miss原创 2020-09-05 20:35:38 · 3484 阅读 · 0 评论 -
non temporal memory access
下面代码中“NT”代表Non Temporal,指的是什么?MOVDQA xmmi, m128MOVNTDQA xmmi, m128 Non-Temporal SSE指令(MOVNTI,MOVNTQ,etc.) 不遵循普通的cache 一致性的守则,因此这些指令后面需要增加SFENCE以保证它们的结果可以被其他的处理器按照期望的时序看到。正常的数据,我们如果修改了,存储到cache里,是按照read-modify-write的顺序修改的,如果我们所修改的数据并不会立刻再次被使用,那就没有必要装载到原创 2020-09-03 21:34:12 · 1135 阅读 · 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 · 411 阅读 · 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 · 374 阅读 · 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 · 878 阅读 · 0 评论 -
汇编:静态变量与RIP
在线看汇编的网站:https://godbolt.org/在class A中定义一个静态变量,然后对其进行操作,我们看看这个静态变量的是怎么被操作的。 #include "stdlib.h"class A{ public: static int test0; static int test1;};int A::test0 = 1;int A::test1 = 1;int main(){ A::test0 = 4; A::test1 =...原创 2020-08-17 22:28:13 · 6033 阅读 · 0 评论 -
Microarchitecture:Micro Fusion
MicroFusion Tech在没有进入Micro Fusion技术之前,单条复杂指令需要被译码为多条uops。Micro-fusion 技术则会将这些这些uops进行融合为一个单条的复杂micro-op。在之前如果被译码为N条uops,以在乱序core中执行,那么这个单条的复杂micro-op也同样需要被执行N次。本质上MicroFusion 就是将复杂指令使用复杂uop表示,在译码之前,复杂指令只占用一条entry,而在译码之后,该uop只占用一条ROB,但是该uop会在多个...原创 2020-08-09 21:16:30 · 720 阅读 · 0 评论 -
CPU Memory: 为什么需要使用互斥量mutex
多线程的变成需要使用旗语,同步代码段,互斥量或者是任何调用它们的编程语言。我们大多数基本上知道为什么我们需要它们:为了阻止多线程访问同一块内存区域。你是否停下来真正想过,它们究竟是干什么的?为什么你需要保护存储空间?这个听上去应该是CPU该干的活。大多数是的时候,互斥量也就是一个简单的实现,但是理解为什么需要它却没那么容易。这个答案在于CPU是如何组织存储的,以及它是如何优化你的代码的。...翻译 2020-07-11 21:05:28 · 718 阅读 · 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 · 1067 阅读 · 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 · 652 阅读 · 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 · 807 阅读 · 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 · 708 阅读 · 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 · 880 阅读 · 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 · 611 阅读 · 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 · 649 阅读 · 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 · 553 阅读 · 0 评论