Liberar el potencial de OpenMP a través del análisis de cuellos de botella - Calendae | Informática, Electrónica, CMS, Ciberseguridad

Liberar el potencial de OpenMP a través del análisis de cuellos de botella

Hola otra vez. En el teclado Simón Sánchez y esta vez te voy a contar sobre Liberar el potencial de OpenMP a través del análisis de cuellos de botella

Para aprovechar el potencial computacional de los procesadores en paralelo, los programadores deben identificar los cuellos de botella que limitan su aplicación. Estos cuellos de botella suelen encadenar el rendimiento y evitar que una aplicación alcance su máximo potencial. El análisis de rendimiento generalmente proporciona los datos y la información necesarios para identificar oportunidades para la optimización del programa.

Investigadores del Inderprastha Engineering College identificar cuellos de botella generales para CPU de varios núcleos que utilizan el modelo de programación OpenMP. «Si bien la creación de un programa OpenMP puede ser fácil, solo insertar directivas no es suficiente», señala Alok Katiyar, miembro de la facultad de Inderprastha Engineering College, «el código resultante puede no ofrecer los niveles de rendimiento esperados y puede que no sea ​​obvio cómo remediar la situación «.

En su último trabajo publicado en Revista internacional de informática, Katiyar ofrece reglas generales y consejos sobre el análisis de cuellos de botella para programas OpenMP. En resumen, Katiyar aconseja a los programadores que se concentren en: (1) sincronización, (2) esquemas de acceso a la memoria y (3) desequilibrio de carga.

A continuación se muestran resúmenes de los consejos sugeridos por Katiyar para programadores de OpenMP.

Evite o elimine las regiones críticas. En la sincronización, las áreas críticas y las barreras contribuyen sustancialmente a los costos generales de rendimiento de una aplicación. Siempre que sea posible, los programadores deben evitar grandes regiones críticas reduciendo o eliminando la cantidad de código dentro de una región. En áreas críticas, un subproceso principal generalmente se ejecuta de forma aislada mientras que otros subprocesos están inactivos. Este mecanismo asegura que la región crítica se ejecute de forma atómica. El rendimiento deficiente suele estar relacionado con la cantidad de regiones críticas y el tamaño de esa región.

Optimice los patrones de acceso mediante transformaciones de bucle. Los patrones óptimos de acceso a la memoria se caracterizan por el uso eficaz de la jerarquía de la memoria. Los bucles de intercambio, desenrollado, fusión y fisión son ejemplos de transformaciones de bucle que pueden mejorar el rendimiento de la aplicación. Interchange se centra en intercambiar bucles internos con bucles externos, que pueden tener una mejora del rendimiento al aprovechar los diseños de memoria. Por ejemplo, un patrón de acceso de orden de fila principal puede recuperar varios elementos de datos en una fila de caché. El desenrollado reduce la sobrecarga asociada con las variables de bucle. Fusion combina dos cuerpos de bucles con límites e iteraciones idénticos, y finalmente la fisión rompe un bucle en múltiples cuerpos de piezas pequeñas. La aplicación de una transformación específica depende de la aplicación.

Equilibre las cargas de trabajo. Las cargas de trabajo desiguales distribuidas en subprocesos hacen que los subprocesos con más trabajo se ejecuten durante más tiempo. El programador debe poder dividir las cargas de trabajo en partes iguales de trabajo para minimizar las diferencias en la ejecución de la carga de trabajo. Para cargas de trabajo estáticas, una programación estática se adapta perfectamente, pero para cargas de trabajo más dinámicas (por ejemplo, el trabajo depende en gran medida de la entrada del programa u otras variables), un programador dinámico es más apropiado. Los programadores pueden aprovechar las programa cláusula en OpenMP para administrar cargas de trabajo estáticas o dinámicas.

Después de aplicar estas optimizaciones a la multiplicación de matrices en OpenMP, Katiyar nota una mejora sustancial en el rendimiento sobre la versión básica no optimizada.

Puedes compartir en una historia de tu Instagram para que tus colegas lo consulten

??? ? ? ???

Comparte