一文解決Memory的channel,chip,bank。如何優化記憶體訪問?
阿新 • • 發佈:2018-12-31
這篇文章寫的很清楚。
我們配電腦的時候經常會聽到雙通道,一個通道就是一個channel
一個channel下可以放不同的rank就是記憶體條。
記憶體條上的小方塊就是chip
chip內部就有好多bank
bank下就是儲存單元了。
都是根據電路來訪問,所以記憶體條突破了磁碟柱面的那種旋轉的瓶頸。可以根據訊號直接訪問相應某個bank的某個行列裡面的值。快快快~~~~
bank的寫入操作。
雙通道加速原理?
與指令流水線的思路一摸一樣
優化記憶體訪問
for(int i=0;i<N;i++)
read(fd,buf+i,128);
for(int i=0;i<N;i++)
memcpy(addr1+i,addr2+i,128);
就拿上面這兩個函式來說。
這種for迴圈的讀取,就無法滿足流水線的
取址,譯碼,執行
因為執行這個階段,大概率一直在讀取同一個bank,這時就會出現問題,一個bank的地址解碼器只有一個,一直被佔用的
我們無法流水地執行。即使我們有多核多執行緒的CPU,效能還是卡在了讀取同一個bank的資料這裡,還是變成了單核單執行緒的效果。
所以,如果迴圈次數不大,最好可以插入幾個其他的指令過來。
但是具體量化插入什麼指令,插入多少指令。還是要精確計算,根據我們瞭解的CPU主頻,指令的ARM/MIPS/X86?
最好迴歸到彙編去量化。
所以說程式碼優化需要非常豐富和準確的知識。。。