【发布时间】:2014-05-20 05:23:30
【问题描述】:
最近 Herb Sutter 在"Modern C++: What You Need to Know" 上做了一场精彩的演讲。本次演讲的主题是效率以及数据局部性和访问内存的重要性。 他还解释了 CPU 将如何喜欢内存(数组/向量)的线性访问。他从另一个经典参考文献"Game performance by Bob Nystrom" 中就该主题举了一个例子。
阅读这些文章后,我了解到影响程序性能的缓存有两种类型:
- 数据缓存
- 指令缓存
Cachegrind 工具还测量我们程序的缓存类型检测信息。许多文章/博客已经解释了第一点以及如何实现良好的数据缓存效率(数据局部性)。
但是我没有得到太多关于主题指令缓存的信息以及我们应该在我们的程序中注意什么样的事情来获得更好的性能?。根据我的理解,我们(程序员)对执行哪条指令或执行什么顺序没有太多控制。
如果小型 c++ 程序能够解释这个计数器(即指令缓存)如何随着我们编写程序的风格而变化,那就太好了。在这一点上,程序员应该遵循哪些最佳实践来获得更好的性能?
我的意思是我们可以理解数据缓存主题,如果我们的程序以类似的方式(向量与列表)可以解释第二点。这个问题的主要目的是尽可能地理解这个话题。
【问题讨论】:
-
避免使用虚函数,将复杂代码分解成更小的循环。
-
@Leeor:那是什么重复?
-
对不起,我提到了错误的问题,一旦我在电脑旁边,我就会撤回投票,但我很肯定它之前已经通过代码缓存上下文得到了回答,包括跟踪缓存,解码的 uop 缓存等。
标签: c++ caching c++11 c++14 cachegrind