首页 > 后端开发 > C++ > 我们如何故意去优化 Intel Sandybridge CPU 的程序?

我们如何故意去优化 Intel Sandybridge CPU 的程序?

Mary-Kate Olsen
发布: 2024-12-02 11:43:09
原创
954 人浏览过

How Can We Intentionally Deoptimize a Program for Intel Sandybridge CPUs?

对 Intel Sandybridge 系列 CPU 中的管道进行去优化

简介

本作业的目标是修改给定的程序以降低其性能,称为去优化。此任务需要了解英特尔 i7 管道架构以及如何重新排序指令路径以引入危险。

去优化技术

1.错误共享
安排非原子变量存储在同一缓存行中,导致存储转发停顿。

2.存储转发停顿
使用 XOR 翻转双精度数的符号位,而不是使用“-”运算符,强制将窄存储仅存储双精度数的一个字节。

3.内存消歧
将数据4096B分开放置,以触发存储到不同页面的错误依赖关系。

4.未对齐的数据
使用 __attribute__((packed)) 强制跨缓存行或页边界的变量未对齐,从而增加缓存未命中率。

5. Stride:
以 4096 字节的步幅循环数组,导致内存访问不连续,降低缓存利用率。

6.链表
将结果存储在链表中,引入指针追逐负载依赖关系以及内存中潜在的分散节点。

基于编译器的去优化

1。原子变量:
使用std::atomic;和 std::atomic由于内存栅栏导致代码速度较慢且开销较多。

2. Long double:
使用 long double 变量强制 x87 模拟,即使使用支持 SSE2 的 CPU。

3.整数转换
在整数和浮点类型之间重复转换,引入高延迟的转换指令。

4.系统调用
引入频繁的不必要的系统调用来强制上下文切换和缓存/TLB 未命中。

结论

通过采用这些技术,可以显着悲观给定的程序并使其运行速度比原始版本慢得多。成功去优化的关键是用“恶魔般的无能”而不是恶意的意图来证明每一步的合理性。

以上是我们如何故意去优化 Intel Sandybridge CPU 的程序?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板