c++ - 在 C/C++ : is it possible? 中分配 CPU 缓存中的静态内存

标签 c++ c memory-management cpu-cache

是否可以在 CPU 缓存中显式创建静态对象,以确保这些对象始终保留在缓存中,这样就不会因为一直进入 RAM 或上帝保佑 - hdd 虚拟内存而影响性能?

我特别感兴趣的是大型 L3 共享缓存,而不是 L1、L2、指令或任何其他缓存,只是最大的片上内存。

为了与我在发布此之前搜索的其他主题区分开来,我对私有(private)化整个缓存不感兴趣,只是私有(private)化一小部分区域。

最佳答案

没有。缓存不可寻址,因此您不能在其中分配对象。

您似乎想问的是:在虚拟内存中分配了空间后,我能否确保始终获得缓存命中?

这是一个更复杂的问题,答案是:部分。

通过使用操作系统的内存管理 API(例如 mlock())将区域标记为不可分页,您绝对可以避免被换出到磁盘。或者从“非分页池”开始分配。

我认为没有类似的 API 可以将内存固定到 CPU 缓存中。即使您可以为该 block 保留 CPU 缓存,也无法避免缓存未命中。如果另一个核心写入内存,所有权将被转移,您将遭受缓存未命中和相关的总线传输(可能到主内存,可能到另一个核心的缓存)。

正如 Mathew 在他的评论中提到的,您还可以强制缓存未命中与管道中的其他有用工作并行发生,以便数据在您需要时位于缓存中。

关于c++ - 在 C/C++ : is it possible? 中分配 CPU 缓存中的静态内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8854375/

相关文章:

c++ - 在 C++ 实例中,字段未初始化为其默认值。静态字段怎么样?

c++ - 按值传递变量与按引用传递变量具有相同的结果

python - 使用英特尔 C 编译器编译 TensorFlow

c++ - 静态或堆栈分配数组的可变大小元素是否驻留在堆空间中?

c++ - C/C++ 分配器在多线程上下文中的性能如何?

c++ - 在 QT 中创建自定义按钮

c++ - 无法在没有对象的情况下调用成员函数 std::string Sportist::getIme()

c - 程序不等待用户在 while(1) 循环内接受用户输入

c - 在C中初始化一个整数数组,它在x86下的RAM中是什么样子?

创建共享内存