矩陣轉置中的表現異常:512x512 與513x513
處理不同大小的方陣時會出現某些表現模式,從而導致有趣的結果現象:轉置維度為2^n 的矩陣與維度為2^n 1 的矩陣(例如513x513)相比,(例如 512x512)始終表現出較慢的執行時間。
深入研究機制
效能源自於資料存取模式與快取功能之間的複雜交互作用。具體來說,快取被組織成集合和行:
資料位址使用以下方式對應到特定集合一個公式。重疊的位址範圍可能會導致對設定佔用的爭用,從而導致快取未命中。
關鍵步幅
這個等式中的一個關鍵因素是“關鍵步幅”,它測量有效競爭快取行的記憶體位置之間的距離。當資料元素以等於關鍵步長的間隔儲存時,會觸發稱為「假別名」或「人工步長」的快取衝突。
512x512 僵局
一個512x512的矩陣,每組佔用4行,行大小為64位元組的緩存,遇到這個陷阱。此配置的關鍵步長是 2048 位元組(4 行 * 64 位元組),與矩陣中的每第四行對齊。
在轉置期間,存取列中的連續元素會導致第一個操作中的快取行被驅逐。因此,後續行中關鍵跨步間隔的元素會遭受快取未命中,從而降低效能。
513x513 Escape
相反,513x513 的矩陣,一個奇怪的維度,擾亂了關鍵的一步。元素不再以關鍵步幅間隔排列,降低了快取衝突的風險。這會提高轉置期間的效能。
結論
與 2^n 1 維度相比,2^n 維度的矩陣轉置速度較慢的現像源自於快取特性。了解關鍵的一步以及資料對齊對快取利用率的影響對於優化程式碼執行時間至關重要。
以上是為什麼 512x512 矩陣的矩陣轉置比 513x513 矩陣慢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!