Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.
-
Upload
chico-osuna -
Category
Documents
-
view
11 -
download
0
Transcript of Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.
Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software
Junio 2009
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, serpa 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
Curva de Potencia vs. Frecuencia para arquitecturas con un núcleo
9
59
109
159
209
259
309
359
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2 2.2 2.4 2.6 2.8 3 3.2 3.4
Frecuencia (GHz)
Po
ten
cia
(w
)
Baja de Frecuencia= Mayor baja de potenciaMenor Frecuencia nos da espacio para un segundo
núcleo
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 Optimizaciones desabilitadas
/O1 Optimiza el tamaño del binario y velocidad:
Código Servidor
/O2 Optimiza velocidad (default):
Vectorización en Intel 64
/O3 Optimiza Caché de Datos:
Código cíclico con operaciones de punto flotante
/Zi 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 Intel Pentium 4 y procesadorres Intel compatibles.
QaxSSE3 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
QaxSSSE3 Procesadores Intel(R) Core(TM)2 con SSSE3
QaxSSE4.1 Intel(R) 45nm Hi-k Nueva generación microarquitectura Intel Core(TM) con soporte para instrucciones de vectorización SSE4 y aceleración multimedia
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).
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
Los desarrolladores deben echar un ojo a los nuevos desarrollos parasacar provecho del poder de los últimos procesadores
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 Habilita el auto-paralelizador para genenerar código multihilos en ciclos que pueden ejecutarse en paralelo de manera segura
Qopenmp Habilita al compilador para generar código multihilos basado en directivas de OpenMP*
Actividad 1 – Auto-Paralelización
Objetivo: Usar auto-paralelización en un código simple para obtener experiencia usando la prestación de auto-paralelización del compilador
Sigue la actividad VectorSum del cuaderno de prácticas Prueba la compilación AutoParallel en la práctica
llamada VectorSum Crédito Extra: paraleliza manualmente y observa que
tanto se puede sobrepasar la opción AutoParallel – ver bloques de construcción de openmp para hacer esta prueba
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
Actividad 2 – Análisis de Hotspots del Mandelbrot
Objetivo: Usar el muestreo para encontrar algo de paralelismo en la aplicación Madelbrot
Sigue la práctica llamada Mandelbrot Sampling en el cuaderno de prácticas
Identifica ciclos que pueden ser paralelizados
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
Plataforma móvil optimizada • 1-4 Núcleos• Tamaños de caché L2 3/6MB• Línea de la caché L2 64 Bytes• 64-bits
6M
6M L24M
4M L2
Plataforma de escritorio optimizada
• 2-4 Núcleos• Tamaños de la caché L2 2X3, 2X6
MB• Línea de la caché 64 Bytes• 64-bits
Plataforma de servidor optimizada
• 4 Núcleos• Cachés L2 2x6• Línea de la caché L2 64 Bytes• Soporte DP/MP• 64-bits
2 cores2 cores 4 cores4 cores
**Feature Names TBD
6M2X6M
L22X3M L2
2 cores2 cores 4 cores4 cores
12M
4 cores4 cores
2X6M L2
12M
Instante en el tiempo durante Penryn, Yorkfield, harpertown
Los desarrolladores de software deben saber cuántos núcleos, tamaño de la línea de la cache y tamaños de la caché para hacer frente a los efectos de la caché
Arquitectura Intel® Core 2
Jerarquía de Memoria
Disco Magnético
Memoria principal
Caché
L2 Caché L1CPU
~ 1’s Ciclo ~ 1’s - 10 Ciclos
~ 100’s Ciclos
~ 1000’s Ciclos
Arquitectura vista desde un alto nivel
A A A A
E E E E
C1 C2
B B
A A
E E
C
B
Procesador Intel Core 2 Duo
Procesador Intel Core 2 Quad
A = Estado de la Arquitectura E = Motor de ejecución e interrupcionesC = Caché nivel 2 B = Interfase con el bus
Memoria MemoriaLínea de caché 64B Línea de caché 64B
El Dual Core tiene caché compartida
Quad core tiene ambos: caché compartida y separada
Intel® Core™ Microarchitecture – Memory Sub-system
Con cachés separadas
CPU1 CPU2
Memoria
Front Side Bus (FSB)
Linea de caché
Mover la línea de caché L2~Medio acceso a memoria
Intel® Core™ Microarchitecture – Memory Sub-system
CPU2
Ventajas de la caché compartida– usando tecnología Advanced Smart Cache®
CPU1
Memoria
Front Side Bus (FSB)
Línea de la caché
L2 está compartida:No se requiere mover la línea de la caché
Intel® Core™ Microarchitecture – Memory Sub-system
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
Tie
mpo
1 0
X[0] = 1X[1] = 1
1
X[0] = 0 X[1] = 0
10
X[0] = 2
1 12
False Sharing no es un problema en cachés
compartidas
Es un problema en cachés separadas
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 F
P
SIM
D
INT
Varias unidades de ejecución
Permiten paralelismo SIMD
Muchas instrucciones pueden retirarse en un ciclo de reloj
Varias operaciones ejecutadas en un solo núcelo al mismo tiempo
IntelIntel
SSESSEIntelIntel
SSE4.1SSE4.1
IntelIntel
SSE2SSE21999 2000
IntelIntel
SSE3SSE32004
IntelIntel
SSSE3SSSE32006
200770 instr
Vectores Simple-Precision
Streaming operations
144 instr
Vectores Doble-precision
8/16/32
64/128-bit vector entero
13 instr
Datos Complejos
32 instr
Decodifi-cación
47 instrucciones
Aceleradores de Video
bloques de contrucción para gráficos
Instrucciones avanzadas de vectoresContinuará con:
• Intel SSE4.2 (procesamiento XML a finales de 2008)
• ver - http://download.intel.com/technology/architecture/new-instructions-paper.pdf
Historia de las instrucciones SSE
Larga historia de nuevas instruccionesLa mayoría requieren instrucciones de empaquetar
y desempaquetar
Tipos de datos SSE y Aceleración Potencial
4x floats4x floatsSSE
16x bytes16x bytes
8x 16-bit8x 16-bit shortsshorts
4x 32-bit4x 32-bit enterosenteros
2x 64-bit enteros2x 64-bit enteros
1x 128-bit enteros1x 128-bit enteros
2x doubles2x doubles
SSE-2SSE-3SSE-4
Aceleración potencial (en el ciclo destino) aproximadamente la misma que la cantidad de empaquetamientoEjemplo. para floats – aceleración ~ 4X
Meta de SSE(x)
++
Procesamiento Escalar Modo tradicional Una instrucción produce un
resultado
XX
YY
X + YX + Y
==
Procesamiento SIMD con SSE(2,3,4) Una instrucción produce
múltiples resultados
++
x3x3 x2x2 x1x1 x0x0
y3y3 y2y2 y1y1 y0y0
x3+y3x3+y3 x2+y2x2+y2 x1+y1x1+y1 x0+y0x0+y0
XX
YY
X + YX + Y
==
•Usa toda la amplitud de los registros XMM•Muchas unidades funcionales•Selección de varias instrucciones•No todos los ciclos pueden vectorizarse
•No puede vectorizar la mayoría de las llamadas a funciones
Actividad 3 – IPO Vectorización Asistida
Objetivo: Explorar como inlining una función puede dramáticamente mejorar el rendimiento permitiendo la vectorización de un ciclo con una llamada a función
Abrir el folder SquareChargeCVectorizationIPO y usar “nmake all” para construir el proyecto desde la línea de comandos
Para añadir switches para hacer el ambiente usar nmake all CF=“/QxSSE3”
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 memoria en 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
Muy importante para vectorizar
for(i=0;i<NUM;i++) for(j=0;j<NUM;j++) for(k=0;k<NUM;k++) c[i][j] =c[i][j] + a[i][k] * b[k][j];
for(i=0;i<NUM;i++) for(k=0;k<NUM;k++)
for(j=0;j<NUM;j++) c[i][j] =c[i][j] + a[i][k] * b[k][j];
Índice de ciclo rápido
Índice de ciclo rápido
Saltar en la memoria puede causar fallos de la caché – particularmente
para arreglos de tamaño 2^n
Acceso de la memoria por paso de unidades (C/C++)
bN-10bN-10 bN-1N-1bN-1N-1
bk0bk0 bk1bk1 bk2bk2 bk3bk3 bkN-1bkN-1
b10b10 b11b11 b12b12 b13b13 b1N-1b1N-1
b00b00 b01b01 b02b02 b03b03 b0N-1b0N-1
j
j
b
k
El incremento de indice más rápidoAcceso de memoria consecutivo
aN-10aN-10 aN-1N-1aN-1N-1
ai0ai0 ai1ai1 ai2ai2 ai3ai3 aiN-1aiN-1
a10a10 a11a11 a12a12 a13a13 a1N-1a1N-1
a00a00 a01a01 a02a02 a03a03 a0N-1a0N-1
k
a
k
i
Próximo indice de ciclo más rápidoIndice de memoria consecutivo
Sartén listo para freir huevos
Refrigerador
Utilización pobre de la caché – con huevos
::
•Un cartón representa una línea de cache
•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
•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
El usuario solicita un huevo en específico
El usuario solicita un segundo huevo en específico
El usario solicita un tercer huevo – El cartón se expulsa
Refrigerador
El usuario previo ha usado todos los huevos en la mesa
::
Buena utilización de la caché - con huevos
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
El usuario solicita los huevos del 1 al 8
El usuario solicita los huevos del 9 al16
El usuaurio eventualmente solicita todos los 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
Actividad 4 – Efectos de la caché en la multiplicación de matrices
Objetivo: Explorar el impacto de un uso pobre de la caché en el rendimiento con Parallel Studio y ver como manipular los ciclos para lograr significativamente un mejor uso de la caché y rendimiento
BACKUP