HPC @ Intel: ¿Ha terminado el almuerzo gratis? - Calendae | Informática, Electrónica, CMS, Ciberseguridad

HPC @ Intel: ¿Ha terminado el almuerzo gratis?

Hola, ¿qué tal colega?. Te habla Simón Sánchez y en esta ocasión hablaremos sobre HPC @ Intel: ¿Ha terminado el almuerzo gratis?

Planifique la escalabilidad en un mundo con menos «paralelismo incómodo»

La necesidad de escribir aplicaciones escalables ha sido importante para los programadores de la comunidad HPC durante años. Ahora, la proliferación de procesadores multinúcleo está haciendo que la escalabilidad sea una prioridad para millones de programadores. Anteriormente, los programas de HPC que escalaban muy bien se llamaban «paralelismos incómodos», pero es inevitable que siempre nos conformaremos con más paralelismo «suficientemente bueno». Cualquier escala y un diseño para seguir escalando será de suma importancia. Los proyectos eficientes serán relativamente poco importantes si un programa no se puede escalar en el futuro. La ampliación progresiva se convertirá en una parte clave del buen diseño de un programa. Un paralelismo menos «incómodo» se convertirá en la norma para la mayoría de los programadores.

El cambio a procesadores multinúcleo significa que todos los programadores tendrán que incorporar nuevas técnicas para escribir aplicaciones escalables y adoptar una nueva mentalidad para lograr mejoras adicionales en el rendimiento de las aplicaciones. En el pasado, un programa secuencial mal escrito todavía generalmente se aceleraba a medida que aumentaban las velocidades de reloj del procesador. Sin embargo, ahora nos enfrentamos a la realidad de que un programa de la competencia mal escrito no suele acelerarse a medida que se dispone de más núcleos de procesador. Los programadores de hoy necesitan «pensar en paralelo» y escribir programas en paralelo para aprovechar el potencial de múltiples núcleos de procesador.

Pensar y escribir en paralelo no son tareas fáciles. Como señaló recientemente el profesor de ciencias de la computación Andrew S. Tanenbaum en la conferencia USENIX ’08, «La programación secuencial es realmente difícil y la programación paralela es un paso más allá». Por supuesto, preferiríamos no realizar estas difíciles tareas una y otra vez a medida que se lanzan las arquitecturas de próxima generación. El escalado hacia adelante ofrece un medio para evitar gran parte de ese trabajo repetitivo.

Almuerzo gratis, no cerveza gratis

Como anunció el escritor y programador Herb Sutter hace unos años, «El almuerzo gratis ha terminado». Los programadores ya no pueden contar con la aceleración de sus aplicaciones junto con un aumento continuo en las frecuencias de reloj. ¿Hay un nuevo almuerzo gratis en el horizonte? Claramente, los programadores quieren una forma de maximizar los retornos a largo plazo por el tiempo y el esfuerzo que invierten hoy.

Algunos han sugerido que la reducción de personal es el nuevo almuerzo gratis. El escalado proporciona una forma de evitar la reescritura de código y la repetición de tareas difíciles con el lanzamiento de cada nueva arquitectura. Cuando nuestras aplicaciones se las arreglen para escalar, nuestro software funcionará bien en los procesadores de doble y cuádruple núcleo de hoy en día, al mismo tiempo que aprovechará las arquitecturas de muchos núcleos del mañana.

¿Está subiendo el nuevo almuerzo gratis? Probablemente no sea gratis en el sentido de «cerveza gratis» (como diría Richard Stallman). Cambiar el tamaño requiere algo de trabajo. El objetivo es realizar inversiones hoy que seguirán dando sus frutos en el futuro.

Escalado hacia adelante definido

El escalado hacia adelante es un enfoque para el diseño de software que brindará un rendimiento excepcional en los procesadores de múltiples núcleos de hoy y escalará ese rendimiento en las arquitecturas de muchos núcleos del mañana. El objetivo del escalado hacia adelante es encontrar técnicas que le permitan evitar una reescritura completa del código agregando más núcleos de procesador. ¿Es posible? En muchos casos se ve así. No existe una solución perfecta, pero las opciones disponibles en la actualidad pueden ayudar mucho.

El escalado hacia adelante es diferente del escalado porque el objetivo es un proyecto que se escalará en el futuro, no hoy. Con el tiempo, las herramientas mejoran, los diseños de los procesadores mejoran y la cantidad de datos a procesar aumenta. A medida que hacemos cambios de código modestos con la escalabilidad hacia adelante en mente, necesitamos diseñar una ruta para estos tres factores para que nuestros programas escalen en el futuro. Para hacer esto, necesitamos tener cierta comprensión de cómo las herramientas, los procesadores y nuestros datos pueden cambiar.

Cuando comencemos a diseñar para escalar hacia adelante, recuerde que no necesitamos proporcionar escalado de 100 núcleos hoy. Solo necesitamos un camino para llegar mañana, mientras preservamos la mayoría de las inversiones en software. Llevamos años intentando diseñar software como este, listo para los sistemas del mañana. Ahora el tema de la escala se vuelve más importante.

Diseño para escalabilidad hacia adelante

Los mejores diseños de programas anticipan y se preparan para el futuro mejor que los programas mal diseñados. Los programas que tengan en cuenta la escalabilidad hacia adelante pueden anticipar futuros procesadores de muchos núcleos.

Entonces, ¿cómo podemos llevar a cabo nuestro programa?

