为了账号安全,请及时绑定邮箱和手机立即绑定

为什么Skylake比Broadwell-E在单线程内存吞吐量方面要好得多?

为什么Skylake比Broadwell-E在单线程内存吞吐量方面要好得多?

Smart猫小萌 2019-08-28 15:01:39
为什么Skylake比Broadwell-E在单线程内存吞吐量方面要好得多?我们有一个简单的内存吞吐量基准。对于大块内存,它所做的只是重复记忆。在几台不同的机器上查看结果(针对64位编译),Skylake机器的性能明显优于Broadwell-E,保持OS(Win10-64),处理器速度和RAM速度(DDR4-2133)相同。我们不是说几个百分点,而是大约2个因素。Skylake配置为双通道,Broadwell-E的结果不会因双/三/四通道而异。任何想法为什么会这样?随后的代码在VS2015的Release中编译,并报告完成每个memcpy的平均时间:64位:Skylake为2.2ms,Broadwell-E为4.5ms32位:Skylake为2.2ms,Broadwell-E为3.5ms。通过利用多个线程,我们可以在四通道Broadwell-E构建上获得更大的内存吞吐量,这很不错,但是看到单线程内存访问的这种巨大差异令人沮丧。为什么差异如此显着的任何想法?我们还使用了各种基准测试软件,他们验证了这个简单示例所展示的内容 - 单线程内存吞吐量在Skylake上更好。#include <memory>#include <Windows.h>#include <iostream>//Prevent the memcpy from being optimized out of the for loop_declspec(noinline) void MemoryCopy(void *destinationMemoryBlock, void *sourceMemoryBlock, size_t size){     memcpy(destinationMemoryBlock, sourceMemoryBlock, size);}int main(){     const int SIZE_OF_BLOCKS = 25000000;     const int NUMBER_ITERATIONS = 100;     void* sourceMemoryBlock = malloc(SIZE_OF_BLOCKS);     void* destinationMemoryBlock = malloc(SIZE_OF_BLOCKS);     LARGE_INTEGER Frequency;     QueryPerformanceFrequency(&Frequency);     while (true)     {         LONGLONG total = 0;         LONGLONG max = 0;         LARGE_INTEGER StartingTime, EndingTime, ElapsedMicroseconds;         for (int i = 0; i < NUMBER_ITERATIONS; ++i)         {             QueryPerformanceCounter(&StartingTime);             MemoryCopy(destinationMemoryBlock, sourceMemoryBlock, SIZE_OF_BLOCKS);             QueryPerformanceCounter(&EndingTime);             ElapsedMicroseconds.QuadPart = EndingTime.QuadPart - StartingTime.QuadPart;             ElapsedMicroseconds.QuadPart *= 1000000;             ElapsedMicroseconds.QuadPart /= Frequency.QuadPart;             total += ElapsedMicroseconds.QuadPart;             max = max(ElapsedMicroseconds.QuadPart, max);         }         std::cout << "Average is " << total*1.0 / NUMBER_ITERATIONS / 1000.0 << "ms" << std::endl;         std::cout << "Max is " << max / 1000.0 << "ms" << std::endl;     }     getchar();}
查看完整描述

2 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

我终于得到了VTune(evalutation)并且正在运行。它在Broadwell-E上提供了0.602(0到1之间)的DRAM限制分数,在Skylake上提供了.324,其中Broadwell-E延迟的很大一部分来自内存延迟。鉴于记忆棒的速度是相同的(除了Skylake配置的双通道和Broadwell-E的四通道),我最好的猜测是Skylake中的内存控制器的效果要好得多。

这使得购买Broadwell-E架构变得更加强硬,并且要求您真正需要额外的内核才能考虑它。

我也有L3 / TLB未命中数。在Broadwell-E上,TLB未命中率大约高出20%,而L3未命中率则高出约36%。

我认为这不是“为什么”的答案,所以我不会这样做,但是我认为我会暂时接近一个。感谢所有有用的评论。


查看完整回答
反对 回复 2019-08-28
  • 2 回答
  • 0 关注
  • 1062 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信