¡La broma ha terminado!

Complejidad

¡La broma ha terminado…! es la frase que su agente de bolsa le dijo a Groucho Marx por teléfono minutos antes de suicidarse tras el crack del 29. La frase vuelve a  estar de moda ahora que la crisis es una realidad de nuevo. Que nadie piense que me he vuelto loco y ahora mi blog va a tratar de economía. Hoy vengo a hablar de otra crisis que nos toca más directamente a los programadores: el fin de la Ley de Moore tal y como la conocíamos hasta ahora. No es que los microprocesadores  vayan a dejar de doblar su potencia cada año y medio más o menos, sino que este incremento de velocidad va a dejar de ser transparente para los desarrolladores de software. Los desarrolladores tenemos nuestra propia crisis técnica. El crecimiento de velocidad va a venir de las mejoras en paralelización de los microprocesadores, no de las mejoras de velocidad de proceso en sí. Los procesadores serán capaces de hacer más cosas a la vez, pero no serán capaces de hacerlas más rápido. La potencia se define como trabajo por unidad de tiempo. Hacer más trabajo a la vez es una manera tan buena de mejorar la potencia como hacer el trabajo más rápido.

 

A la economía se le acabo la confianza, a los desarrolladores se nos acabo el poder confiar en que nuestro software se ejecutará más rápido con solo cambiar de máquina. Igual que ha ocurrido con la economía hay voces que ya nos llevan hablando de los posibles problemas desde hace tiempo. Esta es una realidad que ha mordido ya a algunos, con paradojas como que incrementar el número de procesadores de su servidor de bases de datos haga que las consultas sean más lentas. Pero la cosa no va a quedar aquí. Si a futuro queremos que nuestro software siga beneficiándose de las mejoras de rendimiento de los procesadores en el futuro debemos empezar a cambiar ya nuestra manera de desarrollar.

 

No tengo claro aun cual va a ser la magnitud del impacto, igual que ocurre con la crisis económica se están tomando infinidad de medidas para tratar de minimizar el impacto de esta crisis. Hay cientos de equipos de desarrollo trabajando a bajo nivel para dotarnos de abstricciones que puedan evitar que los desarrolladores de negocio tengan que preocuparse por estas cuestiones. En cualquier caso el mundo del desarrollo va a ser más complejo, no importa como de buenas sean las abstracciones.

 

Lo que está claro es que los desarrolladores seremos quienes de un modo u otro tendremos que empezar a pensar en paralelización. Y la paralelización no es un problema trivial. Es un problema que separa el trigo de la paja, al buen desarrollador (desde programadores a arquitectos) del desarrollador en la media. Cierto es que los desarrolladores de herramientas de desarrollo nos van a tratar de facilitar la vida construyendo herramientas y abstracciones que faciliten la adopción de este nuevo paradigma, pero toda abstracción no trivial fuga detalles, como reza la ley enunciada por Joel Spolky.

 

Se están construyendo nuevas abstracciones, como las Parallels Extensions de .Net, la Parallel Patterns Library de C++ y muchas otras, que van ha permitir que los desarrolladores de negocio se centren en resolver los problemas que realmente importan, los del negocios. Pero mucho me temo que estas abstracciones nos van a plantear problemas: exigen cambios de diseño y tendrán, como todas las abstracciones, fugas y en este caso las fugas serán fugas de complejidad elevada. En cualquier caso el cambio de paradigma nos exige una nueva manera de pensar. Los hilos son una abstracción demasiado débil. Tenemos que empezar a pensar en tareas no en hilos. Y en relaciones entre esas tareas y su concurrencia en lugar de en sincronización de hilos. Es la única manera de abordar la complejidad que la programación concurrente aplicada a un amplio espectro de aplicaciones impone.

 

Dicen que en Chino crisis y oportunidad se expresa con la misma palabra. A la vista de la silenciosa revolución que está ocurriendo una nueva raza de desarrolladores va a surgir: aquellos que dominen la programación concurrente. En mis primeros tiempos como desarrollador de C/C++, había una casta especial de desarrolladores, mejor pagados y más considerados que los demás, esa casta estaba formada por los desarrolladores de C/C++ que además dominaban las optimizaciones en esamblador del código. Llego un momento en que la Ley de Moore y la mejora en los compiladores hizo innecesarios a estos desarrolladores, pero durante mucho tiempo, contar con uno de estos en tu equipo fue algo clave. Creo que esto va ha ocurrir de nuevo.

 

De aquí se deriva mi propósito en el ámbito técnico para el año que viene: actualizar mis conocimientos sobre programación multihilo a la programación concurrente. Si alguien más se quiere unir a este propósito le invito a empaparse el número de Octubre de MSDN Magazine y a visitar el centro de desarrollo de Parallel Computing de Microsoft.

