330 likes | 425 Views
Afinando el código paralelo con Intel® Parallel Amplifier. Objetivos. Al término de este módulo será capaz de… Usar Parallel Amplifier para encontrar y arreglar problemas de rendimiento comunes en aplicaciones con hilos. Agenda. Vista a lo que ofrece Intel® Parallel Amplifier
E N D
Objetivos • Al término de este módulo será capaz de… • Usar Parallel Amplifier para encontrar y arreglar problemas de rendimiento comunes en aplicaciones con hilos Tuning Threaded Code with Intel® Parallel Amplifier
Agenda • Vista a lo que ofrece Intel® Parallel Amplifier • Examinar las pantallas de datos disponibles del Parallel Amplifier • Revisar problemas de rendimientos comunes en aplicaciones multihilos • Enfocarse en desbalanceo de carga • Enfocarse en contención de sincronización • Describir las optimizaciones generales para mejorar el rendimiento Tuning Threaded Code with Intel® Parallel Amplifier
Motivación • Desarrollar aplicaciones multihilos eficientes es difícil • Nuevos problemas de rendimiento son producto de la interacción de hilos concurrentes • Carga desbalanceada • Contención de objetos de sincronización • Sobrecarga de la paralelización Tuning Threaded Code with Intel® Parallel Amplifier
Intel® Parallel Amplifier • Herramienta de depuración para software multihilos • Plug-in para Microsoft* Visual Studio* • Identifica problemas de rendimiento en programas multihilos con OpenMP*, Intel® ThreadingBuilding Blocks, e hilos nativos • Localiza cuellos de botella que afectan directamente el tiempo de ejecución Tuning Threaded Code with Intel® Parallel Amplifier
Características de Intel® Parallel Amplifier • Integrado en Microsoft Visual Studio .NET* IDE • Suporta diferentes compiladores • Microsoft* Visual* C++ .NET* • GNU C • Intel ParallelComposer • Instrumentación binaria de aplicaciones • Diferentes pantallas y filtros disponibles para asistir y organizar el análisis • Analizador de Concurrencia – ¿Qué tan bien se están utilizando los recursos (core)? • Analizador de Locks y Waits – ¿Dónde está esperando el programa? Tuning Threaded Code with Intel® Parallel Amplifier
Iniciando con Parallel Amplifier • Construir la aplicación • Generar código con símbolos (-g) • Usar una carga de trabajo más pequeña, pero representativa • No demasiado grande ya que el tiempo de ejecución se incrementa • No demasiado pequeña para asegurarse que los problemas de rendimiento serán evidentes Tuning Threaded Code with Intel® Parallel Amplifier
Iniciando con Parallel Amplifier • Después de la compilación, escoger el tipo de análisis en el menú Tools -> Parallel Amplifier Tuning Threaded Code with Intel® Parallel Amplifier
Actividad 1a • Versión multihilos del código “friendly numbers” • ¿Hay un problema de rendimiento? • Meta • Ejecuta la aplicación a través de Parallel Amplifier • Concurrencia • Locks y Waits • Examina las actividades de los hilos usando diferentes herramientas de análisis y revisando las diferentes pantallas disponibles de esta herramienta Tuning Threaded Code with Intel® Parallel Amplifier
Parallel Amplifier: Informes de Concurrencia • El panel de Análisis de Concurrencia por default muestra Bottom-up • Organizado por función • El histograma muestra la cantidad de concurrencia dentro de una función durante la ejecución • Se usan colores para distinguir el nivel de concurrencia para la plataforma donde se ejecuta
Parallel Amplifier: Informes de Concurrencia • Árbol Top-down • Muestra el árbol de llamadas a los puntos • Muestra en un árbol de llamadas la ruta a los puntos dentro de la ejecución y los niveles de concurrencia de dichas funciones. • Nota: la sección resaltada (azul) corresponde a la función resaltada en la pantalla Bottom-up
Parallel Amplifier: Informes de Concurrencia • Source code Tab • Muestra el código fuente de la función seleccionada • Concurrencia desde las líneas ejecutadas mostradas en la columna “CPU Time”
Parallel Amplifier: Informes de Concurrencia • Pánel de Gráfica de resumen • La sección de texto resume los datos de concurrencia en la parte de arriba del pánel • La sección de la gráfica muestra la cantidad de tiempo gastado por la aplicación ejecutando los niveles de concurencia dados • Tiempo promedio de uso del CPU se mide en la eficiencia paralela • Podemos obtener detalles posicionando el ratón sobre los cuadros en la gráfica
Parallel Amplifier: Pantalla de Locks y Waits • El pánel de análisis de Locks y Waits muestra por default Bottom-up • Organizado por objeto • El histograma muestra la cantidad de tiempo que los hilos experimentan dentro de una función durante la ejecución • Se usan colores para distinguir nivel de concurrencia
Parallel Amplifier: Pantalla de Locks y Waits • Árbol Top-down • Muestra la ruta en el árbol de llamadas a los puntos dentro de la ejecución y el tiempo de espera causado por objetos de sincronización o funciones de E/S
Parallel Amplifier: Pantalla de Locks y Waits • Source code Tab • Muestra las líneas de código fuenta involucradas en regiones críticas de código protegidas por objetos de sincronización identificadas por el Amplifier
Actividad 1b • Versión paralela del código “friendly numbers” • ¿Hay un problema de rendimiento? • Meta • Examina las actividades de los hilos revisando las diferentes pantallas • Determina la utilización del sistema • Identifica cualquier problema de rendimiento Tuning Threaded Code with Intel® Parallel Amplifier
Problemas de Rendimiento Comunes • Carga de trabajo • Distribución impropia del trabajo paralelo • Sincronización • Uso excesivo de datos globales, contención del mismo objeto de sincronización • Sobrecarga del Paralelismo • Dado por la creación de hilos, planificación.. • Granularidad • No hay suficiente trabajo para hacer en paralelo
Ocupado Hilo 0 Ocioso Hilo 1 Hilo 2 Hilo 3 Tiempo Se unen los hilos Inician hilos Carga Desbalanceada • Trabajo desigual nos llevan a hilos ociosos y tiempo desperdiciado
Redistribuye el trabajo a los hilos • Asignación estática • ¿Están asignadas el mismo número de tareas por cada hilo? • ¿Las tareas se llevan diferente tiempo de procesamiento? • ¿Las tareas cambian en un patrón predecible? • Rearregla (static) el orden de asignación a los hilos • Usa asignación dinámica de tareas Tuning Threaded Code with Intel® Parallel Amplifier
Redistribuye el trabajo a los hilos • Asignación dinámica • ¿Hay una tarea grande que está siendo asignada? • Rompe la tarea grande en partes pequeñas • ¿Hay cómputos pequeños aglomerados en una tarea grande? • Ajusta el número de cómputos en una tarea • ¿Más cómputos pequeños en una sola tarea? • ¿Menos cómputos pequeños en una sola tarea? • Heurísticas binarias Tuning Threaded Code with Intel® Parallel Amplifier
Cargas de trabajo Desbalanceadas Tuning Threaded Code with Intel® Parallel Amplifier
Cargas de trabajo Desbalanceadas Tuning Threaded Code with Intel® Parallel Amplifier
Actividad 2 – Carga Desbalanceada • La versión paralela de el programa “Friendly Numbers” • Tiene un problema de rendimiento por balanceo de carga
Hilo 0 Ocupado Hilo 1 Ocioso Hilo 2 En Sección crítica Hilo 3 Tiempo Sincronización • Por definición, la sincronización serializa la ejecución • Contención de locks significa que los hilos estarán ociosos durante más tiempo Tuning Threaded Code with Intel® Parallel Amplifier
Arreglos en la Sincronización • Elimina sincronización • Cara pero necesaria “mal necesario” • Usar almacenamiento local en los hilos • Usar variables locales para resultados parciales, actualiza globales después de los cálculos locales • Asigna espacio en el stack del hilo (alloca) • Usar la API de almacenamiento local en los hilos (TlsAlloc) • Usar actualizaciones atómicas cada que sea posible • Algunas actualizaciones de datos globales pueden usar operaciones atómicas (Interlocked API family)
Actualizaciones Atómicas • Usar los bloques de construcción de OpenMP para si es posible, poner en regiones críticas static int counter; // Rápido #pragma omp atomic counter++; // Lento #pragma omp critical (cLock) counter++; Tuning Threaded Code with Intel® Parallel Amplifier
Arreglos en la sincronización • Reduce el tamaño de las regiones críticas protegidas por objetos de sincronización • Regiones críticas grandes retienen objetos de sincronización durante más tiempo; otros hilos están ociosos más tiempo esperando adquirir los objetos • Solo los accesos a variables compartidas necesitan protegerse Tuning Threaded Code with Intel® Parallel Amplifier
Contención de objetos • Del análisis de Locks y Waits, escoge el objeto con más pobre utilización del CPU • Haz Double-click en el nombre del objeto de sincronización para ir a la línea de código fuente Tuning Threaded Code with Intel® Parallel Amplifier
Actividad 3 • La versión paralela de integración numérica • Tiene serios problemas de rendimiento • Meta • Entender la actividad de los hilos • Usar Parallel Amplifier para examinar la sincronización y su efecto en el rendimiento • Arreglar el problema de rendimiento Tuning Threaded Code with Intel® Parallel Amplifier
Optimizaciones Generales • Optimizaciones Seriales • Optimizaciones seriales a lo largo de la ruta crítica debe afectar tiempo de ejecución • Optimizaciones Paralelas • Reducir contención de objetos de sincronización • Balancear carga de trabajo • Paralelismo funcional • Analiza el beneficio de incrementar el número de procesadores • Analiza el efecto de incrementar el número de hilos en un rendimiento escalable
Intel® Parallel Amplifier Que se Cubrió • Identificar problemas de rendimiento puede ser complicado sin herramientas • Las herramientas se requieren para entender y optimizar la eficiencia paralela y la utilización del hardware • El Parallel Amplifier ayuda a entender la actividad de los hilos en las aplicaciones, utilización del sistema, y rendimiento escalable Tuning Threaded Code with Intel® Parallel Amplifier
Tuning Threaded Code: Intel® Parallel Amplifier for Explicit Threads