Conecta con nosotros

Hola, ¿qué estás buscando?

Miscelánea

¿Hardware y software en la misma liga?

Hace mucho que no escribo así que he decidido pillaros por sorpresa ;) La cosa es que alguno ya sabrá que me dedico al rollo de HPC o se lo habrá imaginado por ahora así que voy a escribir sobre algo relacionado.

Últimamente, el hardware ha avanzado mucho … quizás demasiado. Hoy en día tenemos la posibilidad de comprar «mini-supercomputadoras». Podemos tener un sistema con varios cores/CPUs y una o más GPUs (coprocesadores mátemáticos vectoriales). Hasta hace poco, esto sólo lo podía pagar una entidad pública (con nuestro dinero claro ;) y empresas con mucho dinero (especialmente petroleras). Pero hoy en día un equipo de estos es relativamente bararato.

Ahora viene la pregunta con truco: ¿de qué me sirve? La verdad es que no te sirve para mucho en casa … salvo que … Siempre hay un «pero» o un «depende» o un «salvo que» ;) Salvo que, uses un software muy determinado que le saque el jugo a dicho hardware. Me explico: el software no ha avanzado tan deprisa … <pensando> … Corrijo, el software sí ha avanzado, pero esos avances no se han incluido en el sw de «propósito general». Por ejemplo, en un sw típico de un PC NO se le saca el jugo a las GPGPUs ni a todos los cores que tenemos. Tenemos una potencia de cálculo inimaginable en nuestros PCs en forma de tarjeta gráfica (NVIDIA y ATI), pero esta se limita a mostrarnos las páginas web, los correos y esas animaciones infernales basadas en Flash (lo siento, pero es que no soporto el abuso que se hace de Flash). Ahora vienen las preguntas:

«¿Pero vamos a ver, para qué quiero yo usar un procesador vectorial a la hora de abrir una página web o un documento ofimático?»

No es fácil responder a esa pregunta así de buenas a primeras y, posiblemente no sirva el 100% de las veces. Vamos a ver unos ejemplos para saber de qué hablo:

  1. a lo mejor no quieres usar la GPGPU, pero quieres usar todos tus cores. Por ejemplo, al navegar por Internet y ver páginas estáticas NO necesitas los 256 cores de cálculo vectorial que tiene tu tarjeta gráfica, pero te interesa que tu navegador con sus miles de tabs o pestañas echen mano de todos los cores que tienes instalados. Si sois como yo y os dedicáis a abrir todo enlace viviente a base de botón derecho -> abrir en nueva pestaña … pues te interesa echar mano de todas las CPUs y así conseguir que las pestañas se abran más deprisa. Esto es un ejemplo muy sencillo para que veáis por dónde van los tiros.
  2. Otro ejemplo sería el uso de varios cores para los clientes de correo (sí, soy de la vieja escuela y uso un cliente de correo y POP para descargarme los correos, no uso webmail ni IMAP). Para los que tengan las mismas manías que yo, habréis visto que los clientes de correo tienen capacidades antispam, antivirus, corrector ortográfico y no sé cuántas cosas más. Bueno, pues si todas esas cosas se paralelizan y echan mano de todos los cores que tenemos … nuestra vida será más placentera ;)
  3. Ofimática. Aquí la cosa ya empieza a complicarse porque podemos empezar a habalar de GPGPUs. Vamos a imaginar que trabajamos con hojas de cálculo muy grandes y complejas (somos el currante de una gestoría o de un banco o de una financiera o de un departamento financiero). Pues esta gente muchas veces tiene que trabajar con unas hojas de cálculo muy complejas y grandes con miles de operaciones. ¿Se verían beneficiados si la GPGPU les ayudase aunque sólo fuese un poco? Sí.

«Bua, pero yo no me dedico a eso así que me importa poco, nada o absolutamente nada que mi OOo Calc o mi Kspread use la GPGPU.»

Haya paz, que aún me queda mucho rollo por contar.

Bien, vamos con el usuario mayoritario: aquel que NO se dedica a secuenciar el genoma del demonio de tasmania, ni el que se dedica al estudio aerodinámico de los ascensores, ni el que se dedica a los cálculos de riesgo de hipotecas y préstamos ni nada de eso. Vamos con … una persona que se dedica a cosas «normales»: leer el correo, abrir un documento de texto, recibir/enviar un fax (¿un fax? Sí, aún hay gente que usa «eso»), escucha algo de música mientras trabaja, como por ejemplo: un periodista … Hey!! Eso es, escucha música. ¿Os imagináis que su reproductor de música fuese capaz de usar la GPGPU para codificar/decodificar música? Pensaréis que esto es una bobada porque con la CPU va bien, ¿por qué más?

Imagínate que el periodista pudiera codificar muchas pistas de audio al mismo tiempo y más deprisa aún. ¿Para qué quiere un periodista codificar varias pistas de audio al mismo tiempo más deprisa? Muy sencillo, vamos a suponer que ha estado en 5 presentaciones de producto, 2 actos oficiales y 3 entrevistas a lo largo del día y lo tiene todo grabado en su grabadora o móvil. Cuando llegue a la oficina o a casa, quiere volcarlo a su PC, pero el formato en el que se ha grabado no es compatible (sí, os lo juro, siguen usándose formatos no compatibles ;) con su reproductor de audio del PC/portátil. Pues nada, echa mano del codificador de audio y pasa todas esas pistas de audio al formato que sea en segundos gracias a la GPGPU. Ya no hablamos de minutos, hablamos de segundos (incluso de MUY pocos segundos).

Como véis, le hemos dado a una vida de lo más aburrida y anodina (o eso piensan algunos) la posibilidad de ser más eficiente en su trabajo. Pero, ahora viene el problema:

  • ¿es capaz de usar la GPGPU el software que usa el periodista?
  • ¿está bien paralelizado el código?
  • ¿está optimizado el código?

