Wie schnell ist die Speicherzuweisung des RPython-GC?

2025-06-15

Dieser Artikel bewertet die Geschwindigkeit der Speicherzuweisung des RPython-Garbage Collectors (GC) mithilfe eines kleinen RPython-Benchmark-Programms. Die Ergebnisse zeigen überraschend schnelle Zuweisungsgeschwindigkeiten von über 34 GB/s, die den Boehm-GC deutlich übertreffen. Die Analyse des generierten Maschinencodes und der Performance-Counter zeigt, dass die Geschwindigkeit des RPython-GC auf seinem effizienten Bump-Pointer-Mechanismus und dem minimalen GC-Overhead beruht. Selbst in normalem Python-Code mit dem PyPy-JIT werden Zuweisungsgeschwindigkeiten von 17 GB/s erreicht.

Mehr lesen
Entwicklung

Beschleunigung des Renderings von Shakespeare-Zitaten-Bildern mit Quadtrees und Intervallanalyse

2025-04-09

Der Autor beteiligte sich an der Prospero-Herausforderung mit dem Ziel, ein 1024x1024-Bild eines Shakespeare-Zitats aus Der Sturm schnell zu rendern, das durch eine mathematische Formel mit 7866 Operationen erzeugt wird. Es wurden verschiedene Optimierungstechniken untersucht, darunter die rekursive Unterteilung des Bildes mit Quadtrees, die Intervallanalyse zur Vereinfachung der Formel und eine "geforderte Information"-Optimierung. In RPython und C implementiert, verglich der Autor die Leistung verschiedener Optimierungsstrategien. Die "geforderte Information"-Optimierung verbesserte die Rendering-Geschwindigkeit deutlich, wobei die endgültige C-Implementierung mit dieser Optimierung die beste Leistung erzielte.

Mehr lesen
Entwicklung Bildrendering Quadtrees

Low-Overhead statistisches Speicherprofiling in PyPy: Integration von VMProf und dem GC

2025-02-25

Dieser Blogbeitrag beschreibt einen neuen Ansatz für Low-Overhead statistisches Speicherprofiling für PyPy. Anstatt jede einzelne Allokation aufzuzeichnen, wird jeder n-te allokierte Byte gesampelt. Die Sampling-Logik wird dabei clever in die Überprüfung des Bump-Pointer-Allokators des Garbage Collectors (GC) von PyPy integriert. Dadurch bleibt der schnelle Pfad mit und ohne Speicher-Sampling identisch, was die Überlastung minimiert. Experimente zeigen eine gute Performance über verschiedene Sampling-Raten hinweg und bieten eine feinere Steuerung und geringere Überlastung für das Speicherprofiling.

Mehr lesen
Entwicklung Speicherprofiling

Tracing JITs in PyPy: Eine pragmatische Wahl?

2025-01-10

Dieser Beitrag untersucht die Vor- und Nachteile von Tracing JIT-Compilern, insbesondere deren Implementierung in PyPy. Tracing JITs, die Code durch das Tracen der Programmausführung generieren, bieten Vorteile bei der Behandlung komplexer Sprachen wie Python, indem sie effektiv Abstraktionsebenen durchschneiden und den Overhead reduzieren. Sie leiden jedoch auch unter Performance-Instabilität und Sonderfällen. Basierend auf zwei Jahrzehnten Erfahrung mit PyPy liefert der Autor eine nuancierte Analyse der Eignung von Tracing JITs und vergleicht sie mit methodenbasierten JITs. Die Schlussfolgerung legt nahe, dass Tracing im Kontext des Meta-JIT von PyPy und angesichts seiner Ressourcenbeschränkungen ein relativ pragmatischer Ansatz bleibt.

Mehr lesen
Entwicklung Tracing JIT