¿Qué tan rápida es la asignación del GC de RPython?

2025-06-15

Este artículo evalúa la velocidad de asignación del recolector de basura (GC) de RPython utilizando un pequeño programa de referencia de RPython. Los resultados muestran velocidades de asignación sorprendentemente rápidas, superiores a 34 GB/s, superando significativamente al GC de Boehm. El análisis del código de máquina generado y los contadores de rendimiento revela que la velocidad del GC de RPython se debe a su eficiente mecanismo de puntero de incremento y a la mínima sobrecarga del GC. Incluso en código Python regular con el JIT de PyPy, las velocidades de asignación alcanzan los 17 GB/s.

Leer más
Desarrollo

Acelerando el renderizado de imágenes de citas de Shakespeare con Quadtrees y análisis de intervalos

2025-04-09

El autor participó en el Desafío Prospero, con el objetivo de renderizar rápidamente una imagen de 1024x1024 de una cita de Shakespeare de La Tempestad, generada por una fórmula matemática con 7866 operaciones. Se exploraron diversas técnicas de optimización, incluyendo la subdivisión recursiva de cuadratura de la imagen, el análisis de intervalos para simplificar la fórmula y una optimización de "información demandada". Implementado en RPython y C, el autor comparó el rendimiento de diferentes estrategias de optimización. La optimización de "información demandada" mejoró significativamente la velocidad de renderizado, y la implementación final en C que incorporó esta optimización logró el mejor rendimiento.

Leer más

Perfilado de memoria estadística de baja sobrecarga en PyPy: integrando VMProf y el GC

2025-02-25

Esta entrada de blog describe un nuevo enfoque para el perfilado estadístico de memoria de baja sobrecarga para PyPy. En lugar de registrar cada asignación, muestrea cada n-ésimo byte asignado, integrando inteligentemente la lógica de muestreo en la verificación del asignador de puntero de colisión del recolector de basura (GC) de PyPy. Esto asegura que la ruta rápida permanece idéntica con y sin muestreo de memoria, minimizando la sobrecarga. Los experimentos demuestran un buen rendimiento en varias tasas de muestreo, ofreciendo un control más preciso y una menor sobrecarga para el perfilado de memoria.

Leer más

JITs de Trazado en PyPy: ¿Una Elección Pragmática?

2025-01-10

Esta publicación analiza las ventajas y desventajas de los compiladores JIT de trazado, centrándose específicamente en su implementación en PyPy. Los JITs de trazado, que generan código mediante el seguimiento de la ejecución del programa, ofrecen ventajas al manejar lenguajes complejos como Python, cortando eficazmente las capas de abstracción y reduciendo la sobrecarga. Sin embargo, también sufren de inestabilidad de rendimiento y casos límite. Basándose en dos décadas de experiencia con PyPy, el autor proporciona un análisis matizado de la idoneidad de los JITs de trazado, comparándolos con los JITs basados en métodos. La conclusión sugiere que, en el contexto del meta-JIT de PyPy y dadas sus limitaciones de recursos, el trazado sigue siendo un enfoque relativamente pragmático.

Leer más
Desarrollo JIT de trazado