cpu-architecture相关内容

VIPT 到 PIPT 的转换如何在 L1->L2 驱逐上工作

这个场景出现在我的脑海中,看起来有点基础,但我会问. 所以在 L1 中有一个虚拟索引和物理标签,但是集合变满了所以它被驱逐了.L1 控制器如何从 L1 中的虚拟索引和物理标签中获取完整的物理地址,以便将线插入 L2?我想它可以在 TLB 中搜索组合,但这似乎很慢,而且它可能根本不在 TLB 中.也许来自原始 TLB 转换的完整物理地址存储在缓存线旁边的 L1 中? 这也引发了一个更广泛 ..
发布时间:2021-12-20 11:27:18 其他开发

回写与直写缓存?

我的理解是这两种方法的主要区别在于“直写"方法数据立即通过缓存写入主存储器,而在“回写"中数据是在“稍后"写入的. 我们仍然需要在“稍后"等待内存那么“直写"有什么好处? 解决方案 直写到主存的好处是它简化了计算机系统的设计.通过直写,主存储器始终具有该行的最新副本.所以当读取完成时,主存总是可以回复请求的数据. 如果使用回写,有时最新数据在处理器缓存中,有时在主内存中.如果数 ..
发布时间:2021-12-20 11:19:36 其他开发

虚拟索引物理标记缓存同义词

我无法完全理解 VIPT 缓存中的同义词或别名的概念. 考虑将地址拆分为:- 这里,假设我们有 2 个页面,其中不同的 VA 映射到相同的物理地址(或帧号). VA 的 pageno 部分(位 13-39)被转换为 PA 的 PFN(位 12-35)并且两者的 PFN 保持相同VA 映射到相同的物理帧. 现在两个 VA 的 pageoffset 部分(位 0-13)与它们想 ..
发布时间:2021-12-20 11:18:37 其他开发

VIPT Cache:TLB 与 Cache 之间的连接缓存?

我只是想澄清这个概念,并且可以找到足够详细的答案,这些答案可以对硬件中的一切实际运作方式有所了解.请提供任何相关详细信息. 在 VIPT 缓存的情况下,内存请求并行发送到 TLB 和缓存. 从 TLB 中我们得到了被翻译的物理地址.从缓存索引中,我们得到一个标签列表(例如,来自属于一个集合的所有缓存行). 然后将翻译后的 TLB 地址与标签列表进行匹配以找到候选者. 我的问 ..
发布时间:2021-12-20 11:02:53 其他开发

L1 和 L2 缓存的行大小

从之前在此论坛上的问题,我了解到在大多数内存系统中,L1 缓存是 L2 缓存的子集,这意味着从 L2 中删除的任何条目也会从 L1 中删除. 所以现在我的问题是如何为 L2 缓存中的条目确定 L1 缓存中的相应条目.L2 条目中存储的唯一信息是标签信息.根据这个标签信息,如果我重新创建 addr,如果 L1 和 L2 缓存的行大小不同,它可能会跨越 L1 缓存中的多行. 该架构是否真的 ..
发布时间:2021-12-20 10:57:58 其他开发

为什么大部分处理器的L1缓存比L2缓存小?

