「__builtin_prefetch:解密其讀取範圍」
「__builtin_prefetch」是C/C 編譯器內部函數,用來指示編譯器內部函數,用來指示編譯器預先載入資料到快取中,從而減少存取該資料的延遲。然而,它的確切行為,特別是在預取結構內容方面,可能會令人困惑。
有關「__builtin_prefetch」提供的文件指出它預取行緩存,但該行緩存的大小可以因處理器而異。在預取整個結構的情況下,「__builtin_prefetch」通常只會預取結構的前幾個快取行。
例如,讓我們考慮給定程式碼中的循環:
for (int i = from; i < to; i++) { particle* from = con[i].Pfrom; particle* to = con[i].Pto; // Assume particle has 8 double values }
在此循環中,「__builtin_prefetch (con[i].Pfrom)」只會預取粒子結構的前8 個雙精度值。如果粒子結構包含超過 8 個雙精度值,則不會預取剩餘的值。
要預取其他值,可以使用多個「__builtin_prefetch」內在函數。例如,「__builtin_prefetch (con[i 3].Pfrom)」將預取位於 con[i 3].Pfrom 的粒子結構的前 8 個雙精度數。
但是,使用「__builtin_prefetch」非常重要明智地。過度使用實際上會降低效能。建議衡量「__builtin_prefetch」對程式碼的影響,並且僅在可提供顯著優勢的情況下使用它。
現代處理器和編譯器已顯著改進了快取處理。結果,「__builtin_prefetch」的有效性降低了。但是,它在某些情況下仍然有用,特別是對於複雜的資料結構或以可預測模式存取的大型陣列。始終建議使用基準來確定“__builtin_prefetch”是否值得。
以上是“__builtin_prefetch”實際載入了多少資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!