比方說,我有它的實現看起來是這樣的一個C++類:減少指令高速緩存未命中(在C++)
// ...
MyClass::iterativeFunction() {
for (int i = 0; i < 1000000; i++) {
performAction(i);
}
}
MyClass::performAction(int index) {
// Block of code (non-inline-able)
}
// ...
在C++水平,我必須在這些方法的空間局部性的任何控制,還是我只希望編譯器能夠注意到相關的方法並相應地優化其組裝?理想情況下,我希望它們彼此相鄰,這樣它們將一起加載到指令緩存中,但我不知道如何讓編譯器知道我真的很希望發生這種情況。
「我希望它們彼此相鄰,這樣它們將一起加載到指令緩存中。」這不是現代CPU的指令緩存的工作原理。它不會僅僅因爲它恰好接近其他代碼而提取代碼。它會提取代碼,因爲該代碼被調用。 –
將inline/_forceinline/__ pleasepleaseinline標記爲「performAction」? – James
隨着整個程序的優化,編譯器很可能會發現'MyClass :: performAction'的唯一調用者是'iterativeFunction',並且仍然內聯它。只有一個調用者的函數的內聯閾值要低得多。 – MSalters