1. Introducción
1.1. Motivación
1.2. Objetivo y metodología
1.3. Contribuciones
1.4. Publicaciones
1.5. Organización del documento
2. Marco teórico
2.1. Python
2.1.1. NumPy
2.1.2. PyPy
2.1.3. Threading
2.1.3.1. Limitaciones
2.1.4. Multiprocessing
2.1.5. Numba
2.1.6. Cython
2.2. N-Body
2.2.1. Fundamentos
2.2.2. Algoritmo
2.3. Estado del arte
2.4. Resumen
3. Optimización de N-Body usando CPython y PyPy
3.1. Implementaciones
3.1.1. Implementación Naive
3.1.2. Integración de NumPy
3.1.3. Broadcasting
3.1.4. Localidad de datos
3.1.5. Multi-hilado
3.2. Resultados experimentales
3.2.1. Diseño experimental
3.2.2. Rendimiento
3.3. Resumen
4. Optimización de N-Body usando Numba
4.1. Implementaciones
4.1.1. Implementación Naive
4.1.2. Integración de Numba
4.1.3. Multi-hilado
4.1.4. Arreglos con tipos de datos simples
4.1.5. Operaciones matemáticas
4.1.6. Vectorización
4.1.7. Localidad de datos
4.1.8. Threading layer
4.2. Resultados experimentales
4.2.1. Diseño experimental
4.2.2. Rendimiento
4.3. Resumen
5. Optimización de N-Body usando Cython
5.1. Implementaciones
5.1.1. Implementación Naive
5.1.2. Integración de Cython
5.1.3. Tipado explícito
5.1.4. Multi-hilado
5.1.5. Operaciones matemáticas
5.1.6. Localidad de datos
5.2. Resultados experimentales
5.2.1. Diseño experimental
5.2.2. Rendimiento
5.3. Resumen
6. Comparación de prestaciones de traductores de Python
6.1. Rendimiento
6.1.1. Diseño experimental
6.1.2. Comparación
6.2. Esfuerzo de programación
6.2.1. Diseño experimental
6.2.2. Comparación
6.3. Resumen
7. Conclusiones y trabajos futuros