24 comentarios en “¡La broma ha terminado!”

  1. Si esto lo publicas el dia 28 me echo a reir, pero lo gracioso es que tienes razon. Totalmente deacuerdo…

    Como no estamos acostumbrados a cambiar, a estudiar toca…

  2. ¡Yijaaaaaaaaaaaaaaa!

    Nunca mejor expresado, Rodri. Von Newman tiene que estar inquieto en la tumba, y todo quisque como loco intentando hacerse un hueco en el mercado del paralelismo… Algoritmos y técnicas generales, como diría aquél del chiste que viajó a Estados Unidos, una o… ninguna.

    🙂

  3. Y cómo cuadra esto con Oslo? Porque por lo poco que conozco lo que pretende es que el nivel de abstracción sea mucho mayor…..y en cambio con lo que comentas el nivel de abstracción será menor, para poder aprovechar al máximo las capacidades de procesamiento…

  4. Genial reflexión Rodrigo! Si hasta ahora la evolución computacional era lineal, a partir de ahora será “en paralelo”. De igual modo pasará con nuestro aprendizaje. Lo cual no me parece malo del todo, debemos poner en práctica los conceptos teóricos o “de investigación” sobre Programación Concurrente y aplicarlos a entornos empresariales, empleando un lenguaje de propósito general como C# en el caso concreto que nombras 🙂

    Muy buena la pregunta de Ibon, intentaré escribir una reflexión al respecto en breve, no sólo sobre programación concurrente sino sobre la relación de Oslo con distintos runtimes.

    Merry Xmas,
    Miguel

  5. @Quique: sin duda el cambio no es algo que deba dar miedo a un desarrollador…

    @Rafa: si, todo el mudno anda buscando el hueco, el que lo encuentre quizás le de un buen mordisco al mercado, si realmente el cambio de paradigma es tal…

  6. @Julio: Algo haremos hombre 😉

    @Ibon: pues ni la más ligera idea de como esto casa con Oslo… pero vamos, ya sabes mi postura sobre el exceso de abstracción. De todas formas paso el testigo a Miguel, que nadie mejor que el para hablar de Oslo.

  7. @espinite: No dudes que la gente de Microsoft va a poner al alcance de todo el mundo todo lo necesario para formarse y aprender las nuevas tecnologías que surjan.

  8. Estoy de acuerdo en el fondo, a partir de ahora todo el mundo necesitara saber usar varios cores, cpus o gpus.

    En realidad esto lleva mucho tiempo usandose, en al año 2000 yo tenia un dual Pentium3, si lo reconozco soy un vicioso de la performace :-), cualquier aplicacion de calculo intensivo, servidores web, etc, desde hace años debe utilizalo.

    La cuestion es que ahora todos los desktop tienen al menos 2 cores y si quieres que tu aplicacion de escritorio los utilice tendras que adaptarte, efectivamente el proceso de adaptacion dependera de los algoritmos que uses, y de los lenguajes, claro, los desarrolladores de .NET seguramente tendran un acceso mas sencillo que los de C++ nativo.

    En fin podriamos hablar horas de todo esto 🙂

    Por cierto para los que quieran empezar os recomiento mirar Intel TBB, el proximo stantard C++0x e incluso las PPL de microsoft, tienen un monton de semejanzas.

  9. buenas …
    excelente post Rodrigo, como te gusta ponerle los colmillos largos a la gente 😀

    si alguien quiere comenzar a probar un poco de esta tecnología, en la CTP de VSTS 2010 hay un par de tutoriales de Parallels, claro es una máquina virtual, pero si sirve de referencia.

    Saludos

  10. @Manolo: no tengo yo tan claro que el acceso a estas caraterísticas sea más potente o sencillo desde el mundo manejado. En el mundo no manejado hay ya una tradición de librerías que abstraen el tema multihilo, sin ir más lejos muchos de los conceptos de Intel TBB o PPL están ya presentes en OpenMP (http://msdn.microsoft.com/en-us/magazine/cc163717.aspx). Creo que PPL solo aporta un mayor nivel de abstración. Pasamos de hilos a tareas y hacemos uso de construcciones inspiradas en los lenguajes funcionales…

    @Bruno: Comparto lo que dices plenamente. VSTS2010 es el entorno ideal para explorar la programación concurrente.

    Gracias por los comentarios.

    ¡Un saludo!

  11. Estoy contigo en el mundo nativo, no te mentire, es el que conozco, exiten un monton de aproximaciones, pero como tu bien dices casi todas basadas en threads y eso hace su uso muy complicado, ya sabes locks, fences y demas … el salto a tasks hace que sea algo mucho mas accesible, por eso creo que en .NET sera todavia mas accesible ya que Microsoft sera capaz, por ejemplo de hacer que una insrtuccion LINQ sea dividia en 4 y ejecutada por varios cores sin que el programador se entere … en fin todo se vera, desde luego el 2009 sera un año muy interesante, al menos para los que nos gusta cacharrear con cosas nuevas 🙂

    Hablando de lenguajes funcionales, terdremos que terminar usando F# (estara incluido en VS2010) o Erlang? 🙂

  12. Creo que, sin duda, este es un tema que va a ser importante en el futuro próximo. Ya hemos visto los esfuerzos de Intel por facilitar los desarrollos sobre sus nuevos procesadores, habida cuenta de la complejidad introducida.

    Sin embargo, no creo que el desarrollador tenga que lidiar con conceptos avanzados de paralelismo para aprovechar esas capacidades, más bien creo que toda la complejidad que exige el control de un dearrollo paralelo será reducida al mínimo por las herramientas y gestionada por debajo de modo totalmente (o casi totalmente) de forma transparente al desarrollador.

    Esto debería ser así por una sola razón: si no lo es la productividad en los desarrollos de negocio caerá en picado y esa no es una opción, hay que ir hacia adelante, no hacia atrás en eso. Creo que por ahí deberían ir los esfuerzos de las plataformas de desarrollo en este campo.

  13. y esta necesidad… ¿quien la ha creado? crees que el rendimiento o el “performance” (que añade un par de significados) del 90% de las aplicaciones actuales es bajo o significativo para el cliente?
    Es cierto que cuanta mayor potencia de calculo mayor provecho sacaremos (sobre todo aquellos que lo entiendan y tengan la vision de una “mision”) pero… si seguimos jugando con los emuladores del amstrad… ¿quien esta dirigiendo esta tendencia?

  14. @Rafael Alcalde: Yo no creo que sea una necesidad creada por nadie como tu sugieres… más bien la necesidad de rendimiento es algo que existe per se, es una ventaja competitiva de unas aplicaciones sobre otras.

    Algunos desarrolladores sabrán aprovechar esta posible ventaja competitiva y otros no, como sucede con el diseño, la usabilidad, u otras características…

    También es cierto, que no en todas las aplicaciones la concurrencia va a marcar una diferencia… habrá aplicaciones en las que este aspecto sea significativo y otras en las que sea irrelevante.

    ¡Un saludo!

  15. “Dicen que en Chino crisis y oportunidad se expresa con la misma palabra. A la vista de la silenciosa revolución que está ocurriendo una nueva raza de desarrolladores va a surgir: aquellos que dominen la programación concurrente.”
    No tengan dudas, que es una gran oportunidad.
    A los interesados en aprender a explotar los procesadores multicore, les recomiendo el libro “C# 2008 and 2005 threaded programming”, de reciente lanzamiento por parte de la editorial inglesa Packt Publishing. Se puede desacargar el código para practicar y tiene unos ejemplos muy majos.
    Aunque parezca increible, el libro lo ha escrito en inglés un hispanoparlante, el Sr. Hillar Gaston.

    http://www.packtpub.com/beginners-guide-for-C-sharp-2008-and-2005-threaded-programming/book

    Envían sin costo a todo europa (incluida España). Para américa latina (chateo con colegas hispanoamericanos), la cosa se complica, pues tienen un gasto de envío importante. Pero, brinda soluciones que he estado buscando durante meses leyendo un post tras otro en blogs.

    Suerte con la revolución multicore!

  16. excelente post y qué cantidad de opiniones!
    @Ariel: al fin alguien recomienda un libro sobre el tema, pues no se puede vivir de blog en blog. Agradecido.
    Creo que no queda otra que entrar en el detalle de los multicore. No creo que se pueda automatizar la compilación y la optimización, pues hace más de una década que hay multiprocesamiento y todas son promesas.
    Estoy cansado de leer posts de MVPs diciéndonos que hay que usar Parallel Extensions. Por favor, tíos, sabemos que Microsoft les regala productos, pero, sean más realistas, no podremos usar Visual Studio 2010 hasta que no haya salido el Service pack 1.
    Si el libro que recomienda ariel lo escribió un hispanoparlante, lo compro con más gusto!

    Saludos,
    Xavier Garramo (estudiante avanzado)

  17. @Xavier: Entiendo lo que dices… pero no es necesario para nada esperar a VS2010 para empezar a usar Parallel Extensions… yo no esperaría al menos. Para entonces puedes haber perdido el tren.

    Sin duda VS2010 va a facilitar el tema, sobre todo la depuración, pero no es condición necesaria en mi opinión.

    Te voy a recomendar otro libro que yo no he leído aun pero que se rumorea que es excelente:
    Concurrent Programming on Windows de Joe Duffy
    http://www.amazon.com/gp/product/032143482X?ie=UTF8&tag=lamaselladlab-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=032143482X

    ¡Un saludo!

  18. @Rodrigo: Muchas gracias por la recomendación. Hoy compré los dos libros por Internet.
    El de Joe Duffy lo compré por Amazon (usé el link que me has puesto).
    Y el de Hillar, lo compré por Packt Publishing, porque me convenía pedir dos (me junté con un colega) y nos hicieron un 18% de descuento y el envío sin cargo a Madrid.

    ¡¡Hay que leer colegas!!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *