Benchmarking Autotuning para GPUs: Un Nuevo Enfoque
Una nueva suite evalúa algoritmos de optimización para el rendimiento de GPU.
― 14 minilectura
Tabla de contenidos
- Antecedentes sobre GPUs y Desafíos de Rendimiento
- Limitaciones de los Conjuntos de Pruebas Existentes
- Características del Conjunto de Pruebas
- La Importancia de la Portabilidad en el Ajuste
- Analizando las Características de los Benchmarks
- Trabajos Relacionados en Autotuning
- Núcleos Comunes de GPU en el Conjunto de Pruebas
- Diseño Experimental
- Resultados y Discusión
- Portabilidad del Rendimiento
- Conclusión y Futuras Direcciones
- Fuente original
- Enlaces de referencia
A medida que las computadoras se vuelven más complejas, con una mezcla de unidades de procesamiento como CPUs y GPUs, se hace más difícil para los programadores mantener su software funcionando de manera eficiente. Los autotuners son herramientas diseñadas para ayudar gestionando detalles de Optimización para que los usuarios puedan ejecutar su código bien en diferentes tipos de sistemas. Se han desarrollado varios frameworks de Autotuning, pero no hay mucha investigación que compare estas herramientas porque mover un código ajustable de un framework a otro usualmente requiere mucho trabajo manual.
Este artículo habla sobre un nuevo conjunto de pruebas de referencia dirigido a evaluar qué tan bien funcionan diferentes algoritmos de optimización con autotuners modernos que apuntan a GPUs. Este nuevo conjunto incluye núcleos de GPU ajustables que reflejan tareas del mundo real. Permite la comparación entre varios algoritmos de optimización, mientras también examina aspectos como cómo se puede optimizar el código y qué tan bien puede funcionar en diferentes sistemas.
El conjunto de pruebas tiene cinco características clave: qué tan rápido puede alcanzar un rendimiento óptimo, los desafíos de encontrar las mejores Configuraciones, la mejora máxima de rendimiento posible, cuán importantes son las diferentes características para el rendimiento, y qué tan bien funcionan las configuraciones en diferentes sistemas. Los hallazgos muestran que los ajustes para la optimización pueden afectar enormemente el rendimiento, y hay una gran necesidad de métodos de optimización integrales. Si bien la relevancia de cada ajuste se mantiene constante entre diferentes tipos de GPU, los mejores valores para esos ajustes difieren de un tipo a otro.
Nuestros hallazgos también enfatizan la importancia de ajustar cada aplicación para una configuración de hardware específica. Simplemente copiar la mejor configuración de un tipo de GPU a otro puede resultar en un rendimiento que es solo del 58.5% al 99.9% tan bueno como el rendimiento óptimo en el nuevo sistema. Esto demuestra que el autotuning es vital para la computación moderna y subraya la utilidad de nuestro conjunto de pruebas de referencia en el estudio de métodos de optimización y su efectividad.
Antecedentes sobre GPUs y Desafíos de Rendimiento
En los últimos años, las computadoras han avanzado significativamente en términos de capacidades. Las Unidades de Procesamiento Central (CPUs) siguen siendo la columna vertebral de las máquinas modernas, pero ha habido un aumento notable en el uso de Unidades de Procesamiento Gráfico (GPUs) y otros aceleradores para mejorar el rendimiento. Estas herramientas son bastante efectivas, pero también hacen que sea más complicado optimizar el software.
Los sistemas de Computación de Alto Rendimiento (HPC), que utilizan muchas de las supercomputadoras más poderosas del mundo, combinan CPUs y GPUs. Esta mezcla puede complicar el proceso de optimización de software ya que los diferentes componentes pueden evolucionar rápidamente. Los programadores pasan mucho tiempo asegurándose de que su software funcione bien en estos sistemas, pero a medida que se vuelven más intrincados, entender cómo funciona todo junto se torna más difícil.
Para ayudar a abordar este problema, a menudo se utilizan técnicas como la optimización de compiladores. Estos métodos ayudan a dar sentido a los sistemas y establecer reglas sobre cómo mejorar el código. Aunque estas reglas pueden ayudar a hacer grandes ajustes sin cambiar la función general del software, también dependen de estrategias generales que no siempre producen los mejores resultados en todos los sistemas.
En muchos casos, una regla general no se adapta bien a todos los diferentes tipos de arquitecturas. En su lugar, un enfoque de prueba y error, conocido como autotuning, a veces puede ser la mejor opción. Busca minimizar la necesidad de que el usuario conozca todos los detalles de la optimización de hardware para que el código pueda ejecutarse de manera eficiente en múltiples generaciones de sistemas.
Limitaciones de los Conjuntos de Pruebas Existentes
Los últimos años han visto varios estudios que presentan mejoras en métodos de optimización para autotuning. Sin embargo, hay pocos análisis comparativos dentro de este campo. Esto se debe en gran parte al extenso esfuerzo necesario para adaptar núcleos ajustables de un framework de ajuste a otro. Para una investigación efectiva sobre el rendimiento de los algoritmos de optimización, un conjunto de pruebas de referencia compatible es crucial.
Los conjuntos de pruebas actuales, como Rodinia, SHOC y PolyBenchGPU, no son suficientes para este propósito. A menudo presentan configuraciones codificadas que pueden hacerlos menos flexibles. Su dependencia de dimensiones fijas del bloque de hilos y suposiciones sobre cómo ejecutar el código hacen que ajustar estos benchmarks sea muy intensivo en recursos.
Los intentos anteriores de crear conjuntos de pruebas ajustables también enfrentaron desafíos al estudiar la efectividad de los algoritmos de optimización. Por ejemplo, un conjunto solo funciona con un único framework de ajuste, mientras que otros ofrecen ganancias de rendimiento limitadas. El nuevo conjunto de pruebas BAT 2.0 tiene la intención de fomentar la investigación en autotuning al presentar núcleos ajustables que son más representativos de aplicaciones reales, como el aprendizaje automático y el procesamiento de imágenes.
El conjunto apoya comparaciones entre algoritmos de optimización al establecer un marco de problemas común tanto para las herramientas de ajuste como para los benchmarks. Incorpora configuraciones más amplias y clases simples que permiten una fácil integración con varios métodos de ajuste, lo que apoya investigaciones adicionales en rendimiento y temas relacionados.
Características del Conjunto de Pruebas
El conjunto de pruebas se centra en varias características clave que ayudan a evaluar su efectividad. Estos aspectos clave incluyen:
- Tasa de Convergencia: Qué tan rápido los algoritmos de optimización pueden alcanzar configuraciones óptimas.
- Centralidad de Mínimos Locales: Esto indica cuán desafiante es encontrar buenas configuraciones dentro del espacio de búsqueda.
- Aceleración Óptima: La mejora máxima de rendimiento alcanzable en relación con una configuración mediana.
- Importancia de Características de Permutación (PFI): Esta métrica ayuda a establecer cómo diferentes parámetros afectan el rendimiento.
- Portabilidad de Rendimiento: El grado en que una configuración optimizada para una GPU funcionará en otra.
Los resultados de las pruebas muestran un impacto notable de los parámetros de optimización en el rendimiento del software y señalan la necesidad de una optimización global. Si bien la relevancia de cada parámetro tiende a ser estable entre varios tipos de GPU, las configuraciones específicas que producen los mejores resultados deben ajustarse para cada arquitectura.
La Importancia de la Portabilidad en el Ajuste
La necesidad de autotuning se hace aún más clara al considerar la portabilidad del rendimiento. El rendimiento de un programa puede variar significativamente entre diferentes sistemas, incluso si el software real se comporta de la misma manera. Una configuración que funciona bien en una GPU puede no rendir de la misma manera en otra. Es importante usar el hardware de manera eficiente para lograr los mejores resultados.
Bibliotecas como ATLAS ayudan con esto ajustando automáticamente sus configuraciones basadas en el hardware que se está utilizando. Esto reduce el trabajo manual necesario para afinar las configuraciones para cada nuevo sistema.
Para evaluar cuán transferibles son las configuraciones, se pueden determinar los ajustes óptimos para el sistema original de GPU y luego evaluar qué tan bien funcionan estos ajustes en otros sistemas. Este análisis puede identificar cuán sensibles son las configuraciones a cambios de hardware y mostrar las diferencias de rendimiento entre varias arquitecturas.
Analizando las Características de los Benchmarks
Un método para evaluar qué parámetros influyen más en el rendimiento del software es a través del análisis de importancia de características. Esta idea ayuda a identificar qué características en un conjunto de datos tienen un efecto significativo en el resultado del modelo. Diferentes métodos pueden calcular la importancia de características, y técnicas como la Importancia de Características de Permutación (PFI) pueden ser particularmente informativas.
Para este estudio, se utilizó PFI para evaluar la importancia de características. El proceso implica medir cómo disminuye el rendimiento de un modelo cuando los valores de un parámetro se desordenan aleatoriamente. Al entrenar un modelo con los datos originales, luego desordenar y volver a entrenar, se pueden comparar métricas de rendimiento para ver cómo cada parámetro afecta el resultado.
Otra métrica útil es la proporción de centralidad, que ayuda a cuantificar la dificultad de ajustar para GPUs. Esta métrica analiza el gráfico de flujo de adecuación que representa todos los puntos en el espacio de búsqueda, revelando qué tan fácil o difícil podría ser para los algoritmos de búsqueda local encontrar configuraciones con mejor rendimiento.
Trabajos Relacionados en Autotuning
Trabajos anteriores en el campo del autotuning, incluidos conjuntos de pruebas desarrollados por diversos investigadores, han mostrado limitaciones que obstaculizan su efectividad. Por ejemplo, muchos benchmarks actualmente disponibles tienden a tener espacios de búsqueda pequeños, que pueden no ser lo suficientemente amplios para apoyar estudios interesantes de autotuning.
Algunos frameworks están limitados a un solo método de ajuste, y otros no producen mejoras de rendimiento significativas. Para remediar esto, el nuevo conjunto BAT fue diseñado para incluir benchmarks con espacios de búsqueda más grandes y mejores potenciales de rendimiento.
El marco de Conocimiento Colectivo (CK) es otro enfoque notable que busca mejorar el benchmarking y la reproducibilidad en este campo. Además, existen varios conjuntos de pruebas diseñados para la Optimización de Hiperparámetros (HPO), aunque pueden no abordar completamente las necesidades específicas del autotuning de GPU.
Núcleos Comunes de GPU en el Conjunto de Pruebas
El conjunto de pruebas BAT incluye varios núcleos de GPU bien conocidos que se utilizan ampliamente en diversas aplicaciones, lo que facilita la evaluación del rendimiento de algoritmos alternativos de optimización.
GEMM (Multiplicación de Matrices Generalizada)
El núcleo GEMM realiza multiplicación de matrices y es parte de las especificaciones de álgebra lineal conocidas como BLAS. El conjunto BAT incluye una versión ajustable de un núcleo GEMM, permitiendo ajustar varios parámetros para optimizar el rendimiento.
N-body
El núcleo N-body calcula interacciones gravitacionales entre múltiples cuerpos. Es particularmente útil en simulaciones astrofísicas debido a su intensidad computacional. Los parámetros ajustables en este núcleo afectan la cantidad de trabajo asignado a cada hilo y cómo se almacenan los datos.
Hotspot
El núcleo Hotspot evalúa distribuciones de temperatura en procesadores basadas en entradas de potencia. El conjunto BAT presenta una versión mejorada que permite más opciones ajustables, facilitando la optimización de este núcleo para diferentes tipos de GPU.
Pnpoly (Punto en Polígono)
Este núcleo se utiliza en bases de datos geoespaciales para determinar si los puntos caen dentro de un área determinada. La versión en el conjunto BAT incluye solo el núcleo de GPU y está diseñada para acomodar el autotuning de manera efectiva.
Convolución
El núcleo Convolución utiliza pesos para calcular píxeles de salida para imágenes, siendo un benchmark común en el procesamiento de imágenes. Los parámetros que se pueden ajustar en este núcleo afectan cómo procesa la entrada y almacena los valores.
Expdist
El núcleo Expdist es parte de un algoritmo de fusión de partículas utilizado en microscopía de localización. Calcula efectivamente la distancia entre partículas mientras considera sus incertidumbres.
Dedispersion
El núcleo Dedispersion se involucra en el procesamiento de señales de radio recibidas del espacio. Está optimizado en el conjunto BAT para ayudar a detectar eventos astronómicos transitorios corrigiendo la dispersión de la señal.
Diseño Experimental
Para probar los benchmarks en el conjunto, se realizaron experimentos en cuatro sistemas equipados con diferentes GPUs de Nvidia, incluyendo la RTX 2080Ti, RTX 3060, RTX 3090 y RTX Titan. El enfoque involucró tanto búsquedas exhaustivas de posibles configuraciones para algunos benchmarks como muestreo aleatorio para otros. De esta manera, los investigadores pudieron evaluar cómo funcionaban diferentes configuraciones en diversas arquitecturas.
Resultados y Discusión
Distribución del Rendimiento
El análisis reveló diferentes patrones de distribución para las configuraciones en varios benchmarks. Cada benchmark exhibió características únicas, pero mostraron similitudes relativas en la distribución del rendimiento a través de diferentes tipos de GPU.
La mayoría de los benchmarks tenían una alta densidad de configuraciones agrupadas alrededor del rendimiento mediano, con menos configuraciones logrando un rendimiento excelente. El benchmark Hotspot se destacó, mostrando un número significativo de configuraciones con rendimiento muy alto.
Convergencia Hacia el Rendimiento Óptimo
Los resultados indicaron un amplio rango en qué tan rápido los benchmarks podían alcanzar el rendimiento óptimo. Algunos benchmarks, como Expdist y N-body, se acercaron rápidamente al 90% del rendimiento óptimo con menos evaluaciones. Otros, como Convolución y GEMM, requirieron muchas más evaluaciones para lograr resultados comparables.
Dificultad de Búsqueda
Se aplicó la métrica de proporción de centralidad para evaluar qué tan difícil es encontrar buenas configuraciones en los benchmarks. Algunos benchmarks, como Convolución, eran más fáciles de optimizar, mientras que otros presentaban mayores desafíos.
Rendimiento Comparado con Picos Teóricos
Al probar los benchmarks, el rendimiento se comparó con el pico teórico para cada GPU. Este análisis ayudó a resaltar qué tan bien se desempeñó cada benchmark en condiciones del mundo real frente a su capacidad máxima.
Perspectivas sobre la Importancia de Características
Usando PFI, el estudio destacó qué parámetros impactaron significativamente el rendimiento. En muchos casos, resultó que no todos los parámetros contribuían por igual a los resultados. Esta revelación puede ayudar a enfocar futuras investigaciones en los parámetros más críticos para la optimización.
Portabilidad del Rendimiento
Se evaluó el rendimiento de las configuraciones a medida que se trasladaban entre diferentes GPUs. Los hallazgos mostraron que, aunque algunas configuraciones funcionaban bien en tipos de GPU similares, otras obtenían un rendimiento deficiente al mudarse a una arquitectura diferente.
Los resultados revelaron que simplemente mover la mejor configuración de una GPU a otra podría tener un impacto significativo en el rendimiento, llevando frecuentemente a resultados menos óptimos. Esto enfatiza la necesidad de ajustes específicos adaptados a cada tipo de hardware.
Conclusión y Futuras Direcciones
A medida que los sistemas HPC basados en GPU se vuelven más complejos, la necesidad de métodos efectivos de autotuning se vuelve más clara. El nuevo conjunto de pruebas BAT ofrece una herramienta integral para estudiar el rendimiento de los algoritmos de optimización en sistemas modernos que utilizan GPUs.
Los resultados del análisis demuestran el efecto de los parámetros de optimización en el rendimiento del software y resaltan la importancia de la personalización de ajustes para cada arquitectura. El conjunto BAT facilita una investigación más profunda en este campo, abriendo oportunidades para entender mejor cómo optimizar el código para varios sistemas de manera efectiva.
El trabajo futuro podría explorar las diferencias entre métodos de ajuste en C++ y Python, así como desarrollar aún más la interfaz para mejorar las capacidades del conjunto BAT. Esta investigación continua busca mejorar las formas en que los programadores pueden optimizar su software para entornos de computación complejos.
Título: Towards a Benchmarking Suite for Kernel Tuners
Resumen: As computing system become more complex, it is becoming harder for programmers to keep their codes optimized as the hardware gets updated. Autotuners try to alleviate this by hiding as many architecture-based optimization details as possible from the user, so that the code can be used efficiently across different generations of systems. In this article we introduce a new benchmark suite for evaluating the performance of optimization algorithms used by modern autotuners targeting GPUs. The suite contains tunable GPU kernels that are representative of real-world applications, allowing for comparisons between optimization algorithms and the examination of code optimization, search space difficulty, and performance portability. Our framework facilitates easy integration of new autotuners and benchmarks by defining a shared problem interface. Our benchmark suite is evaluated based on five characteristics: convergence rate, local minima centrality, optimal speedup, Permutation Feature Importance (PFI), and performance portability. The results show that optimization parameters greatly impact performance and the need for global optimization. The importance of each parameter is consistent across GPU architectures, however, the specific values need to be optimized for each architecture. Our portability study highlights the crucial importance of autotuning each application for a specific target architecture. The results reveal that simply transferring the optimal configuration from one architecture to another can result in a performance ranging from 58.5% to 99.9% of the optimal performance, depending on the GPU architecture. This highlights the importance of autotuning in modern computing systems and the value of our benchmark suite in facilitating the study of optimization algorithms and their effectiveness in achieving optimal performance for specific target architectures.
Autores: Jacob O. Tørring, Ben van Werkhoven, Filip Petrovic, Floris-Jan Willemsen, Jirí Filipovic, Anne C. Elster
Última actualización: 2023-03-15 00:00:00
Idioma: English
Fuente URL: https://arxiv.org/abs/2303.08976
Fuente PDF: https://arxiv.org/pdf/2303.08976
Licencia: https://creativecommons.org/licenses/by-sa/4.0/
Cambios: Este resumen se ha elaborado con la ayuda de AI y puede contener imprecisiones. Para obtener información precisa, consulte los documentos originales enlazados aquí.
Gracias a arxiv por el uso de su interoperabilidad de acceso abierto.