Ich bin nur eine Weile laufen 1 Schleife und Messung Cache-Miss.Cache fehlt in einer Endlosschleife ohne Speicherreferenzen?
int main() {
while(1);
}
Dieses spezielle Verfahren ist auf eine CPU-gebunden (mit taskset) und diese CPU isoliert ist, kann kein anderer Prozess bedeutet, auf der gleichen CPU geplant erhalten. Jetzt beginne ich mit der Messung der Cache-Performance unter Verwendung von perf
und zu meiner Überraschung ist der letzte Level-Cache-Verlust 42%.
22,579 cache-references (20.82%)
8,976 **cache-misses # 39.754 %** of all cache refs (20.83%)
4,414 **LLC-load-misses # 42.74%** of all LL-cache hits
Ich bin überrascht und ich erwarte Null-Cache-Miss, da ich keine Speicheroperation mache. Irgendwelche Hilfe/Gedanken dazu. CPU: Modellname: Intel (R) Xeon (R) CPU E5-2670 v3 @ 2.30GHz
Ein anderes Experiment, das ich mit einem Nano-Schlaf von .1 Millisekunden und Cache-Miss auf weniger als 1% reduziert. Ich habe keine Ahnung was los ist.
Bedeutungsloser Code in, bedeutungslos ergibt sich. –
Ich habe Gründe, dies zu tun. Ich versuche Cache-Probleme in einem großen Stück Code zu isolieren und schließlich stellt sich heraus, dass mein Code eine enge Schleife ist. Jetzt sehe ich, dass es einen Sprung im Cache-Miss gibt. Also entschied ich mich, eine einfache while-Schleife auszuprobieren und das Ergebnis überraschte mich. – deadbeef
# 1: Sie können besser verstehen, was passiert, indem Sie den Asm-Code kompilieren. # 2 Ihr Beispiel ist wahrscheinlich zu einfach - Es wird nur auf eine Handvoll von Befehlen kompiliert, die nicht einmal * den Cache benutzen müssen - die Verzweigungsvorhersage wird immer * wissen *, was als nächstes zu tun ist, ohne auf irgendeinen Speicher zugreifen zu müssen. – tofro