12 de febrero de 2007

Adios, falsa multitarea

Como quizás muchas de vuesas mercedes sepan, Intel ha mostrado al público un procesador con 80 'cores'. A pesar de que yo mismo he escrito en este blog que los fabricantes de CPUs van a ganar rendimiento a partir de ahora más que nada añadiendo 'cores' en vez de Ghz cmo hasta ahora, siempre he tenido y tengo muchas dudas sobre esa aproximación a la hora de conseguir rendimiento. La multiprogramación con multiples hilos de proceso compartiendo recursos cuya integridad se garantiza mediante diferentes sistemas de bloqueo es tan dificil que a día de hoy la mejor aproximación a la hora de crear un programa que utilize ese estilo de programación es que comparta lo menos posible y utilize los menos bloqueos posibles como principio fundamental de diseño, para que la complejidad del código sea manejable.

Eso me hace ser terriblemente escéptico con respecto a los procesadores multicore. Intel dice - en realidad no solo Intel, el mundo de las CPUs que acaba de despertarse con el multicore - que para aprovechar todos esos núcleos hará falta que los programadores se espabilen. Que se inventen maneras de sacar provecho a 80 núcleos. Ellos van a colaborar, dicen, mandando a sus ingenieros a evangelizar por el mundo y lanzando librerias y utilidades, y tal y tal. Y todo eso suena muy bonito, pero la última vez que Intel intentó hacer cambiar a alguien de "paradigma" fue a los programadores de compiladores, con su Itanium. Y ya ven como les fue y les va la cosa. En fin, ellos sabrán.

Lo que venía a contar aquí es una de las cosas que ocurrirán si de verdad acabamos utilizando un chisme de 80 cores. Hasta ahora, los ordenadores tenían que recurrir a la multitarea: se activa una interrupcion cada 1/1000 segundos que ejecuta el código del gestor de procesos que determina que proceso seguir ejecutando, si el mismo u otro. Añadiendo la virtualización del espacio de direcciones y demás se consigue que en un ordenador con un solo procesador se puedan ejecutar N procesos diferentes; dando así la apariencia de que el ordenador ejecuta varios procesos a la vez, cuando en realidad solo ejecuta uno.

¿Que ocurrirá cuando tengamos 80 cores, y aun más? Que ya no será necesario la multitarea tal y como la hemos conocido hasta ahora. Tendremos multitarea real: Cada proceso, hilo o lo que carajo sea se ejecutará en un procesador. Y no será necesario interrumpirlos. Lo cual implica, a largo plazo, por qué no, decir adios a los cambios de contexto y esas cosas (lo cual implica, por cierto, que los microkernels podrían ser factibles, no como hasta ahora, que han intentado hacer lo imposible en arquitecturas claramente diseñadas para kernels monolíticos). Incluso al "modo kernel/modo usuario": La diferenciación entre modo kernel y modo usuario surgió entre otras cosas para poder ejecutar varios procesos en una sola CPU, y que un proceso no metiera las narices ni monopolizara los recursos de los demás. Aunque incluso en un sistema de 80 procesadores, sería necesario un supervisor, para administrar la memoria, que sin ningún tipo de duda seguirá siendo homogénea: Un solo espacio de direcciones, muchos procesos rondando alrededor de ella.

Pero en el fondo todo lo dicho es una tontería, con un procesador de 80 cores no nos moveríamos a un modelo "proceso por procesador". ¿Como aprovecharíamos la potencia de cada core, si relegaramos cada procesador a un proceso, cuando el único modo posible de aprovechar esos 80 cores es precisamente repartir procesos o hilos por todos los cores lo más posible, como quien va sembrando semillas? Lo dicho, que francamente no tengo ni puñetera idea de como van a ser los ordenadores de dentro de cinco años y como se aprovechará su potencia. Y admiro profundamente a quienes dicen saber como se hará.

2 comentarios:

  1. Anónimo12:21 p. m.

    La buena noticia es que podría estar llegando una razón para que aparezca la versión 2.7 de Linux... o incluso la 3.0!!

    Esa gente que dice que probró Linux 5.1 pronto (dentro de 20 años) podría estar en lo cierto.

    ResponderEliminar
  2. Anónimo12:00 a. m.

    Seamos realistas, de poco sirve que mejoren tanto las capacidades de la CPU si no hay un sistema de gestión de memoria lo suficientemente eficiente y potente como para soportarlo.

    Eso sumado al gran costo que supondría crear procesadores de tales características me hace imaginar que la cosa no va para dentro de un lustro ni dos, sino para al menos un par de décadas.

    Es como si por decir que si porque se han llegado a alcanzar los 4000 mbps de bajada en pruebas de descarga, éstas lineas de alta velocidad se fueran a implantar en menos de 10 años. Yo al menos lo dudo bastante.

    ResponderEliminar