Quelle est la vitesse d'allocation du GC RPython ?

2025-06-15

Cet article évalue la vitesse d'allocation du garbage collector (GC) de RPython à l'aide d'un petit programme de référence RPython. Les résultats montrent des vitesses d'allocation étonnamment rapides, supérieures à 34 Go/s, surpassant largement le GC de Boehm. L'analyse du code machine généré et des compteurs de performance révèle que la vitesse du GC de RPython provient de son mécanisme efficace de pointeur d'accroissement et de sa surcharge minimale du GC. Même dans du code Python ordinaire avec le JIT de PyPy, les vitesses d'allocation atteignent 17 Go/s.

Lire plus
Développement

Accélération du rendu d'images de citations de Shakespeare avec Quadtrees et analyse d'intervalles

2025-04-09

L'auteur a participé au défi Prospero, visant à rendre rapidement une image 1024x1024 d'une citation de Shakespeare de La Tempête, générée par une formule mathématique comportant 7866 opérations. Plusieurs techniques d'optimisation ont été explorées, notamment la subdivision récursive en quadtrees de l'image, l'analyse d'intervalles pour simplifier la formule et une optimisation d'« informations demandées ». Implémentée en RPython et en C, l'auteur a comparé les performances des différentes stratégies d'optimisation. L'optimisation d'« informations demandées » a considérablement amélioré la vitesse de rendu, l'implémentation finale en C intégrant cette optimisation ayant obtenu les meilleures performances.

Lire plus
Développement rendu d'images

Profilage mémoire statistique à faible surcharge dans PyPy : intégration de VMProf et du GC

2025-02-25

Cet article de blog décrit une nouvelle approche du profilage mémoire statistique à faible surcharge pour PyPy. Au lieu d'enregistrer chaque allocation, il échantillonne chaque n-ième octet alloué, intégrant intelligemment la logique d'échantillonnage dans la vérification de l'allocateur de pointeur de collision du garbage collector (GC) de PyPy. Cela garantit que le chemin rapide reste identique avec et sans échantillonnage mémoire, minimisant la surcharge. Des expériences démontrent de bonnes performances pour différents taux d'échantillonnage, offrant un contrôle plus précis et une surcharge moindre pour le profilage mémoire.

Lire plus

JITs de Traçage dans PyPy : Un Choix Pragmatique ?

2025-01-10

Cet article explore les avantages et les inconvénients des compilateurs JIT de traçage, en se concentrant plus particulièrement sur leur implémentation dans PyPy. Les JITs de traçage, qui génèrent du code en suivant l'exécution du programme, offrent des avantages lorsqu'il s'agit de gérer des langages complexes comme Python, en coupant efficacement les couches d'abstraction et en réduisant la surcharge. Cependant, ils souffrent également d'instabilité des performances et de cas limites. Sur la base de deux décennies d'expérience avec PyPy, l'auteur fournit une analyse nuancée de l'adéquation des JITs de traçage, en les comparant aux JITs basés sur les méthodes. La conclusion suggère que, dans le contexte du méta-JIT de PyPy et compte tenu de ses contraintes de ressources, le traçage reste une approche relativement pragmatique.

Lire plus
Développement JIT de traçage