为什么大部分处理器的L1缓存比L2缓存小? 解决方案 造成这种情况的原因各不相同. 系统中存在 L2 以加速出现 L1 缓存未命中的情况.如果 L1 的大小等于或大于 L2 的大小,则 L2 无法容纳比 L1 更多的缓存行,并且无法处理 L1 缓存未命中.从设计/成本的角度来看,L1 缓存与处理器绑定并且比 L2 更快.缓存的整个想法是,您可以通过添加比最慢的硬件性能更高(且成本更高 ..
发布时间:2021-12-20 10:51:51 其他开发

为什么要刷新由其他逻辑处理器引起的内存顺序违规的管道?

Memory Order Machine Clear 性能事件是vTune 文档描述为: 内存排序 (MO) 机器清除发生在来自另一个处理器的监听请求与管道中数据操作的源匹配时.在这种情况下,管道在进行中的加载和存储退出之前被清除. 但是我不明白为什么会这样.不同逻辑处理器上的加载和存储之间没有同步顺序. 处理器可以假装在所有当前正在进行的数据操作都提交之后发生了窥探. 该问题 ..

什么是微编码指令?

我看过很多参考微编码指令的文献. 这些是什么以及为什么使用它们? 解决方案 CPU 读取机器代码并将其解码为内部控制信号,将正确的数据发送到正确的执行单元. 大多数指令映射到一个内部操作,并且可以直接解码.(例如,在 x86 上,add eax, edx 只是将 eax 和 edx 发送到整数 ALU 以进行 ADD 运算,并将结果放入 eax.) 其他一些单一指令可以做 ..
发布时间:2021-12-18 09:29:28 其他开发

对于可变长度指令,计算机如何知道正在获取的指令的长度?

在并非所有指令长度都相同的体系结构中,计算机如何知道一条指令要读取多少?例如在 Intel IA-32 中有些指令是 4 字节,有些是 8 字节,那么它如何知道是读取 4 字节还是 8 字节呢?是不是机器开机时红色的第一条指令有一个已知的大小,并且每条指令都包含下一条指令的大小? 解决方案 首先,处理器不需要知道要获取多少字节,它可以获取足够方便的字节数,足以为典型或平均提供目标吞吐量指令 ..
发布时间:2021-12-18 09:28:51 其他开发

为什么 IA32 不允许内存到内存 mov?

在英特尔架构 IA32 中,像 movl、movw 这样的指令不允许操作数同时是内存位置.例如,不允许使用指令 movl (%eax), (%edx).为什么? 解决方案 答案涉及更全面地了解 RAM.简单地说,RAM只能处于两种状态,读模式或写模式.如果您希望将 ram 中的一个字节复制到另一个位置,当您从读取切换到写入时,您必须在 RAM 之外有一个临时存储区域. 架构当然有可能 ..
发布时间:2021-12-18 09:28:35 其他开发

汇编 - 如何通过延迟和吞吐量对 CPU 指令进行评分

我正在寻找一种公式/方法来衡量指令的速度,或者更具体地给出“分数";每条指令按 CPU 周期计算. 以下面的汇编程序为例, nopmov eax,dword ptr [rbp+34h]公司mov dword ptr [rbp+34h],eax 以及以下英特尔 Skylake 信息: mov r,m : 吞吐量=0.5 延迟=2 mov m,r:吞吐量=1 延迟=2 no ..

汇编指令如何在 CPU 上转化为电压变化?

过去 3 到 5 年,我一直在使用 C 和 CPython.考虑一下我在这里的知识基础. 如果我要对支持它的处理器使用诸如 MOV AL, 61h 之类的汇编指令,那么处理器内部究竟是什么来解释此代码并将其作为电压信号分派?怎么可能会执行这样一个简单的指令? 当我尝试思考 MOV AL, 61h 甚至 XOR EAX, EBX 中包含的众多步骤时,汇编甚至感觉像是一种高级语言. 编辑 ..
发布时间:2021-12-18 09:19:05 其他开发

为什么英特尔在其处理器中隐藏内部 RISC 内核?

从 Pentium Pro(P6 微体系结构)开始,英特尔重新设计了它的微处理器,并在旧的 CISC 指令下使用了内部 RISC 内核.由于 Pentium Pro,所有 CISC 指令都被分成更小的部分 (uops),然后由 RISC 内核执行. 一开始我很清楚英特尔决定隐藏新的内部架构并强制程序员使用“CISC shell".由于这个决定,英特尔可以在不破坏兼容性的情况下全面重新设计微处 ..
发布时间:2021-12-18 09:12:36 其他开发

为什么我们不能将 64 位立即数移动到内存中?

首先我对 movq 和 movabsq 之间的区别有点困惑,我的教科书说: 常规 movq 指令只能具有可以表示为 32 位二进制补码的直接源操作数.然后对该值进行符号扩展以生成目标的 64 位值.movabsq 指令可以将任意 64 位立即数作为其源操作数,并且只能将寄存器作为目标. 我有两个问题. 问题 1 movq 指令只能有可以表示为 32 位二进制补码的立即数源操 ..

慢jmp-指令

随着我的问题在 x86-64 中使用 32 位寄存器/指令的优势,我开始衡量成本的指令.我知道这已经多次完成(例如 Agner Fog),但我正在做用于娱乐和自我教育. 我的测试代码非常简单(为了简单起见,这里是伪代码,实际上是汇编程序): for(outer_loop=0;outer_loop 但还是要考虑一些事情. 如果循环的内部部分很大(大NI>10^7),则循环的整个内容无 ..
发布时间:2021-12-18 08:42:29 其他开发

MIPS 如何在不停止的情况下处理前一条 ALU 指令的分支?

addiu $6,$6,5bltz 6 美元,L5 美元没有...$L5: 这如何安全而不会停顿,这是经典 MIPS 甚至无法做到的,除非缓存未命中?(MIPS 最初代表没有互锁流水线级的微处理器,并且有一个加载延迟槽而不是互锁.) 原始 MIPS I 是经典的 5 级 RISC IF ID EX MEM WB 设计,它通过 一个单一的分支延迟槽,通过在 ID 阶段及早检查分支条件(更正 ..
发布时间:2021-12-18 08:41:43 其他开发

什么是部分旗帜摊位?

我刚刚回顾了Peter Cordes 的这个答案,他说, 部分标志停顿在读取标志时发生,如果它们发生的话.P4 永远不会有部分标志停顿,因为它们永远不需要合并.相反,它具有错误的依赖关系.几个答案/评论混淆了术语.他们描述了一个错误的依赖关系,但随后将其称为部分标志停顿.这是由于仅写入一些标志而发生的减速,但术语“部分标志停顿"是在必须合并部分标志写入时在 SnB 之前的 Intel 硬件上 ..
发布时间:2021-12-18 08:41:16 其他开发

Sandybridge 微架构中的堆栈引擎是什么?

我正在阅读http://www.realworldtech.com/sandy-bridge/我在理解某些问题时遇到了一些问题: 专用堆栈指针跟踪器也存在于 Sandy Bridge 中并重命名堆栈指针,消除串行依赖和删除一些 uop. 专用堆栈指针跟踪器究竟是什么? 对于 Sandy Bridge(和 P4),英特尔仍然使用术语 ROB.但它理解这一点至关重要,在这种情况下,它 ..
发布时间:2021-12-18 08:40:57 其他开发

什么是“FS"/“GS"?注册的目的?

所以我知道以下寄存器及其用途应该是什么: CS = 代码段(用于 IP) DS = 数据段(用于 MOV) ES = 目标段(用于 MOVS 等) SS = 堆栈段(用于 SP) 但是以下寄存器的用途是什么? FS = "文件段"? GS = ??? 注意:我不是询问任何特定的操作系统——我询问的是它们打算被 CPU 用来做什么,如果有的话. ..

CPU是怎么做减法的?

我有一些基本的疑问,但每次我坐下来尝试面试问题时,这些问题和我的疑问都会弹出. 假设 A = 5,B = -2.假设A和B是4个字节,CPU是如何做A+B加法的? 我知道 A 的符号位 (MSB) 为 0 以表示正值B 的符号位为 1 表示负整数. 现在在C++程序中,我想打印A + B,ALU(算术逻辑单元)的加法模块是否先检查符号位,然后决定做减法,然后按照减法的过程.如何减 ..
发布时间:2021-12-17 15:12:00 其他开发