讓我們說我有一個二維數組,我可以從文件優化佈局
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
閱讀我期待它們存儲爲一維數組ARR [16]。
我知道行方向和列明智的存儲空間。
這會擾亂數組的結構。假設我想用2X2濾波器進行卷積。然後在conv(1,1)處,我將訪問位置1,2,5,6處的內存。
相反,我可以優化數據的存儲在一個圖案,使得1,2,5,6-存儲彼此相鄰而不是位於遠離元素?
這可以減少內存延遲問題。
讓我們說我有一個二維數組,我可以從文件優化佈局
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
閱讀我期待它們存儲爲一維數組ARR [16]。
我知道行方向和列明智的存儲空間。
這會擾亂數組的結構。假設我想用2X2濾波器進行卷積。然後在conv(1,1)處,我將訪問位置1,2,5,6處的內存。
相反,我可以優化數據的存儲在一個圖案,使得1,2,5,6-存儲彼此相鄰而不是位於遠離元素?
這可以減少內存延遲問題。
這取決於你的處理器,但假設你有一個64字節的典型英特爾高速緩存行大小,那麼選擇每個64字節大小的方形子區域就像是一個明智之舉。
如果您的個人元素是一個字節每8×8,然後讓子瓦感。所以,例如
#define index(x, y) (x&7) | ((y&7) << 3) | \
((x&~7) << 6) | ((y&~7) ... shifted and/or multiplied as per size of x)
因此,在每個完整的瓦片:
因此,平均每個輸出像素觸及1.265625個緩存行,而天真情況下平均觸及2.03125個緩存行。
我發現我一直在尋找。我正在尋找一種稱爲Morten排序的數組,該數組已顯示可減少存儲器訪問時間。另一種方法是使用顯示比Morten排序方法更有效的希爾伯特曲線方法。
我附上一個鏈接到一篇文章,解釋這個
如果我不知道過濾器的大小,請問有什麼可以繼續嗎?我想優化佈局本身,這樣的數據相互靠近的矩陣在內存中也很接近。我想知道是否可以使用像希爾伯特曲線佈局這樣的技術。 – Adi279