与 Intel Broadwell 相比,AMD EPYC 7443 的性能较低

问题描述 投票:0回答:0

我正在运行一个基准测试来测量网络设备的带宽(与 PCIE 连接)。 基准测试使用通信框架来传输消息。 每个发送操作都由发送请求表示。

基准代码

发送方和接收方具有相同的设置,具有相同的 CPU/RAM/网卡/OS/SW/驱动程序/等 测试在每个对等点的单核上运行,只有一个线程(一个在发送方,一个在接收方)。 测试有一个预热阶段(不测量执行的结果)。 进程根据系统拓扑(NUMA 距离)固定到特定核心。

我注意到,与基于 Intel 的机器相比,我在基于 AMD 的机器上得到了不同的结果。这是预料之中的,但奇怪的是 AMD CPU (EPYC 7443) 应该比英特尔 (E5-2680 v4) 更快,但基于英特尔的系统提供了 20% 的带宽。

我计算了两个系统(在发送方)上的缓存未命中率,与 Intel 机器相比,AMD 机器上的缓存未命中率很高。我不确定为什么会这样。

AMD
Performance counter stats for process id '1103957':

     **4,064,775,312      cache-references                                              (41.65%)
       293,339,910      cache-misses              #    7.217 % of all cache refs**      (41.65%)
     2,773,241,736      L1-dcache-load-misses                                         (41.65%)
         1,105,886      L1-icache-load-misses                                         (41.66%)
    97,199,735,971      cpu-cycles                                                    (41.67%)
           138,263      r8ae                                                          (41.68%)
    60,775,752,753      r4ae                                                          (41.68%)
     2,044,760,199      r2ae                                                          (41.68%)
             2,012      r1ae                                                          (41.68%)
        16,147,477      r187                                                          (41.68%)
       179,557,410      r287                                                          (41.67%)
    76,295,394,278      r487                                                          (41.66%)

      25.000407397 seconds time elapsed

Intel
Performance counter stats for process id '109233':

     **2,025,418,233      cache-references
           362,591      cache-misses              #    0.018 % of all cache refs**
     2,967,129,952      L1-dcache-load-misses
        12,114,610      L1-icache-load-misses
    77,263,379,357      cycles
    26,532,945,498      resource_stalls.any
    10,038,121,055      resource_stalls.sb

      25.297898440 seconds time elapsed

内存占用也不同: 英特尔 总计 626452K AMD 总计 469760K

我还在发送端测量了每个请求(使用

clock()
)的生命周期(从创建到完成),我得到了一些我不确定如何解释的奇怪结果。我附上了一张包含 5000 个采样请求的图表。也许值得一提的是,当设备“资源不足”时,请求可以进入待处理队列,并且该队列是在 SW 中实现的。

似乎 CPU 的工作方式不同。我知道 CPU 的体系结构存在差异(英特尔是单片的),可能还有其他差异可以解释这种奇怪的结果,但我不是 CPU 架构师或编译器专家,所以我不能确切地说出我是什么看到以及为什么我得到这个结果。如果您能帮助我并向我解释可能导致这种情况的原因以及可以改进的地方? 另外我不明白为什么英特尔机器上的大量请求显示 0 周期生命周期,这是测量错误吗?

performance profiling benchmarking intel amd
© www.soinside.com 2019 - 2024. All rights reserved.