Parallel and distributed computing · Computación paralela y distribuida
Doing work in order
- Most simple programs are sequential: they do one step, then the next, then the next.
- The computer finishes step 1 before it starts step 2.
- This is easy to understand, but it can be slow for big jobs.
Realizar trabajo en orden
- La mayoría de los programas simples son secuenciales: ejecutan un paso, luego el siguiente, luego el siguiente.
- El ordenador termina el paso 1 antes de comenzar el paso 2.
- Esto es fácil de entender, pero puede ser lento para tareas grandes.
Sequential (one worker):
task A -> task B -> task C -> task D
|-------|--------|--------|--------|
total time = A + B + C + D
Parallel computing
- Parallel computing splits work so several parts run at the same time.
- A modern computer has several processors (also called cores) that can each do work.
- If four workers each take one task, four tasks can finish in about the time of one.
Computación paralela
- La computación paralela divide el trabajo para que varias partes se ejecuten al mismo tiempo.
- Un ordenador moderno tiene varios procesadores (también llamados núcleos) que pueden realizar trabajo cada uno.
- Si cuatro trabajadores toman cada uno una tarea, cuatro tareas pueden terminarse en aproximadamente el tiempo que tardaría una sola.
Parallel (four workers at once):
worker 1: task A
worker 2: task B
worker 3: task C
worker 4: task D
|--------|
total time ≈ the longest single task
Speedup
- Speedup asks: how many times faster is the parallel version?
- speedup = (sequential time) / (parallel time).
- Example: a job takes 8 seconds in order, but 2 seconds split up. Speedup = 8 / 2 = 4 times.
Aceleración
- La aceleración pregunta: ¿cuántas veces más rápida es la versión paralela?
- aceleración = (tiempo secuencial) / (tiempo paralelo).
- Ejemplo: un trabajo tarda 8 segundos en secuencia, pero 2 segundos dividido. Aceleración = 8 / 2 = 4 veces.
Not always N times faster
- More processors does not always mean N times faster.
- Some parts of a job cannot be split — they must happen in order.
- Also, splitting work and joining results back together takes some extra time.
No siempre N veces más rápido
- Tener más procesadores no significa siempre N veces más rápido.
- Algunas partes de un trabajo no pueden dividirse — deben ocurrir en orden.
- Además, dividir el trabajo y volver a unir los resultados toma algo de tiempo extra.
Job = setup (must be in order) + main work (can split)
setup main work (split over 4)
|-----| |--------------------------------|
|--------| <- this part gets 4x
The setup part stays the same length.
Distributed computing
- Distributed computing uses many separate computers that cooperate over a network.
- They may sit in different rooms, cities, or countries.
- Examples: the web (many servers), big data jobs split over thousands of machines, and large science projects.
Computación distribuida
- La computación distribuida utiliza muchos ordenadores separados que cooperan a través de una red.
- Pueden estar situados en diferentes habitaciones, ciudades o países.
- Ejemplos: la web (muchos servidores), trabajos de big data divididos entre miles de máquinas y proyectos científicos grandes.
Distributed (computers cooperate over a network):
[computer 1] [computer 2] [computer 3]
\ | /
\ | /
shared network / job
Each computer does part of the work.
Trade-offs
- Good: parallel and distributed systems can be much faster, and can handle huge jobs.
- Harder: the code is more complex; parts must be coordinated; results must be combined.
- Limits: speedup is capped by the parts that cannot be split, and by network delays between computers.
Compromisos
- Bueno: los sistemas paralelos y distribuidos pueden ser mucho más rápidos y manejar trabajos enormes.
- Difícil: el código es más complejo; las partes deben coordinarse; los resultados deben combinarse.
- Límites: la aceleración está limitada por las partes que no pueden dividirse y por los retrasos de red entre ordenadores.
Key words
- Sequential: steps run one after another, in order.
- Parallel: parts run at the same time on several processors.
- Speedup: sequential time divided by parallel time.
- Distributed: many separate computers cooperate over a network.
Palabras clave
- Secuencial: los pasos se ejecutan uno tras otro, en orden.
- Paralelo: las partes se ejecutan al mismo tiempo en varios procesadores.
- Aceleración: tiempo secuencial dividido por tiempo paralelo.
- Distribuido: muchos ordenadores separados cooperan a través de una red.
Common mistakes
- Parallel speed-up only helps work that can be split into independent parts.
- Each extra processor adds less and less speed.
Errores comunes
- La aceleración paralela solo ayuda al trabajo que puede dividirse en partes independientes.
- Cada procesador adicional añade cada vez menos velocidad.
Now you try
- Put the speedup formulas to work as small functions.
- Model a job that is part fixed setup and part splittable work. Press Check answer.
Ahora prueba tú
- Pon a funcionar las fórmulas de aceleración como pequeñas funciones.
- Modela un trabajo que tiene una parte de configuración fija y una parte de trabajo divisible. Pulsa Comprobar respuesta.
A job has a setup part that must run in order, and a splittable part that workers can share at the same time. Write parallel_time(setup, splittable, workers) that returns the total time: the setup, plus the splittable part divided among the workers. Example: parallel_time(2, 8, 4) → 4.0 (2 + 8/4). · Un trabajo tiene una parte setup que debe ejecutarse en orden, y una parte splittable que los workers pueden compartir al mismo tiempo. Escribe parallel_time(setup, splittable, workers) que devuelva el tiempo total: la configuración, más la parte dividida entre los trabajadores. Ejemplo: parallel_time(2, 8, 4) → 4.0 (2 + 8/4).
Click Run to see the output here. · Haz clic en Ejecutar para ver la salida aquí.
Write speedup(sequential, parallel) that returns how many times faster the parallel version is: the sequential time divided by the parallel time. Example: speedup(8, 2) → 4.0. · Escribe speedup(sequential, parallel) que devuelva cuántas veces más rápido es la versión paralela: el tiempo secuencial dividido por el tiempo paralelo. Ejemplo: speedup(8, 2) → 4.0.
Click Run to see the output here. · Haz clic en Ejecutar para ver la salida aquí.
Even with unlimited workers, the setup part still cannot be split. Write max_speedup(setup, splittable) for the best possible speedup: the whole job time divided by the setup time (endless workers shrink the splittable part to almost nothing, leaving only the setup). Example: max_speedup(2, 6) → 4.0 ((2+6)/2). · Incluso con trabajadores ilimitados, la parte de setup aún no se puede dividir. Escribe max_speedup(setup, splittable) para la aceleración mejor posible: el tiempo total del trabajo dividido por el tiempo de configuración (con infinitos trabajadores, la parte divisible se reduce casi a nada, dejando solo la configuración). Ejemplo: max_speedup(2, 6) → 4.0 ((2+6)/2).
Click Run to see the output here. · Haz clic en Ejecutar para ver la salida aquí.