Se dice que el software exhibe un paralelismo escalable si puede hacer uso de procesadores adicionales para resolver problemas más grandes, es decir, este término se refiere al software para el que se cumple la ley de Gustafson . Considere un programa cuyo tiempo de ejecución está dominado por uno o más bucles, cada uno de los cuales actualiza cada elemento de una matriz, por ejemplo, el siguiente cálculo de plantilla de ecuación de calor en diferencias finitas :
para t: = 0 a T hacer para i: = 1 a N-1 hacer nuevo (i): = (A (i-1) + A (i) + A (i) + A (i + 1)) * .25 // diferencia directa explícita con R = 0.25 final para i: = 1 a N-1 hacer A (i): = nuevo (i) fin fin
En el código anterior, podemos ejecutar todas las iteraciones de cada ciclo "i" al mismo tiempo, es decir, convertir cada uno en un ciclo paralelo . En tales casos, a menudo es posible hacer un uso efectivo del doble de procesadores para un problema de tamaño de matriz 2N que para un problema de tamaño de matriz N. Como en este ejemplo, el paralelismo escalable es típicamente una forma de paralelismo de datos . Esta forma de paralelismo es a menudo el objetivo de la paralelización automática de bucles .
Los sistemas informáticos distribuidos y las arquitecturas de acceso a memoria no uniformes suelen ser los más fáciles de escalar a una gran cantidad de procesadores y, por lo tanto, parecerían un objetivo natural para el software que exhibe un paralelismo escalable. Sin embargo, las aplicaciones con paralelismo escalable pueden no tener un paralelismo de grano suficientemente grueso para ejecutarse de manera efectiva en tales sistemas (a menos que el software sea vergonzosamente paralelo ). En nuestro ejemplo anterior, el segundo ciclo "i" es vergonzosamente paralelo, pero en el primer ciclo cada iteración requiere resultados producidos en varias iteraciones anteriores. Por lo tanto, para el primer ciclo, la paralelización puede implicar una extensa comunicación o sincronización entre procesadores y, por lo tanto, solo dará como resultado una aceleración neta si tales interacciones tienen una sobrecarga muy baja o si el código se puede transformar para resolver este problema (es decir, mediante escalabilidad combinada localización / optimización del paralelismo escalable [1] ).
Idiomas
- Ateji PX, una extensión de Java que hace posible el paralelismo escalable en la máquina virtual Java (JVM)
- BMDFM binario modular DataFlow Máquina
- SequenceL es un lenguaje de programación funcional de propósito general, cuyos principales objetivos de diseño son el rendimiento en hardware multinúcleo, la facilidad de programación y la claridad / legibilidad del código.
Referencias
- ^ Wonnacott, D. (2000). "Uso de sesgo de tiempo para eliminar el tiempo de inactividad debido al ancho de banda de la memoria y las limitaciones de la red" Actas XIV Simposio internacional de procesamiento paralelo y distribuido. IPDPS 2000 . págs. 171–180. doi : 10.1109 / IPDPS.2000.845979 . ISBN 978-0-7695-0574-9.