En su famoso artículo de The Free Lunch Is Over de 2005, Herb Sutter predijo una revolución de programación concurrente tan grande como la revolución orientada a objetos. ¿Ha sucedido realmente esta revolución en los años 2005 - 2013?
Puntos clave en el artículo:
Los fabricantes de procesadores se han quedado sin espacio con la mayoría de sus enfoques tradicionales para aumentar el rendimiento de la CPU. En lugar de conducir velocidades de reloj cada vez más altas, en su lugar están recurriendo a arquitecturas multihilo y de hipertronteo.
Cada vez más, las aplicaciones deberán ser concurrentes si quieren explotar por completo las ganancias de rendimiento de la CPU.
"Oh, el rendimiento no importa tanto, las computadoras simplemente se vuelven cada vez más rápidas", la afirmación será incorrecta.
La eficiencia y la optimización del rendimiento serán cada vez más importantes. Los lenguajes que ya se prestan a una fuerte optimización encontrarán una nueva vida; aquellos que no necesitan encontrar formas de competir y ser más eficientes y optimizables. Espere una mayor demanda a largo plazo de lenguajes y sistemas orientados al rendimiento.
Los lenguajes y sistemas de programación se verán cada vez más obligados a lidiar bien con la concurrencia. Necesitamos desesperadamente un modelo de programación de nivel superior para la concurrencia que los lenguajes ofrecen hoy.
fuente
Respuestas:
Sí, pero depende
No se puede esperar para escribir no trivial , de alto rendimiento de software sin tanto aprovechando el hardware paralelo y el uso de concurrencia como una técnica de estructuración del programa. Pero la mayoría del software es trivial y no crítico para el rendimiento. Una aplicación web no está haciendo muchos cálculos numéricos, y las aplicaciones CRUD no tienen nada como los límites de tiempo difíciles de algunos software de simulación y médicos.
Los desarrolladores de juegos en particular deben preocuparse por esto, porque los juegos son el tipo de aplicación más común con requisitos suaves en tiempo real. El problema es importante en un teléfono móvil, donde desea exprimir la mayor cantidad de potencia de procesamiento y procesamiento posible de un chip integrado con dos núcleos de CPU y una GPU de baja potencia. Esa es otra razón por la que tantos desarrolladores están mirando a Haskell y esperando que maduren idiomas como Rust: queremos seguridad y rendimiento en el hardware moderno.
Desde 2005, hemos adquirido herramientas nuevas y mejoradas, como OpenCL, CUDA, OpenMP y conjuntos de instrucciones vectoriales para trabajar con concurrencia y paralelismo de datos en idiomas establecidos. Sin embargo, los recién llegados están diseñados desde el principio para hacer muchas cosas más interesantes con concurrencia.
El tiempo de ejecución concurrente de Haskell permite que el lenguaje brinde un rico soporte para paralelismo ligero (chispas) y abstracciones de concurrencia (hilos, canales y referencias mutables compartidas). Go and Rust también ofrece tareas livianas, Go usando canales y Rust usando el paso de mensajes.
Estos sistemas ofrecen seguridad de memoria, tiempos de ejecución efectivos y protección estática contra ciertos tipos de razas. La inmutabilidad por defecto de Haskell y Rust hace que la concurrencia sea mucho más fácil de manejar para los humanos. Erlang ya lo estaba haciendo en los años 80, pero las necesidades de software y nuestro conocimiento sobre cómo diseñar sistemas de programación también han mejorado desde entonces, gracias a Dios.
Finalmente, muchos idiomas existentes (no nombraré nombres) están listos para rechazar como opciones creíbles para escribir nuevo software. Sus cargas de complejidad y sus malas abstracciones de concurrencia los hacen inadecuados para las consideraciones de las aplicaciones modernas. Simplemente estamos esperando alternativas maduras.
fuente
Aquí hay algunos puntos de datos; decide por ti mismo si cuenta como una revolución.
Hardware Paralelo
Alrededor de 2005, Intel y AMD comienzan a producir en masa CPUs de escritorio x86 de 2 núcleos (Pentium D y Athlon 64), con velocidades de reloj de alrededor de 3 GHz.
En 2006, se lanzó PlayStation 3, que presenta el procesador Cell con 8 + 1 núcleos a 3.2 GHz.
En 2006, se lanza la serie GeForce 8. Consiste en un gran número (~ 100) de 'procesadores de flujo' de propósito general, en lugar de unidades específicas de gráficos. Alrededor de 2007, se lanzó la especificación CUDA 1.0, que permite algunos cálculos de propósito general ejecutados en hardware NVidia masivamente paralelo.
Desde entonces, las tendencias continuaron.
Digamos, ahora, en 2013, tanto Intel como AMD ofrecen CPU de 4, 8 y 16 núcleos, con velocidades de reloj ligeramente superiores a solo 4 GHz. Los diseños de doble núcleo y cuádruple núcleo son comunes para dispositivos de menor potencia, como computadoras portátiles y teléfonos inteligentes.
Todo esto es un hardware informático cotidiano producido en masa y de consumo.
Software
CUDA se lanzó en 2007, luego OpenCL en 2008, lo que permite utilizar GPU masivamente paralelas en cómputo general (no gráfico). El modelo se vuelve popular; Muchas empresas de alojamiento (por ejemplo, Amazon) ofrecen GPU para tareas informáticas generales.
Go se lanzó en 2009, presentando hilos preventivos muy baratos ("goroutines") y permitiendo expresar de manera eficiente algoritmos altamente concurrentes.
Akka toolkit se lanzó para Java y Scala en 2009, lo que permite la concurrencia basada en actores.
Erlang (un lenguaje altamente concurrente) ve un aumento en el uso.
Concurrencia vs Paralelismo
Tenga en cuenta que para utilizar hardware paralelo, uno no necesariamente necesita concurrencia de software , es decir, hacer malabarismos con hilos de ejecución dentro de un cómputo. Muchos problemas se resuelven mediante procesos paralelos que no interactúan, donde cada proceso es un programa secuencial tradicional.
El procesamiento paralelo puede utilizar lenguajes más tradicionales y marcos paralelos, como map-reduce o MPC u OpenMP. Para tales marcos, la presencia de múltiples núcleos en el mismo cristal de CPU no es conceptualmente muy diferente de tener simplemente más CPU en el clúster; La diferencia es principalmente la velocidad.
No hay almuerzo gratis hasta ahora
Las velocidades de la CPU aún persisten en alrededor de 5 GHz en el extremo superior. Con mejores tecnologías a la vista, como los transistores de grafeno, las frecuencias pueden aumentar nuevamente en el futuro, pero probablemente no muy pronto.
fuente