micro-architecture相关内容

内存屏障的传递性/累积性属性是如何在微体系结构上实现的?

我一直在阅读x86内存模型的工作原理和x86上屏障指令的重要性,并将其与其他体系结构(如ARMv8)进行比较。在x86和ARMv8体系结构中,似乎(没有双关语意思)内存模型尊重传递性/累积性,即,如果CPU1通过CPU0看到存储,并且CPU2通过CPU1看到只有在CPU1看到CPU0存储时才可能发生的存储,那么CPU2也必须看到CPU0的存储。我提到的例子是Paul McKenney的著名论文6. ..

现代英特尔处理器有多少种超标量?

我刚刚了解了超标量处理器(https://en.wikipedia.org/wiki/Superscalar_processor)。 我还了解到,随着超标量处理器在宽度/方式数量上的增加,事情变得更加复杂,复杂性增加得如此之快,以至于最好添加更多的内核,而不是更多的宽度。我的教练说,在4路和8路超标量之间增加更多的方式是不值得的。 这让我想知道:英特尔从哪里停止增加方法,开始增加内核? ..
发布时间:2022-05-08 19:58:04 其他开发

长记分板和短记分板(&r.t)分别是什么?(&x;Long&q;;和&q;Short&q;记分板W.r.t)MIO/L1TEX?

在最新的NVIDIA微体系结构中,出现了一个新的(?)taxonomyWARP停滞原因/WARP调度器状态。 此分类中的两个项目是: 短记分板-MIO队列操作的记分板依赖项。 长记分板-L1TEX操作的记分板依赖项。 我认为,其中使用";记分板";表示无序执行数据依赖关系跟踪(例如,请参阅here)。 我的问题: 形容词“短”或“长”描述什么?是一块 ..
发布时间:2022-02-27 20:14:55 其他开发

存储缓冲区和行填充缓冲区如何相互作用?

我正在阅读 MDS 攻击论文RIDL:Rogue In-Flight Data Load.他们讨论了 Line Fill Buffer 如何导致数据泄漏.有 关于 RIDL 漏洞和“重播"加载问题,讨论漏洞利用的微架构细节. 阅读该问题后,我不清楚的一件事是,如果我们已经有存储缓冲区,为什么还需要行填充缓冲区. John McCalpin 在 WC-buffer 如何与 LFB 相关联 ..

添加冗余分配可在未经优化的情况下编译时加快代码速度

我发现了一个有趣的现象: #include#includeint main() {整数 p, q;时钟_t s,e;s=时钟();for(int i = 1; i 我在 i5-5257U Mac OS 上使用 GCC 7.3.0 编译代码没有任何优化.这是超过 10 次的平均运行时间:也有其他人在其他 Intel 平台上测试此案例并得到相同结果. 我将 GCC 生成的程序集发布在 此处.两 ..

为什么循环迭代中的依赖不能与前一个一起执行

我使用此代码来测试依赖项在 IvyBridge 上的循环迭代中的影响: 全局 _start_开始:mov rcx, 1000000000.for_loop:公司 rax ;操作A公司 rax ;操作B十二月运维Cjnz .for_loopxor rdi, rdimov rax, 60 ;_退出(0)系统调用 由于 dec 和 jnz 将被宏融合到单个 uop,因此我的循环中有 3 个 uops ..

架构和微架构

有人可以大致解释一下处理器架构与其微架构之间的区别以及它们之间的关系吗? 一个应该与其功能部分有关,但另一个我没有看到 解决方案 正式意义上的架构是公开呈现的接口,独立于时序和其他实现细节.微架构包括某些实现细节,通常高于晶体管和工艺技术.例如,ARMv7-A 是一种架构,而 ARM Cortex-A15 是实现 ARMv7-A 的微架构.完全相同的微架构的不同实现将提供周期相同的时 ..
发布时间:2021-09-04 18:31:44 其他开发

什么是“多头"?和“短"字样计分板MIO/L1TEX?

在最近的NVIDIA微体系结构中,有一个新的(?)此处). 我的问题: 形容词“短"是什么意思?或“多头"描述?它是单个记分牌的长度吗?两种不同的操作有两种不同的记分牌? MIO之间这种有点非直觉的二分法是什么意思-有些但不是全部都是内存操作;和L1TEX操作,它们都是内存操作吗?是二分法吗停滞原因仅仅是因为还是真正的硬件? 解决方案 NVIDIA GPU有两种指令分类: ..
发布时间:2021-04-27 20:11:07 其他开发

从程序员的角度来看,“新"处理器中的“新"是什么

