0

我可能被迫编写一些性能关键的 C/C++ 代码,涉及多个输入数组和一个结果数组(不要介意确切的类型)。由于某些原因,我想处理我的输出数组的小块,根据输入修改它们 - 但不需要不断地读取并将它们写回内存,因为我不信任缓存(也就是说,我担心输入数组会覆盖它,我最终会实际进行内存读取和写入,这太可怕了......)所以,我想安全地玩它并试图留在寄存器上。

  • 我可以得到一个只存储在寄存器中的小型本地固定长度数组吗?
  • 我如何实现这一目标?
  • 这样的阵列可以有多大(例如,在 Haswell 或 Skylake 核心上)?
4

1 回答 1

0

一般来说,没有。大多数 CPU 架构不提供任何方法来索引寄存器,因此无法将数据作为数组访问。(例如,在 ARM 上,r1通过有寄存器r15,但无法通过寄存器的编号直接访问寄存器。这同样适用于 x86。)

您对缓存驱逐的担忧可能是错误的。现代 CPU 架构通常非常擅长管理缓存。

于 2016-01-24T23:26:10.737 回答