矩陣大小對轉置性能的影響
您觀察到的現象(與 513x513 矩陣相比,512x512矩陣的轉置速度較慢)歸因於快取
快取結構和存取
快取是一種記憶體結構,它透過將頻繁存取的資料儲存在靠近處理器的位置來幫助提高記憶體密集型任務的效能。它被組織成集合,其中包含許多保存資料的行。每個快取行的大小為幾個字節,一個快取集可以包含多行。
存取記憶體位址時,快取會檢查該位址的資料是否存在於其記憶體中的任何行中。對應的集合。如果是,則發生快取命中並快速檢索資料。如果不是,則會發生快取未命中,並且必須從主記憶體中獲取數據,這要慢得多。
關鍵步幅與快取未命中
使用時在矩陣中,關鍵步幅是以連續模式存取的元素之間的距離。在您的情況下,關鍵步幅是矩陣單行中元素之間的距離。如果步幅與快取行大小相符或是其倍數,則可能會導致快取未命中和效能下降。
矩陣轉置和關鍵步幅
在您的矩陣轉置代碼,您正在沿對角線交換元素。對於 512x512 矩陣,每行中的元素以 512 位元組的跨度訪問,這等於快取行大小。這會導致大量快取未命中並降低效能。
為什麼 513x513 更快
對於 513x513 矩陣,關鍵步幅不再是快取行大小。每行中的元素以 513 位元組的跨度進行訪問,這確保它們落入不同的快取行。這減少了緩存未命中的數量並提高了效能。
實際影響
了解關鍵步幅對快取的影響對於優化記憶體密集型任務至關重要。在您的情況下,調整矩陣的大小以避免多次關鍵步幅可以顯著提高轉置效能。
以上是為什麼轉置 513x513 矩陣比 512x512 矩陣快?的詳細內容。更多資訊請關注PHP中文網其他相關文章!