Está en la página 1de 2

Optimización de los cálculos de la plantilla para las GPU NVIDIA Kepler

Presentamos una serie de técnicas de optimización para los cálculos de stencil
en GPU NVIDIA Kepler. Los cálculos de Stencil con cuadrículas regulares se
habían portado a las generaciones anteriores de GPUs NVIDIA con mejoras
significativas de rendimiento gracias al mayor ancho de banda de memoria que
los sistemas convencionales de sólo CPU. Sin embargo, debido a los cambios
arquitectónicos introducidos con la última generación de la arquitectura de la
GPU, Kepler, mostramos que las estrategias de implementación existentes
utilizadas para esas GPUs más antiguas no son tan efectivas en Kepler como
antes. Para aprovechar al máximo el rendimiento potencial de la última
generación de la arquitectura GPU, nuestro método de implementación utiliza
la memoria compartida para una mejor localidad de datos combinada con la
especialización warp para un mayor rendimiento de la instrucción. Nuestro
método alcanza aproximadamente 80% del rendimiento máximo estimado por
el modelo roofline, e incluso mayor rendimiento con el bloqueo temporal.

En este trabajo se presentaron los estudios de rendimiento de un ensayo de 7
puntos 3-D Stencil en las arquitecturas de GPU recientes de NVIDIA. Nuestro
experimento Las evaluaciones muestran que el bloqueo con Memoria es
esencial para el stencil para lograr un rendimiento óptimo En Kepler. Esto solía
ser el caso de las personas mayores Generaciones pre-Fermi de GPUs NVIDIA,
pero se había considerado Innecesarias para los stencils con rejillas regulares
Hardware L1 caché de la GPU Fermi a menudo funciona muy eficazmente.
En general, alcanzamos aproximadamente el 80% Rendimiento máximo
estimado por el modelo del techo, e incluso Mayor rendimiento con bloqueo
temporal en Kepler. Mientras Nuestros experimentos actuales se limitan a la
plantilla de 7 puntos,
Esperamos que los resultados aquí presentados sean aplicables A otras
plantillas tridimensionales también.
Las optimizaciones de bloqueo de memoria compartida, sin embargo, Costo no
trivial de la transformación de código. Por ejemplo, Mientras que la plantilla
original se puede escribir con menos de 20 Líneas de código en CUDA no
optimizado, la optimización completa Kernel toma más de 300 líneas de código,
resultando en 10Veces el aumento del tamaño del código. Dado que las aplicaciones manuales
Aplicaciones a escala completa que consisten en, por ejemplo, decenas de
Granos más grandes de la plantilla serían prohibitivamente costosos,
automatizados Técnicas de transformación para estas optimizaciones Necesitan
ser desarrollados. Planeamos extender nuestro programa de Marco de plantilla,

para generar automáticamente CUDA Con las optimizaciones mostradas para ser efectivas en este estudiar .Physis.