Fragen? Antworten! Siehe auch: Alternativlos
Das ist erstmal per se schon absolut krass. Eine Cacheline ist 32 Bytes. So ein Conditional Jump ist 2 Bytes lang, es gibt auch längere Varianten. Wenn die Instruktion nicht im ICache landet, dann bricht die Performance massiv ein. Es gibt einen Workaround. Intel hat Patches an binutils geschickt, damit die NOPs einbauen (der Nichtstun-Befehl, 1 Byte lang), um die conditional jumps zu verschieben.
Was ist ein conditional jump? Das zentrale Element von if, for und while-Statements. Für die sehr häufig vorkommenden kurzen Schleifen ist das tödlich.
Un-glaub-lich!
Aber was mich ja noch mehr mitnimmt:
Due to that change there will be more misses from the Decoded ICache and switches back to the legacy decode pipeline
Das muss man sich mal auf der Zunge zergehen lassen. Es gibt eine Legacy Decode Pipeline. Hardware ist jetzt schon wie Software, mit Legacy-Müll, den man mit sich rumschleppt.Und wenn so ein zentrales Problem bei so einer zentralen Instruktion auftritt, muss man sich schon fragen, was die Testing-Abteilung da bei Intel eigentlich beruflich macht, und ob man sich die nicht komplett sparen kann.
Update: OK das ist nicht ganz so übel, wie ich das initial verstanden hatte. Der Cache, aus dem das rausfliegt, ist keiner der RAM-Caches. Das liegt also noch im L1-Cache.
Eine moderne x86-CPU dekodiert die Instruktionen in eine interne Repräsentation, und die landet auch in einem Cache, weil man Strom sparen kann, wenn man seltener dekodiert. Und aus dem Cache fliegen die conditional jumps jetzt raus.