C++:仿函数的缓存友好性

标签 c++ pointers caching reference

我正在用 C++ 制作一个简短的(但在 CPU/GPU 使用方面很昂贵)粒子系统库,其中需要性能和模块化。我希望用户能够制作自己的仿函数并将它们传递给 update() 函数,从而准确确定给定集合的粒子将如何在每一帧中演化(一个仿函数用于颜色,用于规模,位置......)。

这需要通过引用或指针将仿函数传递给函数 update()(作为抽象类参数),这意味着每次我在一个粒子上调用仿函数时,我的程序(和如果我错了请纠正我,我不确定我对缓存层的理解是否正确)会在从仿函数加载数据时生成缓存未命中,然后在我需要时重新生成缓存未命中迭代集合的下一个粒子。

这听起来像是对 CPU 时间的巨大浪费。我该如何解决?我对问题的理解是否正确?有什么问题吗?

最佳答案

Is there even a problem at all?

没有测量很难说。您是正确的,诸如引用和指针之类的间接寻址有可能损害性能。在您的特定程序中是否属于这种情况必须通过测量来确定。

您的问题的一个常用解决方案是接受仿函数作为模板参数,如下所示:

template <class Functor>
void update (Functor f){...}

这样,该函数甚至可能符合内联条件。

关于C++:仿函数的缓存友好性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34756482/

相关文章:

c++ - 在 MPI 进程之间交换数据(晕)

c - 如何使用 fseek() 正确移动 fread() 函数中的指针? (C)

C++ 试图从提供的坐标创建一个点

caching - telegram 的answerCallbackquery API 中的cache_time 有何作用?

c# - System.Web.Caching 和 System.Runtime.Caching 组合内存使用行为

ruby-on-rails - Rails 缓存计数器

c++ - Berkeley DB 无法使用不同的 Dbt 初始化设置值

c++ - iomanip 函数是如何实现的?

c++ - 如何在不使用额外空间的情况下检查双向链表是否为回文?

c++ - 为什么两个指针之间的差异不等于类型的大小?