Wie moderne CPUs Bytecode-Interpreter-Schleifen effizient vorhersagen

2025-07-05

Bei der Untersuchung der Leistung eines neuen Python-Interpreters stellte der Autor fest, dass moderne CPUs indirekte Sprünge in Bytecode-Interpreter-Schleifen effizient vorhersagen können. Dies wird durch fortschrittliche Branch Predictors wie TAGE und ITTAGE erreicht. Diese Predictors bilden den Programmzähler (PC) und seinen Verlauf auf das vergangene Ausführungsverhalten ab und verwenden mehrere Tabellen mit geometrisch ansteigenden Verlaufslängen, um dynamisch die beste Vorhersage auszuwählen. Der Autor untersucht die Anwendung der Prinzipien von ITTAGE auf das coverage-guided Fuzzing und die Programmzustanderkundung und legt nahe, dass dies zu einem besseren Verständnis und zur besseren Erkundung von Interpretern und ähnlichen Programmen führen könnte.

Mehr lesen

CPython-Performanceverbesserung: Eine Geschichte unerwarteter Wendungen und LLVM-Regressionen

2025-03-10

Eine kürzlich erfolgte CPython-Zusammenführung führte eine neue Implementierung des Bytecode-Interpreters ein, die anfänglich beeindruckende Performance-Verbesserungen von 10 bis 15 % in verschiedenen Benchmarks zeigte. Diese Verbesserung resultierte jedoch aus der unbeabsichtigten Umgehung einer Regression in LLVM 19. Im Vergleich zu einer besseren Baseline (wie GCC oder optimiertem LLVM 19) reduziert sich der tatsächliche Performance-Gewinn auf nur 1 bis 5 %. Wochenlange Kompilierung, Benchmarking und Disassemblierung zeigten, dass die Einschränkungen von LLVM 19 bei der Tail-Call-Duplizierung die Regression verursachten. Obwohl der Tail-Call-Interpreter eine wertvolle Verbesserung darstellt, hebt dieser Vorfall die Herausforderungen beim Benchmarking, der Performance-Engineering und der Software-Entwicklung hervor, wie z. B. die Schwierigkeit bei der Auswahl von Baslines und das Verständnis der Komplexität von Compiler-Optimierungen.

Mehr lesen
Entwicklung