- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的研究生计算机架构上,教授谈到了 MIPS 中的流水线,但也说由于 x86 指令集的某些情况(我不太记得),x86 处理器需要有一个额外的逻辑来预-处理汇编指令和管道。
我不是在寻找直接的数字答案,而不是寻找有关该主题的文档或提示:正在做什么来翻译 x86 指令以允许流水线化,此逻辑如何工作等等。
非常感谢。
最佳答案
http://realworldtech.com/ 上的许多论坛帖子就晶体管数量/性能/功率而言,“x86 税”与 x86 CPU 的成本相比,与 MIPS 等易于解码的 ISA 相比,已经争论了多少。
10% 是一个被广泛猜测的数字。其中一些成本是固定的,并且不会随着您使 CPU 更强大而扩展。例如可能需要 3 个额外的流水线阶段才能将 x86 指令解码为复杂性与分离 MIPS 指令相似的微指令流。具有内存目标的 ADD 可能会解码为加载、添加和存储。 (管道某些部分的微融合使其比这更复杂。)
并行解码可变长度 x86 指令非常耗电(当前设计中每个时钟最多 4 个)。 x86 不仅仅是可变长度,确定长度(即下一条指令的开始)需要查看很多位,因为有可选的前缀和各种其他复杂性。 Agner Fog's blog post about the "instruction set war" Intel 和 AMD 之间讨论了 x86 操作码编码空间困惑状态的一些成本。 (另请参阅他的 microarch pdf,了解 AMD 和 Intel 的现代 x86 设计中的管道,旨在发现实际代码中的瓶颈/了解性能计数器,但如果您只是好奇 CPU 的工作原理,这也很有趣)。
解码 x86 指令的成本如此之高,以至于 Intel's Sandybridge microarchitecture family uses a small/fast decoded-uop cache以及传统的 L1 I-cache。即使是大型循环通常也适合 uop 缓存,与从传统解码器运行相比,可以节省电力并提高前端吞吐量。大多数其他 ISA 无法从解码指令缓存中获得几乎相同的好处,因此它们不使用它们。 (Intel 之前在 Pentium 4 中尝试过解码的 uop 跟踪缓存(没有 L1 I-cache,并且解码器更弱),但是 SnB 的 uop 缓存不是跟踪缓存,旧的解码器仍然是足够快。)
OTOH,x86 的一些遗留包袱(如部分 FLAGS 更新)对管道的其余部分和无序核心产生了成本。现代 x86 CPU 确实必须分别重命名 FLAGS 的不同部分,以避免在 DEC/JNZ 之类的东西中出现错误的依赖关系。 (其中 DEC doesn't modify CF )。英特尔尝试不这样做(在 Pentium4 又名 netburst 微架构系列中)。他们认为他们可以强制每个人使用避免 INC/DEC 的编译器重新编译他们的代码,并使用 add eax, 1
(它确实修改了所有标志)。 ( This optimization advice stuck around for ages in their official optimization manual, long after P4 was obsolete, and many people think it's still relevant .)
有些人认为 x86 强大的内存排序语义应该被视为“x86 税”的一部分,它减少了流水线 CPU 可以利用的并行性,但其他人(例如 Linus Torvalds)认为让硬件为您完成这意味着您不需要在多线程代码中到处都是屏障指令。并且让屏障指令“便宜”(不是完全刷新存储缓冲区或其他)需要硬件足够详细地跟踪内存顺序,以便它们可能只是隐含屏障。
关于assembly - 为了流水线,实际的 Intel x86 处理器有多少开销?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39781273/
我是Intel pin工具的新手,最近开始研究pin工具。在教程中,描述了pin工具的模式: Sometimes, however, it can be useful to look at diffe
我是Intel pin工具的新手,最近开始研究pin工具。在教程中,描述了pin工具的模式: Sometimes, however, it can be useful to look at diffe
我得到了这份工作:1。产生一个正弦信号。2。使用 FFT 构建其频谱。首先,我为 visual studio 2010 安装了 Intel Parallel Studio XE 2011。在 vs 2
看起来 Intel 提供了许多 OpenCL 实现。 ArchWiki描述 OpenCL 实现。它说 beignet 和 intel-opencl 已弃用。那么,intel-compute-runti
我正在尝试通过阅读 Intel Intrinsics Guide 来开始使用 AVX512 内在函数但到目前为止我发现它没有定义命名数据类型或用于解释的伪代码语法。没有这样的定义,所谓的指南对我起码没
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 4 年前。 Improv
在 Android SDK 管理器中,我可以看到 3 种类型的 Intel Atom 图像。有人可以解释“Intel Atom Image”、“Google APIs Intel Atom Image
我写了这个 pintool: #include "pin.H" #include #include VOID Instruction(INS ins, VOID *v) { cou
我正在尝试了解 _mm256_permute2f128_ps() 的作用,但无法完全理解 intel's code-example . DEFINE SELECT4(src1, src2, contr
我正在开发一个性能关键应用程序,该应用程序必须移植到仅支持 MMX、SSE、SSE2 和 SSE3 的英特尔凌动处理器中。我以前的应用程序支持 SSSE3 和 AVX,现在我想将其降级为 Intel
我有最新版本的 Intel Pin 3.0 版本 76887。 我有一个支持 MPX 的玩具示例: #include int g[10]; int main(int argc, char **arg
我想研究和比较elf、SPARC和PA-RISC的可执行文件结构。 为了进行研究,我想在 Intel 机器 (Core2Duo) 上安装 OpenSolaris。 但我有一个基本的疑问,它会起作用吗?
我尝试使用 g++ 用 intel mkl 11.1 进行编译: g++ -m32 test.c -lmkl_intel -lmkl_intel_thread -lmkl_core -liomp5 -
我正在按照以下说明进行操作: https://software.intel.com/en-us/articles/building-boost-with-intel-c-compiler-150 Co
我正在尝试在我的 C 程序中使用内联汇编程序 __asm,使用 Intel 语法而不是 AT&T 语法。我正在使用 gcc -S -masm=intel test.c 进行编译但它给出了错误。下面是我
我是 OpenCL 的新手,目前对其性能有一些疑问。 我有 Intel(R) Core(TM) i5-4460 CPU @ 3.20GHz + ubuntu + Beignet(Intel 开源 op
我在/ex 文件夹中有一个 main.f90。 f77 子程序文件在/ex/src 中。子程序文件再次使用 BLAS 和 LAPACK 库。对于 BLAS 和 LAPACK,我必须使用英特尔数学核心函
我的团队最近从 2015 年英特尔编译器(并行工作室)升级到 2018 年版本,我们遇到了一个链接器问题,让每个人都焦头烂额。 我有以下类(为简洁起见进行了适度编辑),用于处理子进程的包装以及与它们对
在最后几天,我观察到我无法解释的新工作站的行为。对这个问题做一些研究,INTEL Haswell architecture 中可能存在一个可能的错误。以及在当前的 Skylake Generation
我的 HAXM 安装存在问题。事情是这样的。每次尝试为我的计算机安装 HAXM 时,我都会收到此错误: 问题是,我的计算机支持虚拟化技术(见下图)。知道如何解决这个问题吗? 最佳答案 只需执行以下步骤
我是一名优秀的程序员,十分优秀!