2.8
Conclusiones
En la primera parte de este Capítulo se describe en detalle los fundamentos de la arquitectura Intel Xeon Phi, desde detalles hardware hasta particularidades de su programación. Entre estos detalles de programación destacamos los diversos modos de trabajo que ofrece. En los siguientes Capítulos de la Tesis evaluamos los dos más importantes, el modonativoy el modo deOffload. Asimismo, describimos brevemente la arquitectura CUDA de Nvidia que utilizaremos para comparar las prestaciones con Intel Xeon Phi en el Capítulo 4. Para terminar, hemos presentado una pequeña introducción al nuevo Xeon Phi (Knights Landing) que se comercializará próximamente.
Desde un punto de vista software, hemos descrito los fundamentos de los patrones de cómputoStencil, mostrando con todo detalle su fundamento matemá- tico, el proceso de cómputo y los principales algoritmos que vamos a implementar. En esta Tesis se evalúan tres kernels basados en Stencils 3-D, concretamente el modelo de la ecuación de difusión de calor, el modelo de la ecuación de difusión acústica, y por último, el modelo de la ecuación isotrópica de onda sísmica. Dichos algoritmosStencilvan a ser nuestros códigos de prueba para evaluar el rendimiento de la arquitectura Intel Xeon Phi (Knights Corner).
Parte II
Acelerando patrones
Stencil
3-D en
arquitecturas basadas en Xeon Phi
Capítulo
3
Directrices para programar códigos
Stencil
3-D en Xeon Phi
3.1
Introducción
Los patrones de cómputo Stencilcomprenden una amplia familia de aplicaciones para resolver problemas científicos y de ingeniería de gran calado. Estas apli- caciones se basan en kernels iterativos, que operan a través de una estructura de datos N-dimensional que cambia con el tiempo. El diseño eficiente de este tipo de aplicaciones ha demostrado ser una tarea difícil, siendo un problema ampliamente estudiado por la industria y la academia.
Tradicionalmente, la mayoría de aplicaciones basadas en este tipo de patro-
nesStencilse ha desarrollado en lenguajes de programación de alto nivel como
Matlab [63]. Esto es debido al campo de aplicación de dichos patrones, presentes principalmente en dominios de simulaciones científicas y de ingeniería. Matlab proporciona un punto de entrada accesible para programadores inexpertos (por ejemplo, Ingenieros o Físicos) para crear un modelo de aproximación computacio- nal de su problema de interés. Esta abstracción de la programación de bajo nivel se logra a través de un gran número de librerías matemáticas complejas. Sin em- bargo, esta facilidad de programación por lo general compromete el rendimiento. Además, los lenguajes de programación inherentemente secuenciales conducen a una explotación limitada de los recursos disponibles en los procesadores y aceleradores modernos [68].
Phi trabajando en modo nativo utilizando tres aplicaciones cuyo patrón de cómputo se centra en kernels Stencil: difusión de calor (tamaño de 11 puntos), (2) difusión acústica (tamaño de 7 puntos), y (3) isótropico de onda sísmica (tamaño de 25 puntos). El rendimiento obtenido se compara con el conseguido en una arquitectura Intel Xeon multinúcleo. Además, los cálculos de estoskernelse desarrollan con números de coma flotante en doble precisión para poner al límite las necesidades de ancho de banda de nuestras aplicaciones, y así poder evaluar las mejoras introducidas en la nueva arquitectura de Intel. Partimos de una versión paralela simple (naïve) en C/C++ usando OpenMP (obtenida de forma inmediata de la versión secuencial que implementa en Matlab el Algoritmo 1 descrito en la Sección 2.6.3), para mostrar paso a paso el proceso de paralelización y vectorización, la escalabilidad del código, así como la influencia del tamaño y la forma de los datos de entrada.
3.1.1
Objetivos
El objetivo de este Capítulo es guiar a los desarrolladores de software sin expe- riencia en el desarrollo de códigos Stencil para la arquitectura Intel Xeon Phi. Por ello, consideraremos sólo aquellos aspectos cuya dificultad de programación sea media-baja, es decir, evitamos un desarrollo de bajo nivel que requiera co- nocimientos exhaustivos de la arquitectura como son las operacionesintrinsics
o la programación en ensamblador. A pesar de ello, perseguimos desarrollar un código lo más eficiente posible, apoyándonos en la capacidad que tiene el compilador de Intel para vectorizar y paralelizar, e intentandoexplotaral máximo posible la reutilización del código desarrollado, tanto para la arquitectura Intel Xeón multinúcleo como para el Intel Xeon Phi, realizando una comparativa con el Intel Xeon multinúcleo en términos de rendimiento (expresado en GFLOPs). Los principales aspectos a evaluar son los siguientes:
• Facilidad de programación: El primer punto importante de la arquitectura Xeon Phi es su facilidad de programación. Según Intel, los programas desa- rrollados para sus arquitecturas multinúcleo deberían poder ser compilados y ejecutados directamente sobre la arquitectura Intel Xeon Phi.
• Escalabilidad: La arquitectura Intel Xeon Phi está diseñada para optimizar el rendimiento (throughput) de la aplicación. Esto se consigue gracias a un elevado número de núcleos, y la posibilidad de usar hasta 4 hilos por núcleo (es decir, un total de 244 hilos). Al tener nuestros códigos baseStencilun patrón limitado principalmente por sus accesos a memoria, nos planteamos
3.1. Introducción conocer la escalabilidad que presentan dichos códigos al ir aumentando el número de hilos, tanto en el caso del Xeon multinúcleo como para la arquitectura Xeon Phi.
• Vectorización: El otro gran beneficio del Intel Xeon Phi es la gran anchura que presentan sus unidades vectoriales (512 bits). Este objetivo evalúa la facilidad de conseguir códigos vectorizados manejando adecuadamente la capacidad que tiene el compilador de Intel para auto-vectorizar. Para ayudar al compilador, exploraremos el uso de algunas directivas SIMDespecíficas de la arquitectura, así como el uso de técnicas sencillas para el manejo de los datos (alineamiento y padding). En cualquier caso, como hemos comentado, queremos evitar el uso de construcciones de muy bajo nivel como instrucciones en ensamblador o losintrinsics de Intel.
• Comparativa con el Xeon multinúcleo: De cara a evaluar adecuadamente esta nueva arquitectura, queremos comparar los resultados que obtenemos con aquellos que se obtienen ejecutando los mismos códigos en el procesa- dor anfitrión. Esta comprativa la vamos a realizar en términos del tiempo de ejecución o de los GFLOPs obtenidos indistintamente.
• Influencia de los datos de entrada: Finalmente, queremos evaluar cómo los datos de entrada (su tamaño y su forma) influyen en el rendimiento de estoskernels. Analizamos tres tamaños para las matrices de datos (pequeña, mediana y grande), así como cuatro formas diferentes para la disposición
(layout) de los datos (una cuboide perfecta y tres cubos rectangulares).
3.1.2
Trabajo relacionado
A continuación se ofrece una breve reseña de los principales trabajos relacionados con respecto a la codificación de códigos Stencilpara arquitecturas Intel Xeon e Intel Xeon Phi.
El tema de modelado de cálculosStencilha sido muy estudiado en los últimos años. Los sistemas multinúcleo [51] proporcionan buenas oportunidades de paralelización de aplicaciones basadas en patrones Stencil. Kamil et al. [32] publicaron un modelo sencillo, donde proponían modelos de coste para capturar el rendimiento de losStencil de 7 puntos tomando en cuenta tres tipos de accesos a memoria en una memoria de jerarquía plana. Los autores en [13] presentan una metodología completa para evaluar y predecir el rendimiento del código
fórmulas a través de análisis de regresión para modelar el rendimiento general de cálculos enStencilde 7 y 27 puntos para Jacobi y Gauss-Seidel. La técnica de tiempo de sesgo (time-skewing) también se ha modelado por Strzodka et al. [65], que propusieron un modelo de rendimiento de su algoritmo de tiempo de sesgo de cache exacta (CATS), donde el sistema y el ancho de banda de memoria cache fueron estimados usando un análisis de regresión lineal.
Los autores en [49] introducen una metodología que dirige los esfuerzos del programador hacia las regiones de código con más probabilidades de benefi- ciarse de la migración a Intel Xeon Phi, así como proporcionar estimaciones de aceleración (speedup). Otros investigadores [15] han estudiado la portabilidad y optimización de la prueba del problema básico de simulación N-body para el coprocesador Intel Xeon Phi [70], que es también la base de una serie de aplicaciones en astrofísica computacional y biofísica.
Por último, hay varios libros recientes que muestran las altas capacidades de computación del coprocesador Intel Xeon Phi para muchas aplicaciones HPC, como [40, 28, 57, 56, 52]. También es interesante la contribución de [16]. Específicamente, sobre códigosStenciltenemos las referencias [26, 41], y [4] trata sobre el código de difusión sísmica.