我最近对理解底层计算感兴趣.我了解当今使用广泛的计算机遵循x86/x86-64体系结构. 据我了解,架构,更具体地说是指令集架构(ISA)是程序员能够发布给CPU的一组指令. 第一个问题,ISA是不断发展还是保持不变? 我认为它一直在发展(意味着新指令不断在增加/修改以前的指令?),然后旧处理器如何执行用新指令编写的代码?(它不知道新的指令,但应该能够执行代码,因为它具有x86体 ..

英特尔X86如何实现商店整体订单

由于X86的TSO内存模型,它可以保证所有商店的总订单.我的问题是,是否有人知道如何实现此目标. 我对如何实现所有四个栅栏都有很好的印象,因此我可以解释如何保留本地秩序.但是这四个栅栏只会给出PO.它不会给您TSO(我知道TSO允许较早的商店跳到较新的货物前面,因此仅需要4个栅栏中的3个). 单个地址上所有内存操作的总顺序是一致性的责任.但是我想知道英特尔(尤其是Skylake)如何在 ..

如何通过微体系结构实现障碍/栅栏以及获取,释放语义?

很多问题,例如 对于负载-负载屏障,如何防止负载-负载重新排序?很难相信x86将按顺序执行所有加载!我假设加载可以无序执行,但可以按顺序提交/退出.如果是这样,如果一个cpu在2个不同的位置执行2次加载,那么一个加载如何确保它从T100中得到一个值,而下一个加载在T100上或之后得到它?如果第一个负载未命中高速缓存并正在等待数据,而第二个负载命中并获取其值,该怎么办.当加载1获得其值时,如何确保 ..

现代缓存中的道路预测

我们知道,直接映射高速缓存在高速缓存命中时间方面优于集合关联高速缓存,因为不涉及特定标签的搜索.另一方面,集合关联缓存通常比直接映射缓存显示出更高的命中率. 我读到现代处理器试图通过使用一种称为“路途预测"的技术来结合两者的优点.他们在哪个位置预测了最有可能发生匹配的给定组的直线,并且仅在该直线中进行搜索.如果尝试导致未命中,请在集合的所有缓存行中使用常规的集合关联搜索. 我想了解这种 ..

L1缓存通常具有拆分设计,但是L2,L3缓存具有统一设计,为什么?

我正在阅读 解决方案 拆分L1的大部分原因是在两个缓存之间分配必要的读/写端口(以及带宽),并使它们物理上靠近数据.加载/存储与指令获取部分的管道. 也使L1d处理字节加载/存储(在某些ISA上,未对齐的更宽的加载/存储).在希望处理最大数量的x86 CPU上效率(不是包含单词的RMW),英特尔的L1d只能使用奇偶校验,不能使用ECC.L1i只需要处理固定宽度的提取,通常是简单的事情,例 ..

使执行吞吐量最大化的最小依赖链数是多少?

给出由真正的依赖关系链接并周期性重复的指令链,例如(a-> b-> c)->(a-> b-> c)-> ... 假定它可以分为几个较短的独立子依赖链,以从乱序执行中受益: (a0-> b0-> c0)->(a0-> b0-> c0)-> ... (a1-> b1-> c1)->(a1-> b1-> c1)-> ... 乱序引擎将每条指令调度到具有延迟和互惠吞吐量的相应CPU单元. ..

英特尔JCC勘误表-JCC真的应该单独对待吗?

Intel推动了微代码更新,以修复称为“跳转条件代码(JCC)勘误"的错误.由于在某些情况下无法将代码放入ICache,因此更新微码导致某些操作效率低下. 已发布的文档,标题为跳转条件代码勘误的缓解措施不仅列出了JCC,而且还列出了:无条件跳转,条件跳转,宏混合条件跳转,调用和返回. MSVC开关 /QIntel-jcc-erratum 文档中提到: 在/QIntel-jcc-e ..
发布时间:2020-07-24 09:34:54 其他开发

Ice Lake的48KiB L1数据缓存的索引如何工作?

英特尔手动优化(2019年9月修订)显示了针对Ice Lake微体系结构的48 KiB 8路关联L1数据缓存. 1 软件可见的延迟/带宽将根据访问模式和其他因素而变化. 这让我感到困惑,因为: 有96组(48 KiB/64/8),不是2的幂. 集合的索引位和字节偏移的索引位加起来超过12位,这使得 cheap-PIPT -as-VIPT-技巧不适用于4KiB页面. 总而言 ..
发布时间:2020-07-24 09:34:51 其他开发

在x86 Intel VT-X非根模式下,是否可以在每个指令边界处传递中断?

除了某些通常未指定将中断传递给虚拟处理器的条件(cli,if = 0等等)之外,guest虚拟机中的所有指令实际上是否可中断? 这就是说,当将传入的硬件中断分配给LAPIC然后再分配给处理器时,可能发生了一些内部魔术,将其转换为对来宾的虚拟中断(使用虚拟APIC,没有退出).发生这种情况时,当前执行的指令是否像典型的中断传递一样立即将OOO流序列化并跳转到向量,还是VT-x的虚拟中断传递会导 ..
发布时间:2020-07-24 09:33:38 其他开发

存储缓冲区和行填充缓冲区如何相互影响?

我正在阅读MDS攻击文件 RIDL:流氓机上数据加载.他们讨论了行填充缓冲区如何导致数据泄漏. 关于RIDL漏洞和“重放"负载问题,讨论了该漏洞的微体系结构细节. 在阅读了这个问题后,我仍然不清楚的一件事是,如果我们已经有一个存储缓冲区,为什么我们需要一个行填充缓冲区. John McCalpin在 对于到WB空间的商店,商店数据将保留在商店缓冲区中,直到商店退役之后.退役后,数据可 ..

如何使用CPU本身来判断x86-64指令操作码的长度?

我知道有库可以“解析"二进制机器代码/操作码以告知x86-64 CPU指令的长度. 但是我想知道,由于CPU具有内部电路来确定这一点,是否有一种方法可以使用处理器本身从二进制代码中判断指令大小? (也许甚至是黑客?) 解决方案 Trap标志( TFLAGS/RFLAGS中的TF)使CPU单步执行,即在运行一条指令后发生异常. 因此,如果您编写调试器,则可以使用CPU的单步执行功 ..
发布时间:2020-07-24 09:32:20 其他开发