7

Intel 硬件预取器 Intel 网站显示有四种硬件预取器。位 3 控制的预取器是 L1 步长预取器。我正在运行一个测试代码来测试步幅预取器的触发条件是什么。我使用以下步骤运行代码(将 MSR0x1a4 设置为 0x7,这意味着仅启用基于 L1 IP 的 strider 预取器):

repeat following for 10000 times:
    flush
    training phase: access line 0 3 6 9 
    sleep for near 1000 cycles
    measure phase: measure line 12

我希望看到第 12 行被预取到缓存中。但是我只能看到缓存中的第 0 3 6 9 行被命中。即使在我更改步幅或访问模式的长度后,也无法观察到步幅预取活动。所以我想知道是否有人在英特尔处理器中看到过预取活动,或者有一些我没有注意到的特殊触发条件?

对此案例感兴趣的朋友可以试一下测试代码,运行即可sudo ./run.sh。我机器上的结果显示第 12 行的访问时间大多大于 180 个周期。我认为时间测量代码没有问题,因为如果我将测量的行从缓存行 12 更改为缓存行 6(只需在 test.c,第 103 行更改它),那么访问时间主要是 25 个周期。

4

0 回答 0