32得票3回答
为什么在Haskell中与'par'一起需要使用'seq'或'pseq'?

我试图理解为什么我们需要标准示例代码中的所有部分:a `par` b `pseq` a+b 以下为什么不足以满足要求?a `par` b `par` a+b 上述表达似乎非常描述性:尝试并行评估a和b,并返回结果a+b。这样做的原因仅仅是为了效率吗:因为第二个版本会触发两次而不是一次? 以下...

22得票3回答
投机与预测的区别

在计算机体系结构中,分支预测和乱序执行有何区别? 这两个概念看起来非常相似,但它们之间存在微妙的区别。分支预测是一种技术,用于在程序执行过程中猜测下一个指令是否需要进行跳转操作,从而提高指令执行效率。而乱序执行是通过对指令进行重排列,以最大化指令级并行度,从而实现更高的性能。 请注意保留原...

16得票2回答
乱序执行vs.预测执行

我已经阅读了维基百科关于乱序执行和预测执行的页面。 然而,我不太理解它们之间的相似性和差异。对我来说,当它没有确定条件的值时,预测执行使用乱序执行。 混淆出现在我阅读Meltdown和Spectre的论文以及做进一步研究时。在Meltdown论文中指出Meltdown是基于乱序执行的,而一...

15得票1回答
为什么在其他逻辑处理器引起内存顺序违规时需要清空流水线?

Memory Order Machine Clear性能事件在vTune文档中描述为: 当来自另一个处理器的嗅探请求与流水线中数据操作的源匹配时,发生内存排序(MO)机器清除。在这种情况下,在进行中的加载和存储被退役之前,流水线被清除。 然而,我不明白为什么会这样。在不同逻辑处理器上...

12得票1回答
当Skylake CPU(处理器)预测错误分支时会发生什么?

我正在努力详细了解Skylake CPU管道各个阶段中指令在分支预测错误时发生的情况,以及正确分支目标的指令可以多快开始执行。因此,我们将这里的两个代码路径标记为红色(被预测但实际并未采取)和绿色(被采取但未被预测)。所以问题是: 1. 分支在管道中需要走多远,红色指令才开始被丢弃(它们被丢弃...

11得票1回答
推测执行会转化为昂贵的操作吗?

如果我正确理解分支(x86),处理器有时会猜测性地采取代码路径并执行指令,然后“取消”错误路径的结果。如果错误代码路径中的操作非常昂贵,例如导致缓存未命中或某些昂贵数学运算的内存读取,处理器会怎样?处理器通常如何处理这种情况?if (likely) { // do something ...

10得票1回答
ARM预取绕过解决方案

我有一个情况,其中一些地址空间非常敏感,如果你读取它,你会崩溃,因为那里没有人来响应那个地址。pop {r3,pc} bx r0 0: e8bd8008 pop {r3, pc} 4: e12fff10 bx r0 8: bd08 ...

9得票1回答
为什么不直接预测两个分支?

CPU使用分支预测来加快代码运行速度,但只有在第一个分支被执行的情况下才会使用。为什么不同时执行两个分支呢?也就是说,假设两个分支都会被执行,缓存两边,然后在必要时选择正确的分支。缓存不需要失效。虽然这需要编译器提前加载两个分支(更多内存,合适的布局等),但我想合适的优化可以使两者都流线型,从...

8得票2回答
Haskell的推测性并行执行

我正在考虑为我正在尝试解决的一个问题利用并行性。该问题大致如下:给定输入(一系列点),找到最佳输出(由这些点组成的最大三角形,最长线等)。在序列中有3种不同的“形状”,但我只对其中得分最高的那个感兴趣(通常是某种“长度”乘以系数的形式)。我们将这些形状称为S1、S2、S3。 我有两种不同的算...

8得票1回答
一个具有执行推测的CPU分支是否可能包含访问RAM的操作码?

据我所知,当CPU在执行某个代码片段之前进行预测时,它会“备份”寄存器状态,以便如果预测结果错误(使分支无用)--寄存器状态将被安全地恢复,而不会破坏“状态”。 那么,我的问题是:一个具有推测性的CPU分支能否包含访问RAM的操作码? 我的意思是,访问RAM不是一个“原子”操作 - 一个简...