¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Computación paralela y aceleración

Después de esta lección: Puedo estimar cuánto se acelera un trabajo cuando lo hacen más trabajadores.

Lección de 50 min1 comandoLaboratorio de computación paralela: cómo piensa una GPU, sin GPU, en JupyterLab

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

PalabraQué significa
Paralelovarias partes de un trabajo hechas a la vez
Trabajadorun proceso o hilo que hace una parte del trabajo
Parte en seriela parte que no se puede repartir y va en orden
Aceleracióncuántas veces más rápido que con un trabajador
Techola 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

TrabajadoresParte en serieParte repartidaTiempo totalAceleración
120 min80 min100 min1
220 min40 min60 min1,67
420 min20 min40 min2,5
820 min10 min30 min3,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

Código: 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

Comando
docker exec jupyter python3 steps/amdahl.py

Se 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.

Sobre este laboratorio y su código: Laboratorio de computación paralela: cómo piensa una GPU, sin GPU, en JupyterLab

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.