Primero, debemos rechazar los métodos de programación que claramente no podrán escalar hacia adelante. Evite el uso de subprocesos nativos como Pthreads, subprocesos de Windows, subprocesos Boost y subprocesos de Java. En general, el código escrito con subprocesos nativos simplemente no durará en el tiempo. Con subprocesos nativos, se codifican demasiadas suposiciones en la programación de nivel inferior.

En su lugar, adoptaremos herramientas y métodos basados ​​en estándares que muestren suficiente paralelismo y nos permitan encontrar oportunidades para procesar más datos. El escalado hacia adelante se facilita mediante el uso de herramientas basadas en estándares que ofrecen abstracciones para el paralelismo. Herramientas como OpenMP, bibliotecas con subprocesos, Intel® Threading Building Blocks (TBB) o bibliotecas Intel® MPI pueden ayudar a garantizar que las técnicas empleadas hoy sigan siendo válidas en el futuro.

Las bibliotecas desempeñarán un papel clave en la ampliación y, sin duda, habrá una gran demanda de bibliotecas bien producidas a medida que los programadores comiencen a crecer. Obviamente, las interfaces de las bibliotecas deberán evolucionar para maximizar las oportunidades que ofrecen las bibliotecas. Muchos desarrolladores ya están simplificando la programación y admitiendo más núcleos mediante el uso de la biblioteca Intel® Math Kernel (Intel® MKL). Intel continuará optimizando la biblioteca a medida que nuestros procesadores evolucionen para ayudar a brindar escalabilidad en los próximos años. Intel® MKL ahora ofrece escalabilidad a miles de procesadores; en el futuro, más bibliotecas podrán hacer lo mismo.

Para obtener los beneficios de la ampliación progresiva, los desarrolladores de software y sus clientes deben elegir el hardware adecuado. En Intel, estamos trabajando para crear sistemas que equilibren la potencia de procesamiento, la capacidad de memoria y el ancho de banda de E / S. Los sistemas equilibrados son esenciales para lograr mejoras en el rendimiento de las aplicaciones a medida que aumenta el número de núcleos. También estamos facilitando una mejor comunicación entre los núcleos del procesador y entre el procesador y la memoria. Nuestro trabajo en la interconexión Intel® QuickPath, respaldada por la arquitectura «Nehalem», promueve la escalabilidad al reducir significativamente la competencia por el ancho de banda del bus.

Escalar hacia adelante se detiene si tenemos que adaptar cada generación de nuestros programas a desequilibrios enormemente diferentes en el diseño del sistema. Obviamente, nadie ofrecerá un equilibrio perfecto, pero Intel entiende que el equilibrio es muy importante para preservar las inversiones en software.

Escalar hacia adelante no es «incómodo»

Algunas aplicaciones escalan muy bien, ya sea que usemos algunas docenas o miles de núcleos. Simplemente ejecutando estas aplicaciones en sistemas a gran escala, podemos lograr ganancias de rendimiento significativas. Estas aplicaciones se han denominado «extrañamente paralelas» debido a la relativa facilidad con la que las aplicaciones han explotado el paralelismo.

En el pasado, lograr una alta eficiencia con estas aplicaciones era fundamental porque se ejecutaban en hardware costoso. Pero lograr esta alta eficiencia tuvo un costo significativo para la productividad del programador. El futuro, al parecer, tendrá hardware más barato y programadores más caros. Puede parecer que podemos estar más relajados acerca de la escalabilidad del programa, pero los programas aún deben ser escalables. La creación de programas paralelos escalables en el futuro para utilizar un mayor número de núcleos es esencial para mejorar el rendimiento en arquitecturas futuras.

Centrarse en la escalabilidad es generalmente un uso mucho mejor de los recursos del programador que centrarse en mejorar la eficiencia de la aplicación. La proliferación de procesadores multinúcleo rentables está reduciendo los costos de procesamiento y la demanda de los clientes de aplicaciones que brinden una eficiencia extrema. Si nuestro programa es escalable, alcanzar el 50% de eficiencia será suficiente si podemos contar con el mismo nivel de eficiencia con la próxima arquitectura. Exprimir la eficiencia de un programa será relativamente insignificante si no logra escalar.

Una vez que hayamos creado un horario escalable, volvamos al vagón del almuerzo gratis. La introducción de cada nueva generación de arquitectura ayudará a mejorar el rendimiento de las aplicaciones. Podemos concentrarnos en agregar nuevas funciones a la aplicación en lugar de reescribir el código solo para estar al día con los cambios.

No es necesario aplicar prácticas de programación deficientes

Un programa bien escrito hoy debe ser escalable. Las buenas elecciones permitirán que un programa se expanda, pero las malas elecciones serán una mala inversión.

¿El mayor enfoque en la competencia por los sistemas multinúcleo nos dará más opciones para HPC o MPI seguirá siendo el método de programación preferido para programas escalables? Si los programadores de HPC continúan confiando en MPI, ¿los programadores que no son de HPC también recurrirán a MPI? A corto plazo, MPI seguirá dominando los programas más escalables. Pero a la larga, quizás todo sea posible.

Por ahora, el escalado es claramente un tema nuevo e importante para la mayoría de los programadores. La elección de soluciones con mejores opciones de escala será fundamental para proteger nuestras inversiones.

El software Intel ofrece opciones para ayudarlo a progresar:

Recuerda compartir en una historia de tu Instagram para que tus amigos lo sepan

??? ? ? ???

Comparte