cpu-architecture相关内容

L1 缓存命中与 x86 上注册的周期/成本?

我记得在我的架构类中假设 L1 缓存命中是 1 个周期(即与寄存器访问时间相同),但在现代 x86 处理器上实际上是这样吗? L1 缓存命中需要多少个周期?与注册访问权限相比如何? 解决方案 这里有一篇关于这个主题的精彩文章: http://arstechnica.com/gadgets/reviews/2002/07/caching.ars/1 回答您的问题 - 是的, ..

CPU 架构演变如何影响虚拟函数调用性能?

多年前,我正在学习 x86 汇编器、CPU 流水线、缓存未命中、分支预测和所有爵士乐. 这是一个分为两部分的故事.我阅读了处理器中冗长管道的所有奇妙优势,即指令重新排序、缓存预加载、依赖交错等. 缺点是任何偏离规范的代价都非常大.例如,IIRC 早期千兆赫时代的某个 AMD 处理器每次通过指针 (!) 调用函数时都会受到 40 个周期 惩罚,这显然是正常的. 这不是一个可以忽略的 ..

为什么是 x86 小端?

我最近一直在问自己一个真正的问题是什么设计选择使 x86 成为小端架构而不是大端架构? 解决方案 在很大程度上,出于同样的原因,在添加时从最低有效数字(右端)开始——因为进位会向更有效的数字传播.将最低有效字节放在最前面允许处理器在仅读取偏移量的第一个字节后开始添加. 在您完成足够多的汇编编码和调试之后,您可能会得出结论,小端不是一个奇怪的选择——我们人类使用大端很奇怪. ..
发布时间:2022-01-06 12:42:09 其他开发

LFENCE 是否在 AMD 处理器上进行序列化?

在最近的英特尔 ISA 文档中,lfence 指令被定义为序列化指令流(防止其乱序执行).特别是,指令的说明包括这一行: 具体来说,LFENCE 在所有先前的指令在本地完成之前不会执行,并且在 LFENCE 完成之前不会有后续指令开始执行. 请注意,这适用于所有指令,而不仅仅是内存加载指令,使lfence 更多不仅仅是内存排序栅栏. 虽然这现在出现在 ISA 文档中,但不清楚它是 ..

如果我不使用围栏,一个核心需要多长时间才能看到另一个核心的写入?

我一直在尝试用 Google 搜索我的问题,但老实说我不知道​​如何简洁地陈述问题. 假设我在多核 Intel 系统中有两个线程.这些线程在同一个 NUMA 节点上运行.假设线程 1 写入 X 一次,然后只是偶尔向前读取它.进一步假设,除其他外,线程 2 连续读取 X.如果我不使用内存栅栏,线程 1 写入 X 和线程 2 看到更新的值之间可以间隔多长时间? 我知道 X 的写入将进入存储 ..
发布时间:2022-01-06 12:36:15 其他开发

x86 寄存器:MBR/MDR 和指令寄存器

据我所知,IA-32 架构有十个 32 位寄存器和六个 16 位寄存器. 32位寄存器如下: 数据寄存器 - EAX、EBX、ECX、EDX 指针寄存器 - EIP、ESP、EBP 索引寄存器 - ESI、EDI 控制寄存器 - EFLAG(EIP 也被归类为控制寄存器) 16 位寄存器如下: 代码段:它包含要执行的所有指令. 数据段:它包含数据、常量和工作区. ..
发布时间:2022-01-06 12:31:28 其他开发

当 Skylake CPU 错误预测分支时究竟会发生什么?

我试图详细了解当分支预测错误时,skylake CPU 管道各个阶段的指令会发生什么情况,以及来自正确分支目标的指令开始执行的速度. 所以让我们将这里的两个代码路径标记为红色(预测的,但未实际采用的)和绿色(采用的,但未预测的).所以问题是:1. 在红色指令开始被丢弃之前,分支必须通过流水线多远(以及它们在流水线的哪个阶段被丢弃)?2. 绿色指令多久可以开始执行(就分支到达的流水线阶段而言) ..

全局不可见加载指令

由于存储加载转发,某些加载指令是否永远不会全局可见?换句话说,如果加载指令从存储缓冲区获取其值,则它永远不必从缓存中读取. 正如通常所说的那样,当从 L1D 缓存读取时,负载是全局可见的,不从 L1D 读取的负载应该使其全局不可见. 解决方案 加载全局可见性的概念很棘手,因为加载不修改内存的全局状态,而其他线程不能直接 观察它. 但是一旦乱序/推测执行后尘埃落定,我们可以知道如果线 ..
发布时间:2022-01-06 12:14:34 其他开发

英特尔酷睿 i7 处理器使用了哪种缓存映射技术?

我了解了不同的缓存映射技术,例如直接映射和完全关联或集合关联映射,以及它们之间的权衡.(维基百科) 但我很好奇现在英特尔酷睿 i7 或 AMD 处理器中使用的是哪一个? 这些技术是如何发展的?还有哪些需要改进的地方? 解决方案 直接映射缓存基本上从未用于现代高性能 CPU.对于相同大小的组关联高速缓存,其命中率的巨大优势超过了节能,而控制逻辑只是稍微复杂了一点.现在晶体管的预算 ..
发布时间:2022-01-06 12:12:26 其他开发

为什么我们需要针对不同的平台(例如 Windows/Linux)进行编译?

