问题标签 [micro-architecture]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2997 浏览

system - 架构和微架构

有人可以大致解释一下处理器架构与其微架构之间的区别以及它们之间的关系吗?

一个应该与它的功能部分有关,但另一个我看不到

0 投票
0 回答
91 浏览

x86-64 - 非加载存储指令可以通过内存栅栏吗?(x86_64)

只有加载/存储操作不会围绕内存围栏重新排序吗?我的理解是,诸如 CPUID 之类的序列化指令会阻止任何指令(包括加载/存储操作)围绕它重新排序。记忆栅栏也一样吗?

0 投票
1 回答
189 浏览

assembly - 为什么 EIP 在 ADD 的描述中会多次更新?

ADD( const, memory)是最混乱的,这个代码序列看起来像下面这样:

  • 从内存中获取指令字节。
  • 更新 EIP 以指向下一个字节。
  • 解码指令。
    • 如果需要,获取一个位移以用于有效地址计算
    • 如果需要,更新 EIP 以指向位移值之外。
  • 从内存中获取常量值并将其发送到 ALU。
  • 更新 EIP 以指向超出常量的值(在内存中的下一条指令处)。
  • 从内存中获取源操作数的值并将其发送到 ALU。
  • 指示 ALU 添加值。
  • 将结果存储回内存操作数。
  • 用加法运算的结果更新标志寄存器。

这是来自汇编语言的艺术书。为什么 EIP 更新了 2 次甚至 3 次?

0 投票
1 回答
228 浏览

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

给定由真正的依赖关系链接并周期性重复的指令链(即循环),例如 (a->b->c)->(a->b->c)->...

假设它可以拆分为几个较短且独立的子依赖链以从乱序执行中受益:

  • (a0->b0->c0)->(a0->b0->c0)->...
  • (a1->b1->c1)->(a1->b1->c1)->...

乱序引擎将每条指令调度到具有延迟和互惠吞吐量的相应 CPU 单元。

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

根据 Agner 的手册Optimizing subroutines in assembly language第 12.15 节:“如果 CPU 无事可做,则累加器的最佳数量是依赖链中最关键指令的延迟除以该指令的倒数吞吐量”。“最关键的指导”是什么意思?是否有任何其他技术文档可以解决此类问题?

0 投票
2 回答
3501 浏览

caching - 为什么没有与高速缓存线大小一样宽的数据总线?

当发生高速缓存未命中时,CPU 会从主存储器中取出整个高速缓存行到高速缓存层次结构中。(在 x86_64 上通常为 64 字节)

这是通过数据总线完成的,在现代 64 位系统上只有 8 字节宽。(因为字长是 8 字节)

编辑: “数据总线”是指在这种情况下 CPU 芯片和 DRAM 模块之间的总线。该数据总线宽度不一定与字长相关。

根据策略,首先获取实际请求的地址,然后依次获取缓存行的其余部分。

如果有一个 64 字节宽度的总线,它看起来会快得多,这将允许一次获取整个高速缓存行。(这将是字长的八倍)

也许可能有两种不同的数据总线宽度,一种用于标准高速缓存行获取,另一种用于仅适用于字大小存储器访问的外部硬件 (DMA)。

限制数据总线大小的限制是什么?

0 投票
1 回答
92 浏览

assembly - 小分支预测练习(非作业)

这不是家庭作业。我正在阅读这个网站,IMO 对分支预测有很好的介绍,并决定在讲座之后尝试解决一个问题:

考虑以下代码[无分支延迟槽]:

第一个加法指令位于地址 0。

  1. 如果我们只使用包含 2 个条目的模式历史表,我们的误预测率是多少?[错误预测率 = # 错误预测 / # 预测]
  2. 如果我们使用具有 2 项本地历史表和 4 项模式历史表的本地历史预测器会怎样?

首先,我想知道条件中是否存在错误,并且两个添加指令都必须像其他指令一样,立即为 0 而不是 $0。任何熟悉该主题的人都可以对此发表评论吗?

其次,我试图解决这个问题(考虑到 add 是立即为 0 的 addi,如上所述),并考虑到饱和计数器的初始状态强烈不被采用。我的回答是:

1. 错误预测率 8/10(8 个错误预测,10 个预测)
2. 错误预测率 13/5(13 个错误预测,5 个预测)
任何熟悉该主题的人都可以检查一下吗?只是想知道我是否真的理解了讲座的材料。谢谢。

0 投票
2 回答
42 浏览

branch-prediction - 长管道中的后期 lhr / ghr 更新

我想知道在长流水线中这是否是一个可行的方案,当分支预测机制已经处理了较年轻的分支指令时,但相应的 lhr (或 ghr,取决于实现)仍然没有更新旧分支的实际结果,由于管道长度。

这是一个可行的方案,它是如何解决的?

0 投票
1 回答
255 浏览

cpu-architecture - 为什么不需要明确的单周期数据路径?

为什么 PC 在单周期数据路径中不需要明确的写入信号?为什么多周期数据路径中需要明确的写控制信号?

谢谢

0 投票
1 回答
489 浏览

pointers - 处理器如何辨别远回波和近回波?

阅读英特尔的大手册,我看到如果你想从一个远调用返回,即对另一个代码段中的过程的调用,你只需发出一个返回指令(可能带有一个立即参数,将堆栈指针向上移动 n指针弹出后的字节)。

显然,如果我解释正确,这足以让硬件将段选择器和偏移量弹出到正确的寄存器中。

但是,系统如何知道返回应该是远返回并且需要弹出偏移量和选择器?

如果硬件只是弹出偏移量指针而不是它之后的选择器,那么您将指向正确的偏移量但错误的段。

与近返回版本相比,远返回命令没有什么特别之处。

据我所知,它们看起来都一样。

然后我假设处理器,可能在微架构级别,跟踪哪些调用是远的,哪些是近的,以便当它们从返回时,系统知道要弹出多少字节以及在哪里弹出它们(指针寄存器和段选择器寄存器)。

我的假设正确吗?

大家对这个机制了解多少?

0 投票
1 回答
178 浏览

assembly - 退出单元在保留站中退出指令需要多长时间?

我在英特尔优化手册中寻找,对于 Skylake,我找不到在假设没有延迟的情况下离开执行端口后退出指令需要多长时间。

有人可以提供此信息或给我一个参考,我可以在哪里找到答案。此外,非常感谢您参考任何详细说明退休单元/流程如何工作及其延迟的文件/文件。

谢谢。