编译器优化如何影响缓存不友好的算法?

纳雷克·阿塔扬

我注意到这个问题的代码中有一个有趣的行为,它也来自 Agner Fog 在Optimizing software in C++ 中,它简化了数据访问和存储在缓存中的方式(缓存关联性)。解释对我来说很清楚,但后来有人对volatile......如果我们volatile在矩阵声明中添加限定符:volatile int mat[MATSIZE][MATSIZE];值的运行时间512急剧减少:2144 → 1562 μs。

正如我们所知volatile,当程序的 POV 看起来没有必要时,编译器会阻止编译器缓存值(在 CPU 寄存器中)并优化对该值的访问。

一种可能的版本假设计算过程仅发生在 RAM 中,并且在 的情况下不使用 cpu 缓存volatile但另一方面, value 的运行时间513再次小于for 512: 1490 μs...

费伦茨·迪克

不幸的是,我无法确认 volatile 版本运行得更快。我对 volatile 和非 volatile 版本都做了测试,两者的时间对比见下图。在衡量性能以优化代码时,采取几个步骤(不仅仅是一两个,而是数千个)并采用模式(https://en.wikipedia.org/wiki/Mode_(statistics ) ) 根据 Alexandrescu 的 Fastware 收集的数据。

在此处输入图片说明

有各种高峰和深谷,但从图表上看,您无法得出波动率更快的结论。

确实,编译器生成的代码是不同的,但没有到这种程度,你可以在https://godbolt.org/g/ILw3tg查看

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SIMD操作的结果如何返回数组:缓存不友好?

来自分类Dev

编译器优化对使用PAPI的FLOP和L2 / L3缓存未命中率的影响

来自分类Dev

gcc编译器优化影响浮点比较的结果

来自分类Dev

编译器如何优化模板?

来自分类Dev

GraalVM:如何实现编译器优化?

来自分类Dev

Azure CDN Url重写对缓存不友好

来自分类Dev

编译器优化问题

来自分类Dev

编译器的优化指标

来自分类Dev

如何禁用V8的优化编译器

来自分类Dev

我如何“告诉” C编译器不应优化代码?

来自分类Dev

我如何看待编译器进行的优化

来自分类Dev

Linux上的Swift:如何指定编译器优化

来自分类Dev

算术运算是否会受到编译器优化的影响?

来自分类Dev

GCC编译器中的优化对溢出条件有什么影响

来自分类Dev

设计优化编译器时是否考虑过遗传算法?

来自分类Dev

nvcc编译器未优化

来自分类Dev

编译器是否优化String文字?

来自分类Dev

编译器优化回调与JMP

来自分类Dev

了解MSVS C ++编译器优化

来自分类Dev

C#编译器优化

来自分类Dev

禁用GLSL编译器优化

来自分类Dev

R中的字节编译器优化

来自分类Dev

编译器优化或我的误解

来自分类Dev

编译器代码优化:AST与IR

来自分类Dev

阻止编译器优化逻辑

来自分类Dev

GCC编译器优化选项

来自分类Dev

禁用特定的编译器优化

来自分类Dev

MPI Fortran编译器优化错误

来自分类Dev

Swift编译器对'for'循环的优化