簡體   English   中英

動態內存在Intel Xeon Phi上變慢

[英]Dynamic memory slow down on Intel Xeon Phi

我正在創建一個基於Intel Xeon Phi架構的簡單矩陣乘法過程,該過程如下所示(參數分別為A,B,C),並且計時不包括初始化:

//start timing
for(int i = 0; i < size; i++){
    for(int k = 0; k < size; k++) {
        register TYPE aik = A[i][k];
        for(int j = 0; j < size; j++) {
              C[i][j] += aik * B[k][j];
        }
    }
}
//end timing

我正在使用限制,對齊的數據等。 但是,如果使用動態內存(posix_memalign)分配矩陣,則會導致計算速度嚴重降低,即,對於TYPE = float和512x512矩陣,在動態情況下大約需要0.55s,而在其他情況下大約需要0.25s。 在不同的體系結構(Intel Xeon E5)上,速度也有所降低,但幾乎沒有引起注意(約0.002 s)。

任何幫助都感激不盡!

如果使矩陣具有不同的大小,則時序差異會如何? (例如513x513)

我問這個問題的原因是,我認為您可能會看到這種效果,原因是當您在k上進行B循環時,超出了緩存方式的關聯性並從L2退出了C [i] []的元素。 如果B和C對齊並且大小為2的冪,則可能會導致緩存超對齊而導致此問題。

如果B和C在堆棧上或以其他方式未對齊,則不會看到這種效果,因為更少的地址是2的冪次對齊。

在“非動態”情況下,數組只是全局變量嗎? 如果是這樣,它們最終會出現在BSS中,並且在加載ELF時,操作系統會默認將它們初始化為零-這就是BSS的工作方式。 如果動態分配它們,而與使用的方法無關(即malloc,new,posix_memalign,mmap(MAP_POPULATE)是異常),則在觸摸內存時會在OS中引起錯誤。 故障處理總是很昂貴的。 在協處理器上,它的價格相對較高,因為從單線程性能的角度來看,您正在一個很小的內核上運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM