[英]How can I prefetch a memory region most easily?
背景:我實現了一種隨機算法,該算法需要隨機排序以實現最佳收斂。 但是,這樣做顯然會破壞內存局部性。 我發現通過預取下一個迭代的數據,可以將性能下降降至最低。
我可以使用_mm_prefetch
以一種簡單的方式(主要是OS +編譯器可移植的方式)預取n條緩存行-但是緩存行的長度是多少? 現在,我正在使用64的硬編碼值,這在當今的x64處理器上似乎很正常-但是我不知道如何在運行時檢測到這一點,去年的一個問題沒有找到簡單的解決方案 。
我已經在Windows上看到了GetLogicalProcessorInformation ,但是我對使用如此復雜的API 來做這么簡單的事情並不滿意,無論如何在Mac或Linux上都無法使用。
也許還有其他一些API / intrinsic可以預取以字節(或字或其他形式)標識的內存區域,並允許我在不知道緩存行長的情況下進行預取?
基本上,是有一個合理的替代_mm_prefetch
用#define CACHE_LINE_LEN 64
?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.