gpt4 book ai didi

C++,缓存局部性改进的基准测试方法?

转载 作者:可可西里 更新时间:2023-11-01 17:39:51 25 4
gpt4 key购买 nike

我有一个 X 类的实现,它有两个指向两条信息的指针。我已经编写了一个新的实现,类 Y,它只有一个指向结构的指针,该结构将两条信息一起作为相邻成员包含在内。 X 和 Y 的方法通常只需要操作其中一条信息,但提供了一个返回指向第二条信息的指针的 get() 方法(在这种情况下,X 类只返回指向那条信息的指针,Y 类返回地址结构的第二个成员)。在正常使用中,对 X 和 Y 的方法的调用将穿插在对 get() 的调用中,并对返回的第二部分进行处理。

我希望在现实生活中应该有性能改进,因为这两条信息在 Y 类实现中的内存中彼此相邻(因为它们是结构的相邻成员),但我'我没有发现我编写的基准测试有任何差异(穿插调用 X 和 Y 的方法,并在大循环中处理它们的第二部分)。我怀疑这是因为在我的测试中,无论哪种情况,所有内容都适合缓存。我还不想在我的真实应用程序中尝试这个,因为 X 和 Y 的语义在与此优化无关的其他细微方面有所不同,并且移植使用的应用程序将是一些工作,这些基准应该有助于证明这样做的合理性工作放在首位。

观察由于更好的缓存局部性而导致的性能差异的最佳方法是什么?如果我在两次调用之间对一个等于缓存大小的数组做一堆虚拟工作就足够了吗?或者我是否想在一个略小于缓存大小的数组上工作,以便在我的类实例上工作会导致缓存进出缓存?我不确定如何编写针对编译器优化和不同缓存大小的稳健代码。

最佳答案

如果您使用的是 Linux,则使用 Cachegrind连同KCacheGrind可能会更深入地了解您的缓存的行为方式。

关于C++,缓存局部性改进的基准测试方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1003965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com