亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么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條經驗 獲得超6個贊

我終于得到了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 關注
  • 1238 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號