在什么情况下乱序执行会产生更高效的代码

发布于 2024-09-27 15:34:29 字数 171 浏览 7 评论 0原文

我试图了解 内存屏障 的工作原理、使用原因以及在什么情况下应该使用它。但是我不完全确定在什么情况下安排指令的顺序会更有效,有人可以给我一个例子吗?

I'm trying to understand how the Memory barrier works, why it is used and in what cases it should be used. However I'm not entirely sure in what cases it would be more efficient to arrange the order of instructions, can anyone give me an example of that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

仅冇旳回忆 2024-10-04 15:34:29

它有用的情况之一是浮点计算 - 这些计算通常比“正常”指令花费更长的时间,因此 CPU 在多条指令的一侧运行这些计算是有用的,而其他正常程序指令发生在主程序中算术逻辑单元。

它还可以帮助保持所有管道处于活动状态 - 一些 CPU 具有多个指令管道(例如,一个专门用于分支,一对专门用于算术运算符,一对用于浮点和 SIMD 指令)。对指令重新排序可以使 CPU 保持所有管道满载,而不是为几条指令留出一条空管道,从而加快程序执行速度。

即使对于单个管道,重新排序指令也可以通过删除连续的相关指令来帮助保持管道完整 - 请参阅 http:// en.wikipedia.org/wiki/Instruction_pipeline

One of the cases that it's useful is floating point calculations - these generally take a lot longer than 'normal' instructions, so it's useful for the CPU to run these off to one side over several instructions, while other normal program instructions happen in the main ALU.

It can also help to keep all the pipelines active - some CPUs have multiple instruction pipelines (say, one specialised for branches, a couple specialised for arithmetic operators, and a couple for floating point & SIMD instructions). Reordering the instructions allows the CPU to keep all the pipelines full, rather than having one empty for a few instructions, and so speeds up the program execution.

Even for a single pipeline, reordering instructions can help keep the pipeline full by removing consecutive dependent instructions - see http://en.wikipedia.org/wiki/Instruction_pipeline

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文