首页 > 后端开发 > C++ > 如何进一步优化蒙特卡洛模拟以显着减慢英特尔 Sandybridge 系列 CPU 的执行速度?

如何进一步优化蒙特卡洛模拟以显着减慢英特尔 Sandybridge 系列 CPU 的执行速度?

DDD
发布: 2024-11-29 00:57:10
原创
949 人浏览过

How Can a Monte Carlo Simulation Be Further Deoptimized to Significantly Slow Down Execution on an Intel Sandybridge-Family CPU?

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

目标: 通过利用以下知识来悲观程序运行速度较慢英特尔 i7

问题:

作业提供了两个选项:油石或蒙特卡罗程序。学生选择了蒙特卡洛模拟程序,但他们的悲观化努力只增加了代码运行时间一秒。

问题:

学生如何进一步悲观化代码实现更有意义速度变慢?

答案:

一般策略:

  • 引入不可预测的分支来增加误预测惩罚。
  • 延长循环携带的依赖链以减少指令级别并行性。
  • 使用较慢的 FP 操作和 div,尤其是 exp 和 log 函数。

Uarch 特定想法:

具有内在函数():

  • 使用 movnti 从缓存中逐出数据。
  • 在 FP 数学运算之间使用整数洗牌以导致旁路延迟。
  • 避免混合 SSE 和 AVX 指令而不使用vzeroupper。

使用(内联)asm:

  • 强制对齐问题以破坏 uop 缓存。
  • 使用 self-修改代码以触发管道

导致缓存未命中和内存减慢:

  • 执行狭窄存储导致存储转发停顿。
  • 替换具有大结构成员的局部变量来控制内存布局。
  • 安排内存布局以增加缓存未命中和页面拆分加载。
  • 使用未对齐的变量来跨越缓存行或页面边界。
  • 以非循环方式循环数组-连续顺序。
  • 考虑使用链表而不是

其他技术:

  • 使用 std::atomic;循环计数器用于较慢的原子操作。
  • 使用 -m32 或 -march=i386 进行编译以强制减慢代码生成速度。
  • 强制使用较低精度的长双精度计算以获得额外的速度。
  • 经常将CPU亲和力设置为不同的CPU。
  • 为上下文切换实现过多的系统调用

最后的注释:

  • 虽然这些技术有效地减慢了代码的速度,但它们的“恶魔般的无能”程度取决于给出的理由.
  • 作业讲师可能想让学生了解管道危险和依赖性,而不仅仅是应用这些技术盲目地。

以上是如何进一步优化蒙特卡洛模拟以显着减慢英特尔 Sandybridge 系列 CPU 的执行速度?的详细内容。更多信息请关注PHP中文网其他相关文章!

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