Etiquetar 800 libros entre cuatro personas
La computación paralela consiste en repartir un trabajo entre varios trabajadores que lo hacen a la vez. Sirve para acabar antes, pero la ganancia tiene un límite que conviene calcular antes de comprar más máquinas.
Una biblioteca universitaria debe etiquetar 800 libros. Una persona tarda 80 minutos. Cuatro personas, con 200 libros cada una, tardan 20.
En este laboratorio no hay GPU. Enseña el modelo sobre el que se construye una GPU, y el lanzamiento de un kernel se simula en Python. No se mide ningún tiempo.
Al final de esta lección
Nota
Puedo estimar cuánto se acelera un trabajo cuando lo hacen más trabajadores.
Palabras clave
| Palabra | Qué significa |
|---|---|
| Paralelo | varias partes de un trabajo hechas a la vez |
| Trabajador | un proceso o hilo que hace una parte del trabajo |
| Parte en serie | la parte que no se puede repartir y va en orden |
| Aceleración | cuántas veces más rápido que con un trabajador |
| Techo | la aceleración máxima, por muchos trabajadores que haya |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Repartir acorta el trabajo, pero no del todo
Imagina que el trabajo de las etiquetas tarda 100 minutos con una sola persona. De ellos, 20 son para escribir la lista de libros, y eso solo lo puede hacer una persona.
Los otros 80 minutos sí se reparten. Esa parte repartible baja al aumentar los trabajadores. La parte de 20 minutos no baja nunca.
Ejemplo: el tiempo con más trabajadores
| Trabajadores | Parte en serie | Parte repartida | Tiempo total | Aceleración |
|---|---|---|---|---|
| 1 | 20 min | 80 min | 100 min | 1 |
| 2 | 20 min | 40 min | 60 min | 1,67 |
| 4 | 20 min | 20 min | 40 min | 2,5 |
| 8 | 20 min | 10 min | 30 min | 3,33 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Amdahl: la parte en serie manda
La aceleración es el tiempo con un trabajador dividido entre el tiempo con varios. En la tabla, con 8 trabajadores es 100 entre 30.
Llama s a la fracción del trabajo que va en serie. Con n trabajadores, la aceleración es 1 entre (s más (1 menos s) entre n). Con infinitos trabajadores solo queda el tiempo en serie. El techo es entonces 1 entre s: con s igual a 0,20, vale 5.
Calcular la aceleración con Python
# Un trabajo de 100 minutos. Una parte fija no se puede repartir.
parte_serie = 0.20
for trabajadores in [1, 2, 4, 8, 16]:
aceleracion = 1 / (parte_serie + (1 - parte_serie) / trabajadores)
print(trabajadores, "trabajadores: aceleración", round(aceleracion, 2))
# Cambia 0.20 por 0.50 y vuelve a ejecutar: ¿cuánto sube el techo?
Qué imprime el script del laboratorio
El laboratorio trae steps/amdahl.py, que calcula esta misma tabla para tres partes en serie: 10, 25 y 50 por ciento. Con 1, 2, 4 y 8 trabajadores. No mide tiempos, así que imprime lo mismo cada vez.
Las palabras que imprime están en inglés, como percent y workers. Solo importan los números de cada fila. El script no se modifica en esta lección.
Ver la tabla de aceleraciones
docker exec jupyter python3 steps/amdahl.pySe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Cómo leer cada fila de la tabla
Cada fila empieza con la parte en serie. Después viene una lista con cuatro números: la aceleración con 1, 2, 4 y 8 trabajadores. La primera siempre es 1.
La última línea dice el techo del 10 por ciento: 10,0. Compáralo con la tabla de arriba, donde el techo del 20 por ciento era 5.
Un error muy común
Advertencia
Mucha gente cree que con 8 trabajadores el trabajo va 8 veces más rápido. Solo ocurre si nada se hace en serie. Casi siempre queda una parte que va en orden, y esa parte marca el techo. Antes de añadir trabajadores, pregunta qué parte no se puede repartir.
Por qué el código está en inglés
Nota
Los nombres de variables y funciones del código van en inglés, como en casi todos los programas del mundo. Los comentarios y lo que imprime el programa van en español.