Posiblemente la respuesta sea: NO.

Lo que quiero decir es que el software de «andar por casa» no está optimizado :( Esto es a lo que me refería cuando decía al principio que el hardware ha avanzado mucho y el software no. Por desgracia, como el hardware es barato, la respuesta es: compra más memoria/CPU. Pero de nada me vale si el software no está optimizado para los avances que trae el hardware.

Advertencia, desplázate para continuar leyendo

¿Qué tiene todo esto que ver con el software libre? Esto tiene que ver con la posibilida de usar cosas como openMP y OpenCL en el software de código abierto y mejorar el rendimiento de nuestro software (y, por ende, hacer nuestra vida mejor y más placentera) Ya, ya sé que gcc incluye soporte para openMP, pero:

  • ¿el software que usas en tu PC/portátil/notebook hace uso de OpenMP? Lo más seguro es que no :(
  • ¿está el software que usas a diario bien paralelizado para sacarle todo el jugo a los cores que tienes en tu equipo? Lo más seguro es que no. Ya, ya sé que el kernel sí, pero no pregunto por el kernel, pregunto por el software a nivel de usario (user land), recordad: no sólo de kernel vive el Hombre ;)

Todo este rollo viene porque el mundo del HPC antes estaba limitado a unos pocos, pero ya se ha comoditizado (ya está al alcance de todo el mundo) … el hardware, el software de entornos HPC no :( Así que todos aquellos que programéis (sea profesionalmente o no), todos aquellos que estéis buscando trabajo, que estéis estudiando aún, todos los que querráis cambiar por aburrimiento, … Os aconsejo que le vayáis echando un ojo a estas tecnologías de mejora de software: paralelización, optimización, depuración, openMP, OpenCL, MPI, … Porque de aquí a muy poco, es a quien se le va a pagar grandes sumas.

Os voy a poner un ejemplo, en uno de los grupos a los que me he apuntado de LinkedIn, una persona preguntó:

What do the grey beards have to say to the new younger people coming into HPC?

(¿Qué consejos daríais los «abuelos» a los novatos en HPC?)

Una de las respuestas fue:

Optimize, Optimize, Optimize. Rinse & Repeat. Even small changes to code can make parallel computations much more efficient, thus faster and shorter job completion. […]

(Optimiza, optimiza, optimiza. Aclara y repite. Incluso pequeños cambios al código pueden hacer más eficiente la computación paralela y, por tanto, la finalización de la tarea más rápida y corta […])

Otra respuesta:

Optimize what counts and let the rest untouched. Younger folks tend to launch on a crusade and tune every little bit in an application. Typically 20% of the code accounts for > 80% of the run time. There are so many apps to tune it’s smart to get the most bang out of an app and then move on quickly to the next app. You may always come back and tune a bit more later.

(Optimiza lo importante y no toques lo demás. Los jóvenes se lanzan a unas cruzadas y optimizan todo en una aplicación. Por norma general, el 20% del código supone el >80% del tiempo de ejecución. Hay tantas aplicaciones que optimizar que es inteligente sacar el máximo de una aplicación y pasar rápidamente a la siguiente. Siempre podrás volver y optimizar un poco más.)

Otra muy buena (en mi opinión ;):

We now have the emergence of multi-core ARM processors. Multi-threaded processing is in everyone’s future, even for handsets.

(Ya están a punto de dalir procesadores ARM multi-core. El procesamiento multithreading está en el futuro de todo el mundo, incluso para dispositivos móviles.)

Otro ejemplo que voy a poner no viene de los consejos que dan en LinkedIn, sino de otro post que lo que dice es que las (GP)GPUs han avanzado mucho en temas de hardware, pero que el software va por detrás (concretamente, los juegos):

As has long been the case, graphics hardware outpaces games development.

(Como lleva ocurriendo desde hace tiempo, el hardware de gráficos aventaja al software de juegos.)

[…]

As always, the important thing to take away from the state of the GPU market is that performace is king. A card’s features set may be impressive, but the games it will be driving are generations behind.

(Como siempre, lo importante es que el rendimiento es el rey. Las características de una tarjeta (gráfica) pueden ser impresionantes, pero los juegos que ejecutará están generaciones por detrás.)

En el caso del post, hace referencia a seguir estándares también como una de las razones por las que el software (juego) va por detrás.

Si os metéis en los blogs de Intel o AMD u otras similares, veréis que cada vez aparecen más preguntas/quejas/consejos/… sobre optimización y depuración de código. Si os fijáis en el mercado, cada vez se demanda más la GPGPU (aunque hay algunos que la piden porque está de moda, pero eso es otro tema). Más cosas a tener en cuenta:

  • cada vez más, los PCs, portátiles, netbooks y, dentro de poco, los móviles van teniendo más cores y memoria. Para estos entornos OpenMP es muy bueno.
  • cada vez estamos más interconectados por lo que el uso de MPI es una ventaja

Animo a todos aquellos que he mencionado antes, el software que manejamos y nos gusta es libre: podéis contribuir y aprender cosas nuevas, podéis encontrar o cambiar de trabajo, podéis mejorar dicho software, … ¿Qué mejor momento que este?

Por cierto, una de las respuestas a la pregunta del grupo de LinkedIn fue esta::

The professionals more willing to pursue HPC in new markets are the energetic ‘newbies’ so for me great to have them. […]

(Los profesionales que más quieren introducir HPC en nuevos mercados son los notavos enérgicos, así que por mi, encantado de tenerles. […])

Así que ya sabéis: invitados estáis a este nuevo mundo con mucho futuro y mucho software libre :D

41 Comentarios
Advertencia
Advertencia

Te recomendamos