Transcript 02 Arquitectura y Herramientas de Software ver3.0.01
Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software
Un vistazo a la arquitectura y las herramientas
Discutiremos: Qué materiales hay disponibles Qué prácticas hay disponibles En qué cursos pueden aplicarse los materiales Discusiones de alto nivel sobre la tecnología
Objetivos
Al termino de este módulo, será capaz de: Estar al tanto y tener acceso a varias horas de temas relacionados con MC incluyendo arquitectura, tecnología del compilador, tecnología de caracterización, OpenMP, y efectos de la caché Será capaz de crear ejercicios y como evitar peligros comunes en en paralelización asociados con algunos sistemas MC- tales como una Pobre Utilización de la Caché, False Sharing y desbalanceo de carga Será capaz de crear ejercicios en como utilizar directivas del compilador y switches para mejorar el comportamiento en cada núcleo Será capaz de crear ejercicios en como aprovechar las herramientas para identificar rápidamente problemas de balanceo de carga, pobre reutilización de la caché y problemas de False Sharing
Agenda
Motivación de Multi-core Un vistazo a las herramientas Aprovechar las características de Multi-core Aprovechar las características de paralelismo dentro de cada núcleo (SSEx) Evitar efectos de la Memoria/Cache
¿Por qué la industria está moviéndose a la tecnología Multi-core?
Para mejorar el rendimiento y reducir el consumo de energía Es más eficiente ejecutar varios núcleos a una menor frecuencia que un solo núcleo a una frecuencia más alta
Potencia y Frecuencia
359
Curva de Potencia vs. Frecuencia para arquitecturas con un núcleo
309 259 209 159 109 Baja de Frecuencia = Mayor baja de potencia
espacio para un segundo núcleo
59 9 0 0.2
0.4
0.6
0.8
1 1.2
1.4
1.6
1.8
2 2.2
Frecuencia (GHz)
2.4
2.6
2.8
3 3.2
3.4
Agenda
Motivación de Multi-core Un vistazo a las herramientas Aprovechar las características de Multi-core Aprovechar las características de paralelismo dentro de cada núcleo (SSEx) Evitar efectos de la Memoria/Cache
Optimizaciones independientes del procesador
/Od /O1 /O2 /O3 /Zi Optimizaciones desabilitadas Optimiza el tamaño del binario y velocidad: Código Servidor Optimiza velocidad (default): Vectorización en Intel 64 Optimiza Caché de Datos: Código cíclico con operaciones de punto flotante Crea símbolos para debug /Ob0 Apaga “inlining” lo que ayuda a las herramientas de análisis a hacer un mejor trabajo
Optimizaciones de Vectorización
QaxSSE2 QaxSSE3 Intel Pentium 4 y procesadores Intel compatibles.
Procesadores de la familia Intel(R) Core(TM) con soporte SSE3 (Streaming SIMD Extensions 3) QaxSSE3_ATOM Puede generar instrucciones MOVBE para procesadores Intel y puede optimizar para el procesador Intel® Atom™ y tecnología Intel Centrino® Atom™ SSE3 Intel tiene una larga historia de proveer switches de auto vectorización junto con el soporte de nuevas instrucciones del procesador y soporte hacia atrás para viejas instrucciones QaxSSSE3 Procesadores Intel(R) Core(TM)2 con SSSE3 Los desarrolladores deben echar un ojo a los nuevos desarrollos para sacar provecho del poder de los últimos procesadores QaxSSE4.2 Puede generar Intel(R) SSE4 instrucciones eficientes para aceleración en el procesamiento de strings y texto soportadas por procesadores Intel(R) Core(TM) i7. Puede generar vectorización Intel(R) SSE4 y aceleración multimedia, Instrucciones Intel(R) SSSE3, SSE3, SSE2, y SSE y puede optimizar para la familia de procesadores Intel(R) Core(TM).
Más Optimizaciones Avanzadas
Qipo
Optimización interprocedural hace un análisis topológico de la aplicación incluyendo todos los códigos fuentes. Con /Qipo (-ipo) el análisis se extiende todos los códigos fuentes. En otras palabras la generación de código en el módulo A puede mejorarse con lo que está sucediendo en el módulo B. Puede habilitar otras optimizaciones como autoparallel y autovectorr
Qparallel Qopenmp
Habilita el auto paralelizador para genenerar código multihilos en ciclos que pueden ejecutarse en paralelo de manera segura Habilita al compilador para generar código multihilos basado en directivas de OpenMP*
Parallel Studio para encontrar donde paralelizar
Parallel Studio lo usaremos en varias prácticas para encontrar los lugares apropiados para paralelizar el código Parallel Amplifier será usado específicamente para encontrar hotspots donde el código de la aplicación gasta más tiempo del CPU Parallel Amplifier no requiere instrumentar el código para encontrar los hotspots, se recomienda compilar con información de símbolos /Zi Compilar con /Ob0 apaga el “inlining” y algunas veces es mejor el análisis en Parallel Studio
Parallel Amplifier Hotspots
¿Qué muestra el análisis de hotspots?
¿Qué hay en los detalles?
El stack de llamadas
El stack de llamadas (call) muestra la relación llamado/llamador entre funciones en el código
Encontrar paralelismo potencial
Agenda
Motivación de Multi-core Un vistazo a las herramientas Aprovechar las características de Multi-core Vistazo a alto nivel – Arquitectura Intel® Core Aprovechar las características de paralelismo dentro de cada núcleo (SSEx) Evitar efectos de la Memoria/Cache
Jerarquía de Memoria
~ 1’s Ciclo ~ 1’s - 10 Ciclos CPU Caché L1 Caché L2 ~ 100’s Ciclos Disco Magnético ~ 1000’s Ciclos Memoria principal
Intel® Core™ Microarchitecture – Memory Sub-system
Arquitectura vista desde un alto nivel
Procesador Intel Core 2 Duo Procesador Intel Core 2 Quad
A A A E C B A A A E E El Dual Core tiene caché compartida Quad core tiene ambos: caché compartida y separada B E E C2 B E Línea de caché 64B Memoria Memoria Línea de caché 64B A = Estado de la Arquitectura C = Caché nivel 2 E = Motor de ejecución e interrupciones B = Interfase con el bus
Intel® Core™ Microarchitecture – Memory Sub-system
Con cachés separadas
Memoria Front Side Bus (FSB)
Mover la línea de caché L2 ~Medio acceso a memoria
CPU1
Linea de caché
CPU2
Intel® Core™ Microarchitecture – Memory Sub-system
Ventajas de la caché compartida– usando tecnología Advanced Smart Cache®
Memoria Front Side Bus (FSB)
L2 está compartida: No se requiere mover la línea de la caché Línea de la caché
CPU1 CPU2
False Sharing
Problema de rendimiento en programas donde los núcleos pueden escribir a diferentes direcciones de memoria PERO en la misma línea de la caché Conocido como efecto Ping-Pong – la línea de la cache se mueve entre núcleos Core 0 Core 1 X[0] = 0 X[1] = 0 X[0] = 1 X[0] = 2 X[1] = 1 compartidas separadas 1
Agenda
Motivación de Multi-core Un vistazo a las herramientas Aprovechar las características de Multi-core Aprovechar las características de paralelismo dentro de cada núcleo (SSEx) Evitar efectos de la Memoria/Cache
Ejecución Super-Escalar
Varias operaciones ejecutadas en un solo núcelo al mismo tiempo Permiten paralelismo SIMD Muchas instrucciones pueden retirarse en un ciclo de reloj
Historia de las instrucciones SSE
Intel SSE
1999
Intel SSE2
2000
Intel SSE3
2004
Intel SSSE3
2006
Intel SSE4.1
70 instr 144 instr 13 instr 32 instr Vectores Simple Precision Vectores Doble precision instrucciones Operacio nes de 64/128-bit vector
47 instrucciones
8/16/32
Aceleradores de Video
empaquetar y desempaquetar
contrucción para gráficos Instrucciones avanzadas de vectores
•
Intel SSE4.2 (procesamiento XML desde finales de 2008)
•
ver - http://download.intel.com/technology/architecture/new instructions-paper.pdf
Tipos de datos SSE y Aceleración Potencial
SSE 4x floats 2x doubles 16x bytes SSE-2 SSE-3 SSE-4
aproximadamente la misma que la
4x 32-bit enteros
cantidad de empaquetamiento Ejemplo. para floats – aceleración ~ 4X
1x 128-bit enteros
Meta de SSE(x)
Procesamiento SIMD Procesamiento Escalar
con SSE(2,3,4)
Modo tradicional
Una instrucción produce múltiples resultados resultado
XMM •Muchas unidades funcionales •Selección de varias instrucciones
+ Y =
funciones
Y y3 y2 + = x1 y1 x0 y0 X + Y X + Y x3+y3 x2+y2 x1+y1 x0+y0
Agenda
Motivación de Multi-core Un vistazo a las herramientas Aprovechar las características de Multi-core Aprovechar las características de paralelismo dentro de cada núcleo (SSEx) Evitar efectos de la Memoria/Cache
Efectos de la caché
Los efectos de la caché pueden incidir en la velocidad de una aplicación tanto como 10x o hasta 100x Para sacar provecho de la jerarquía de la caché en la máquina, se deben reusar los datos en la caché lo más que se pueda Evitar acceder direcciones de memoria no contigua, especialmente en ciclos Se puede considerar el intercambio en ciclos para acceder datos de una forma más eficiente
Intercambio de ciclos
for(i=0;i
Saltar en la memoria puede causar fallos de la caché – particularmente para arreglos de tamaño 2^n
Muy importante para vectorizar
Acceso de la memoria por paso de unidades (C/C++)
k a a00 a10 a01 a11 a02 a12 a03 a13 k Próximo indice de ciclo más rápido Indice de memoria consecutivo i ai0 aN-10 ai1 ai2 ai3 a0N-1 a1N-1 aiN-1 aN-1N-1 b j El incremento de indice más rápido Acceso de memoria consecutivo k b00 b10 b01 b11 bk0 bN-10 bk1 b02 b12 b03 b13 bk2 bk3 j b0N-1 b1N-1 bkN-1 bN-1N-1
Utilización pobre de la caché – con huevos
•Un cartón representa una línea de cache Sartén listo para freir huevo en específico •El Refrigerador representa la memoria principal •Mesa representa la caché •Cuando la mesa se llena –los cartones viejos se expulsan y los huevos se desperdician Refrigerador
: :
•Solicitar un huevo que no está en la mesa, trae un nuevo cartón de huevos del refrigerador, pero el usuario solo frie un huevo de cada cartón •Cuando la mesa se llena, se expulsa un cartón viejo
Buena utilización de la caché - con huevos
•Solicitar un huevo trae un nuevo cartón de huevos del refrigerador •El usuario solicita específicamente huevos del cartón que ya está en la mesa •El usuario frie todos los huevos en el cartón antes de solicitar un huevo del siguiente cartón Refrigerador
: :
La expulsión de un carton no afecta porque ya freímos todos los huevos en los cartones que están en la mesa – tal como el usuario previo