Caching 硬件预取器会检测到这一点吗?

Caching 硬件预取器会检测到这一点吗?,caching,operating-system,performance-testing,cpu-architecture,computer-architecture,Caching,Operating System,Performance Testing,Cpu Architecture,Computer Architecture,在以下场景中,硬件预取器是否会检测步幅并预取块 案例1:我正在生成唯一的随机编号(非重复),并列出这些随机编号。现在,通过使用列表中的随机编号,我正在访问该位置的数组。所以,由于在单个迭代中没有固定的步长,硬件预取器将无法提前预取块 现在,如果我在多个迭代中使用相同的随机序列random no,在单个迭代中,硬件预取器将无法找到跨步,但在多个迭代中,我使用相同的序列 所以,我的问题是,硬件预取器会检测到我重复使用序列(以随机方式生成)并预取一个块吗 我可以生成一次随机序列并将同一序列用于多次迭代

在以下场景中,硬件预取器是否会检测步幅并预取块

案例1:我正在生成唯一的随机编号(非重复),并列出这些随机编号。现在,通过使用列表中的随机编号,我正在访问该位置的数组。所以,由于在单个迭代中没有固定的步长,硬件预取器将无法提前预取块

现在,如果我在多个迭代中使用相同的随机序列random no,在单个迭代中,硬件预取器将无法找到跨步,但在多个迭代中,我使用相同的序列

所以,我的问题是,硬件预取器会检测到我重复使用序列(以随机方式生成)并预取一个块吗

我可以生成一次随机序列并将同一序列用于多次迭代吗?*我可以使用这种方法防止硬件预取器检测到步幅吗?*


或者,我应该在每次迭代中随机生成no吗?

这取决于硬件。阅读CPU的规格表。除非序列很小,否则这是不太可能的,因为预取电路用于检测模式的缓冲区相当有限。但是,正如@RaymondChen所提到的,预取电路也是高度可变的,这取决于具体的硬件,甚至是同一硬件的不同代,所以请查看文档和基准测试……感谢Raymond和twalberg的快速回复。实际上,我正在生成1024/4096个随机数,并计划使用奇数或偶数或全部。在这种情况下,它会超过预取器的缓冲区大小吗?预取器缓冲区大小取决于CPU,而您还没有说您正在使用什么CPU。这就像问“我可以在手机中存储多少电话号码?”而不告诉我们您使用的是什么手机。哦,对不起,我使用的是Intel Core2Duo 2.20GHz系统和Fedora操作系统。