Como vamos¶
- Paralelización: Dividir una tarea en partes que se puedan ejecutar al tiempo, de tal forma podamos obtener una ganancia de tiempo (span)
- ¿Como paralelizar? Map-reduce, fork-join, pipelines
- Consideraciones de la parelización: tareas deben ser independientes y asociativas, no importa el orden en que se hagan el resultado no cambia, si importa el orden synchronized (orden a los hilos)
- Librerias para parelización
- C++: lpthread, TBB y openMP
- Python: thread (hilos), multiprocessing para procesos
- Diferencia hilo: unidad unica de ejecución, proceso: entidad que puede contener uno más hilos los cuales se ejecutan en un espacio de memoria independiente
- Hilos estamos la misma CPU (limitación) y concurrencia no es real, si no que se aprovechan los momentos de tiempo idle de la CPU y la memoria es compartida
- Procesos: podemos estar en diferentes CPU, el reto es sincronizar los datos: Array, Value, Queue, Pipe, Manager
- Profiling:
- Perfiladores de tiempo: C++ chrone, Python: time, timeit
- Perfiladores deterministas de recursos: CProfile (Python) pero agregan overhead
- Perfiladores estadisticos trabajan a través de muestra Pyinstrument
Temas¶
Como podemos perfilar programas que ya están en en ejecución usando herramientas del sistema operativo.