viernes, 24 de enero de 2014

Opinión acerca de la situación actual en multiprocesamiento

Esta semana leímos The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software escrito por Herb Sutter, además de algunos otros textos referentes a los antecedentes de la programación multinúcleo, la arquitectura planeada y las problemáticas asociadas.
Tendencias de crecimiento
Este texto, presenta además, la perspectiva desde el punto de vista del desarrollador y las necesidades inherentes de la industria. Se comenta que hace alrededor de dos décadas los desarrolladores de software gozaban de la ventaja de que sus algoritmos medianamente optimizados en algún momento serian ejecutables de forma aparentemente inmediata o razonablemente en tiempo desde el punto de vista de un usuario que cambiara su equipo de computo reciente mente, ya que aprovecharía los avances nuevos de las productoras de microprocesadores que hasta la fecha cumplen con la Ley de Moore, sin embargo, hay ciertas limitantes.

El texto presenta diversos puntos y posturas muy interesantes que definitivamente lo hacen un articulo esencial para una gran población de los profesionales de TI, sin embargo, me dedicaré únicamente a comentar algunos puntos que me parecen relevantes:

  • Dependencia dura del performance de una aplicación: la opinión generalmente aceptada por el publico es que entre mas velocidad de reloj mejor performance tendremos, y si bien es un punto importante, hay que considerar el numero de núcleos, caché, y optimizaciones a nivel de instrucciones maquina, elementos que deberíamos considerar al comparar equipos de computo, al menos sobre papel; sobretodo el caché que muchas veces pasa desapercibido
    • El texto menciona que los desarrolladores de las nuevas generaciones de procesadores tienen mucha presión en desarrollar procesadores cada vez mas rápidos, al punto que han decidido implementar “reordenación” de instrucciones de I/O, cuestión que se me hizo por demás interesante, ya que a pesar de tener contacto con diferentes lenguajes, y personas con diferentes experiencias y usos de estos jamás, he oído de problemas asociados a esto, algo que me parece muy interesante, ya que no creo que sean cuestiones fáciles de implementar.
  • Dependencia “suave” del performance de una aplicación: muchas veces no pensamos en esta parte, cosa que ha dado como resultado programadores que no se preocupan por la optimización de sus soluciones, lo cual, por otro lado podría incrementar los costos de desarrollo pero que bien lo valen. Este punto, es precisamente el central de nuestra futura discusión a lo largo del semestre, pues se requieren desarrollos que implementen esta técnica “esotérica” con mucho mas frecuencia hasta que se vuelva un estándar.
    • Las computadoras actuales desaprovechan los recursos ya que las aplicaciones no están hechas para correr de forma correcta en ellas, echando a la basura en realidad nuestra inversión económica al tratar de mejorar nuestra experiencia general (overall experience) del día a día.
    • Pienso que la habilidad de un programador de crear soluciones concurrentes en problemas medianamente paralelizables será un factor discriminante en el mediano plazo para determinar empleos, y la calidad inmanente en el software, lo que podría diferenciar claramente a los hobbistas y a los profesionales del sector, diferenciación que actualmente se esta volviendo borrosa con la publicación de frameworks cada vez mas sencillos y amigables, por otro lado afectará positivamente en cuan valioso será un desarrollador profesional frente a un hobbista en la industria especializada, sin embargo, podría afectar negativamente a los aspirantes a las carreras relacionadas, que de por si serán escasos según lo proyectado por diversos estudios.
  • Soporte nativo de paralelismo: la lectura indica que diversos lenguajes modernos han decidido implementar mecanismos nativos para el manejo de concurrencia y sus posibles complicaciones (condición de carrera, comunicación, sincronización, etc.), sin embargo, muchos lenguajes populares no cuentan con estos mecanismos, o no los han estandarizado para ser compilados para diversas plataformas a partir del mismo código fuente.
    • Creo que los lenguajes como C/C++ deben aportar estos mecanismos, pero estos también deben ser apoyados por los diseñadores de sistemas operativos, pues creo que los avances realmente significativos se darán cuando los lenguajes puedan interactuar de forma nativa, directa y segura con los sistema de scheduling propios de cada sistema operativo, pues actualmente es una lucha de estira y afloja entre los desarrolladores como usuarios finales, los lenguajes, el sistema operativo esencial, y la optimización forzada dada en los procesadores modernos.
En conclusión, creo que el mundo del software esta experimentando una de las revoluciones mas importantes de su historia, una revolución que aumentara la complejidad lógica al diseñar e implementar soluciones, pero que no necesariamente debería decepcionar a la gente antes de probar las nuevas practicas, pues estás son necesarias, y pronto, serán naturales. También, es importante notar el estado de la industria del hardware hoy en día, donde probablemente en apariencia un equipo con 2 cores podrá superar a un equipo con 4 cores (a la mitad de procesamiento) si el código a correr no esta optimizado, o si las diversas variables como el tamaño del cache, latencia de la memoria principal y discos duros, no son tomadas en cuenta, ya que todo suma, donde los últimos mencionados podrían hacer parecer que el performance incrementa o disminuya exponencialmente.


No hay comentarios:

Publicar un comentario