Ley de Amdahl¶
Vamos a asumir que los programas tienen:
- Parte secuencial que no se puede paralelizar: \(f\)
- Parte paralelizable que corresponde a: \(1-f\)
De acuerdo a esto, la aceleración, que es el número de veces que puedo resolver el algoritmo frente a su versión secuencial, está dada por:
Donde \(P\) es el número de tareas paralelas.
Ejemplos¶
Ejemplo 1: Si \(P = 50\), \(f = 0.5\) entonces:
Esto nos dice que el programa teóricamente se acelera 1.96 veces haciéndolo paralelo en lugar de su versión totalmente secuencial.
Ejemplo 2: \(P = 200\), \(f = 0.2\):
Que el programa se va a acelerar 4.9 veces con respecto a su versión secuencial.
Paralelismo ilimitado¶
¿Qué pasa si hay paralelismo ilimitado? \(P \rightarrow \infty\)
Para el primer caso:
Para el segundo caso:
Análisis crítico¶
¿Qué es lo más importante? ¿El número de hilos o la fracción que puedo paralelizar?
Es determinante la parte que puedo paralelizar. Esto quiere decir que no importa la capacidad que tenga si no puedo paralelizar una parte importante de mi algoritmo. Idealmente debería poder paralelizar todo el algoritmo.
Además hay que tener en cuenta:
- Los procesos que tiene el lenguaje, por ejemplo en Java el recolector de basura
- La gestión de hilos requiere tiempo, es decir agrega latencia
- Tenemos paralelismo limitado, dependemos también de la carga que tenga el S.O. cuando estamos ejecutando el algoritmo.
Tabla de Resumen de Conceptos¶
| Concepto | Definición | Fórmula/Valor | Importancia |
|---|---|---|---|
| Ley de Amdahl | Ley que modela la aceleración máxima de un programa al paralelizarlo | \(\frac{1}{f + \frac{1-f}{P}}\) | Fundamental para análisis de paralelismo |
| Parte secuencial (\(f\)) | Fracción del programa que no se puede paralelizar | \(0 \leq f \leq 1\) | Factor limitante principal |
| Parte paralelizable (\(1-f\)) | Fracción del programa que se puede ejecutar en paralelo | \(1-f\) | Determina el potencial de aceleración |
| Número de tareas paralelas (\(P\)) | Cantidad de procesadores/hilos disponibles | \(P \geq 1\) | Factor secundario de aceleración |
| Aceleración | Mejora en velocidad respecto a versión secuencial | \(\frac{T_{secuencial}}{T_{paralelo}}\) | Métrica de eficiencia |
| Paralelismo ilimitado | Caso teórico con infinitos procesadores | \(\lim_{P \to \infty} \frac{1}{f + \frac{1-f}{P}} = \frac{1}{f}\) | Límite máximo de aceleración |
| Factores prácticos limitantes | Elementos que reducen la aceleración real | Gestión de hilos, SO, GC | Consideraciones importantes en implementación |
Conceptos importantes destacados: - Ley de Amdahl - Parte secuencial (\(f\)) - Parte paralelizable (\(1-f\)) - Aceleración máxima - Paralelismo ilimitado - Factor limitante principal - Consideraciones prácticas
Observación clave: La fracción secuencial (\(f\)) es el factor más determinante en la aceleración, más que el número de procesadores disponibles. Incluso con paralelismo infinito, la aceleración máxima está limitada por \(\frac{1}{f}\).