¿Se acabó el almuerzo gratis? [cerrado]


12

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.


15
¿Cuántos núcleos tiene tu teléfono?
Matt D

66
Mi Nokia 2700 tiene un núcleo.
cpp

55
@MattD Lo siento, pero ¿por qué es "hora de actualizar" y qué tiene que ver la cantidad de núcleos en el teléfono de cpp? ¿Cómo sabes que un Nokia 2700 no es suficiente para sus necesidades?
Andres F.

2
Voy a registrar que, por una observación totalmente no científica, que ha habido una revolución en el lado del hardware, pero la revolución del software ha sido extraordinariamente lenta. Obtener herramientas simultáneas de calidad para todos los programadores sigue siendo un trabajo difícil y la concurrencia sigue siendo algo que hace tropezar incluso a los desarrolladores paralelos experimentados en formas difíciles de reproducir.
Jesse C. Slicer

2
Solo quiero señalar que solo porque el momento de las predicciones es incorrecto, no necesariamente hace que las predicciones sean incorrectas. Es bastante obvio que los puntos clave que ha enumerado anteriormente no han obtenido la importancia implícita, pero se han dado pasos en la dirección de cada uno de esos puntos. Entonces, diría que las predicciones anteriores se harán realidad, es solo una cuestión de cuándo. El CUÁNDO será cuando se convierta en un requisito y no solo en un deseo. Saber cuándo se cruzará ese umbral es por qué predecir cuándo es tan difícil.
Dunk

Respuestas:


23

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.


2
No estoy tan seguro sobre la disminución de ciertos idiomas, espero ver código escrito con más énfasis en minimizar las dependencias que cualquier otra cosa. Después de todo, no es realmente el idioma el que tiene la culpa, es cómo lo usa. Y la "fruta baja" de su uso ya no está alineada con la multiproceso / concurrencia.
Matt D

66
@MattD: Tanto la forma en que usa un idioma como el idioma en sí mismo pueden ser culpables. Digamos que su programa está mal. Usted fue quien lo escribió mal, pero el lenguaje no necesariamente lo ayudó a escribirlo correctamente , y eso es igual de importante.
Jon Purdy

6

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.