我已经了解了 CPU/ASM/C 的基础知识,但不明白为什么我们需要为不同的操作系统目标编译不同的 C 代码.编译器所做的是创建汇编代码,然后将其组装成二进制机器代码.由于指令集架构不同,ASM 代码当然因 CPU 架构(例如 ARM)而异. 但是由于Linux和Windows运行在同一个CPU上,像MOVE/ADD/...这样的机器操作应该是相同的.虽然我确实知道有特定于操作系统的功能,例 ..
发布时间:2022-01-04 21:41:30 其他开发

使用环形总线拓扑的 Intel CPU 如何解码和处理端口 I/O 操作

我从硬件抽象级别理解端口 I/O(即断言一个引脚,该引脚向总线上的设备指示地址是端口地址,这在具有简单地址总线模型的早期 CPU 上有意义)但我'我不太确定它是如何在现代 CPU 微架构上实现的,尤其是端口 I/O 操作如何出现在环形总线上. 首先.IN/OUT 指令分配给保留站还是加载/存储缓冲区?我最初的想法是它将在加载/存储缓冲区中分配并且内存调度程序识别它,将它发送到 L1d,表明它 ..
发布时间:2022-01-04 08:43:26 其他开发

关于x86 I/O口地址和IN/OUT指令的问题

据我所知,这是 PC 总线系统的简化视图(不包括我知道的桥接器). 如图所示: 据我所知,在现代 x86 CPU 中,我们有 65536 字节(0000-FFFF)的地址空间.这些是 I/O 地址.在 x86 中,IN 和 OUT 指令用于通过 I/O 端口与设备通信. 考虑到 PC (x86 cpu) 以下是我的问题: 我可以在不使用 PCI 或任何其他总线的情况下将设备 ..
发布时间:2022-01-04 08:40:39 其他开发

阿姆达尔定律中的负加速?

阿姆达尔定律指出整个系统的加速是 an_old_time/a_new_time 其中 a_new_time 可以表示为 ( 1 - f ) + f/s',其中 f 是系统的分数这是通过一些修改增强的,s' 是系统的那部分增强的量.但是,在对s'求解这个方程后,似乎有很多情况s'是负数,这没有物理意义. 假设 s = 2(整个系统的速度提高 100%)和 f = 0.1(10% 的系统受到 ..

malloc 可以分配的最大内存

我试图弄清楚我可以在我的机器上最大程度地分配多少内存(1 Gb RAM 160 Gb HD Windows 平台). 我读到 malloc 可以分配的最大内存仅限于物理内存(在堆上). 此外,当程序消耗的内存超过一定水平时,计算机会停止工作,因为其他应用程序没有获得它们所需的足够内存. 为了确认,我用C写了一个小程序: int main(){国际*p;而(1){p=(int * ..

字可寻址和字节可寻址的区别

有人能解释一下 Word 和 Byte 可寻址之间的区别吗?它与内存大小等有什么关系? 解决方案 一个字节是一个内存单元strong> 用于存储 内存芯片充满了这样的字节. 内存单元可寻址.这是我们可以使用内存的唯一方法. 实际上,内存只是字节可寻址.意思是: 一个二进制地址总是只指向一个字节. 一个词就是一组 字节 –2、4、8 取决于数据总线的CPU大小. ..
发布时间:2021-12-21 10:15:08 其他开发

分支目标缓冲区检测到什么分支错误预测?

我目前正在研究可以检测分支预测错误的 CPU 管道的各个部分.我发现这些是: 分支目标缓冲区 (BPU CLEAR) 分支机构地址计算器(BA CLEAR) 跳转执行单元(不确定这里的信号名称??) 我知道 2 和 3 检测到什么,但我不明白 BTB 中检测到什么错误预测.BAC 检测 BTB 在哪里错误预测了非分支指令的分支,BTB 未能检测到分支,或者 BTB 错误预测了 x8 ..

关于内存,每个程序员都应该知道什么?

我想知道 Ulrich Drepper 2007 年的每个程序员应该了解的内存中有多少仍然有效的.我也找不到比 1.0 更新的版本或勘误表. (在 Ulrich Drepper 自己的网站上也有 PDF 格式:https://www.akkadia.org/drepper/cpumemory.pdf) 解决方案 据我所知,Drepper 的内容描述了有关内存的基本概念:CPU 缓存如 ..
发布时间:2021-12-20 15:35:37 其他开发

什么是参考位置?

我在理解参考位置时遇到问题.任何人都可以帮助我理解它的含义和是什么, 参考的空间局部性 参考的时间局部性 解决方案 如果您的计算机充满了超快内存,这无关紧要. 但不幸的是,情况并非如此,计算机内存看起来像这样1: +-----------+|中央处理器 | ..
发布时间:2021-12-20 11:42:41 其他开发

直接映射缓存如何工作?

我正在学习系统架构课程,但我无法理解直接映射缓存的工作原理. 我查看了几个地方,他们以不同的方式解释它,这让我更加困惑. 我不明白的是标​​签和索引是什么,它们是如何选择的? 我讲座的解释是:"地址分为两部分用于直接寻址 (32k) RAM 的索引(例如 15 位)地址的其余部分,标签被存储并与传入标签进行比较." 那个标签从哪里来?它不能是 RAM 中内存位置的完整地址, ..
发布时间:2021-12-20 11:42:01 其他开发

MOESI 缓存一致性协议相对于 MESI 有什么好处?

我想知道 MOESI 相对于 MESI 缓存一致性协议有什么好处,以及哪种协议目前更受现代架构的青睐.如果成本不允许,收益通常不会转化为实施.MOESI 相对于 MESI 的定量性能结果也很不错. 解决方案 AMD 使用 MOESI,Intel 使用 MESIF.(我不知道非 x86 缓存的详细信息.) MOESI 允许直接在缓存之间发送脏缓存行,而不是写回共享的外部缓存,然后从那里 ..