La pregunta es: ¿se puede dar la paradoja de que con chips más potentes tengamos ordenadores más lentos?. La respuesta es que, no es que se pueda dar, es que se está dando ya.
Hace ya unas semanas que tenía ganas de escribir sobre este tema desde que lo leí en el Fortune del 8 de septiembre (lo sé, me suscribo a cosas "muy raras"), pero como podéis comprobar si véis las fechas de mis últimos post, cada vez me resulta más complicado escribir algo con todo lo que tengo encima.
En fin, volviendo al tema, el caso es que la dinámica del sector hasta hace unos pocos años fué siempre la misma: los fabricantes de hardware hacían CPUs más rápidas y los fabricantes de software (entiéndase, de sistemas operativos) hacían sistemas más potentes también (lo cual no siempre se traduce en mayor rapidez, no hay que confundir). Así se cumplía la ley de Moore y todos tan contentos.
El problema es que llega un punto en que exprimir los ciclos del procesador para darles más velocidad no es viable, bien económicamente, bien por eficiencia energética, por lo que las últimas generaciones de CPUs de hecho corren a frecuencias de reloj menores que las que había hace tres o cuatro años. Es por eso que lo habitual ahora es que ni siquiera te indiquen la velocidad de reloj de las CPUs. Lo que se ha hecho para poder seguir progresando en potencia es algo más "fácil" para los geniecillos del hardware (ojo con el entrecomillado, es para entendernos) que para los del software: los procesadores multicore. En lugar de poner más velocidad ponemos dos procesadores o más en uno sólo. Es parecido a tener sistemas multiprocesador pero en un sólo chip. Hoy en día es casi seguro que tu ordenador de sobremesa o portátil tiene un doble núcleo. En nuestra oficina en Krasis, por ejemplo, el nuevo servidor de dominio (bastante normalito) tiene dos procesadores de cuatro núcleos, es decir, como si fueran ocho procesadores.
Lo que ocurre es que esta tecnología es tan diferente de la anterior que los que trabajan en software a bajo nivel "rillan" (como se dice en mi tierra gallega, que no es "dar grima" como en Canarias, sino "desesperarse intentando resolver un problema" o "hacer algo que cuesta demasiado esfuerzo", entre otras cosas). Según Craig Mundie, el jefe de estrategia e investigación de Microsoft, "es el cambio debido a "conceptos diferentes" más importante de la historia moderna de la computación". ¿Exagerado?. Bueno, Sean Maloney de Intel reconoce que "se trata de un gran problema", y otros van más allá y dicen que es una verdadera crisis.
La informática masivamente paralela lleva siendo una realidad desde hace muchos años en entornos científicos (para simulaciones que conllevan complejísimos cálculos), pero se trata normalmente de entornos muy cerrados y especializados, no de propósito general y con sistemas con lo mínimo para correr ese tipo de aplicaciones. Ahora la guerra es diferente pues estamos hablando de sistemas que deben funcionar con miles de propósitos diferentes y en entornos no controlados. Al parecer, desarrollar con eficiencia para esto es tan endemoniadamente complicado que hoy en día hay no personal cualificado suficiente para poder desarrollar una industria sobre estos chips. Los propios fabricantes de CPUs como Intel reconociendo el problema está contratando programadores en masa para intentar aportar soluciones desde su parte también.
La industria de los videojuegos ha vivido una crisis parecida hace unos años, a principios de la década, cuando Sony empezó a incorporar diferentes y múltiples chips a la Playstation 2. Los creadores de juegos "rillaron" intentando ponerse al día y lograr sacar juegos que al final llevaban enormes retrasos (y por lo tantos pérdidas millonarias). Incluso hubo empresas que directamente dejaron de producir juegos por no ser capaz de adaptarlos a la nueva realidad hardware.
Pues algo similar e incluso peor está pasando hoy en día en el mundo de los ordenadores. Se puede dar (y se da) la paradoja de que te compras un maravilloso PC con un quadcore y que algunas tareas tardan lo mismo o incluso tardan más que antes en hacerse. Si ya la programación multi-subproceso de alto nivel con lenguajes como C# o C++ es compleja, imagínate como será a esos niveles tan bajos. Por cierto, si te interesa el tema deberías echarle un vistazo al lenguaje experimental C Omega que extiende a C# para paralelismo.
¿Y tú qué opinas de esto? ¿Comentarios? ¿Ideas?
Recursos de interés que te sugiero:
· Artículo original completo en Fortune
· Parallel Computing en Microsoft
· Blog del equipo de Parallel Computing de Microsoft
· LINQ Paralelo: Running Queries On Multi-Core Processors
· Optimize Managed Code For Multi-Core Machines
· Curso de programación multihilo con .NET de campusMVP