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.


viernes, 17 de enero de 2014

Thread.start("Hello, World!");

Mi nombre es: Andrés Durán (AKA Kenny), soy ISC (como seguro lo podrán imaginar), y espero aprender en este curso técnicas optimas de programación paralela que me permitan aprovechar de la mejor manera la capacidad de procesamiento de los equipos de computo (o embebidos del futuro) con los que tenga un contacto directo.
Pienso que es una materia fundamental para los profesionales en desarrollo de software pues nos permite esta listos para el futuro, sin embargo, la corriente de computo distribuido me parece también importante, por lo que me gustaría encontrar un equilibrio valido entre ambos paradigmas según el contexto del problema y la infraestructura disponible.
Estas vacaciones me dediqué a ver muchas series y películas, entre las que destacan: "Suits", "Under the dome", "Continuum" (la cual recomiendo mucho), "Hostages", "Ender's game", entre otras.
No suelo escuchar mucha música, y cuando lo hago generalmente presiono el botón "Voy a tener suerte" de Google Play Music, por lo que no tengo mucho que decir, sin embargo, me gustan los géneros de rock, pop, algunas baladas, etc., en fin, casi todo menos reggaeton.
Mis pasatiempos no son muy numerosos, pero me gusta mucho leer y aprender de nuevos temas relacionados con mi carrera, noticias, y en ocasiones patinar y pasear en bicicleta por la ciudad.