Intel Data Dependent Prefetcher 对 SPEC CPU 2017 的影响

Table of Contents

背景

最近在做一些商业硬件的 Data Dependent Prefetcher 测量,无意中注意到 Intel 13 代酷睿是有 Data Dependent Prefetcher 的,因此先进行了一个简单的尝试。

介绍与开关控制

介绍可以参考 Intel的文档

而根据 Intel 的文档,它的开关位于MSR IA32_SPEC_CTRL的第8位,若要关闭,我们直接将该MSR读出来的结果 bitwise or 0x100即可,这里可以使用 msr-tools 软件包(Debian与Archlinux都可以直接使用该名称安装)进行控制。

开启DDP:

➜  ~ sudo rdmsr -x 0x48   
1
➜  ~ sudo wrmsr 0x48 0x101 -a
➜  ~ sudo rdmsr -x 0x48      
101

关闭DDP:

➜  ~ sudo wrmsr 0x48 0x1 -a

什么处理器开始支持?

根据 Intel 文档最后更新于于 2022 年 11 月,且只提到 "Some newer processors in the Intel® Core™ Processor Family" ,由于没有提到 Alder Lake 相同架构的 Xeon Sapphire Rapids ,我猜测是 Raptor Lake (也就是 13 代酷睿)开始支持。

于是找了台 i9 12900K 的机器测试,果然如此:

➜  ~ cat /proc/cpuinfo | grep model\ name | head -n 1
model name  : 12th Gen Intel(R) Core(TM) i9-12900K
➜  ~ sudo rdmsr -x 0x48         
1
➜  ~ sudo wrmsr 0x48 0x101 -a                        
wrmsr: CPU 0 cannot set MSR 0x00000048 to 0x0000000000000101

SPEC CPU简单测试

测试环境:
CPU: i9 13900K 关闭超线程、C State、小核
内存: 4xDDR5 4800MHz 32G JEDEC (共128G)
Kernel: Linux v6.5
编译器:gcc 13.2.0 (Debian gcc 13.2.0-4)
测试次数:3
SPEC运行命令:runcpu --iterations=3 --tuning=peak intspeed
SPEC配置文件:同Example-gcc-linux-x86.cfg,仅修改GCC路径。

默认状态:

600.perlbench_s                               NR       4      120        14.7   *
602.gcc_s                                     NR       4      217        18.4   *
605.mcf_s                                     NR       4      291        16.2   *
620.omnetpp_s                                 NR       4      135        12.1   *
623.xalancbmk_s                               NR       4      117        12.1   *
625.x264_s                                    NR       4       83.5      21.1   *
631.deepsjeng_s                               NR       4      174         8.21  *
641.leela_s                                   NR       4      230         7.40  *
648.exchange2_s                               NR       4      100        29.3   *
657.xz_s                                      NR       4      512        12.1   *
 Est. SPECspeed(R)2017_int_base       Not Run
 Est. SPECspeed(R)2017_int_peak                                           14.0

关闭DDP:

600.perlbench_s                               NR       4      119        14.9   *
602.gcc_s                                     NR       4      217        18.4   *
605.mcf_s                                     NR       4      295        16.0   *
620.omnetpp_s                                 NR       4      134        12.2   *
623.xalancbmk_s                               NR       4      118        12.0   *
625.x264_s                                    NR       4       83.5      21.1   *
631.deepsjeng_s                               NR       4      174         8.21  *
641.leela_s                                   NR       4      231         7.40  *
648.exchange2_s                               NR       4      100        29.3   *
657.xz_s                                      NR       4      511        12.1   *
 Est. SPECspeed(R)2017_int_base       Not Run
 Est. SPECspeed(R)2017_int_peak                                           14.0

可以看出,主要差距在于 mcf 与 perlbench ,其中 mcf 关闭 DDP 后性能略微降低, perlbench 关闭 DDP 后性能略微升高,这一点在我后续单独测试也可以验证,排除了实验误差的可能。

结论

Intel 13th Gen Core 上的 Data Dependent Prefetcher 在 SPEC CPU 2017 中的 mcf 与 perlbench 存在略微区别。但由于区别太小很难做更细致的 profiling ,或许需要寻找能打出更大区别的 workload ,也欢迎大家提供其他测试的建议。

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to Top