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
Curva de Potencia vs. Frecuencia para
arquitecturas con un núcleo
359
Potencia (w)
309
Baja de Frecuencia
=
MayorFrecuencia
baja de potencia
Menor
nos da
259
209
159
espacio para un segundo
núcleo
109
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
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 procesadores 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
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
QaxSSE4.1
45nm Hi-k Nueva generación microarquitectura Intel Core(TM) con soporte
sacar
provecho del Intel(R)
poder
de los
últimos procesadores
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).
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*
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
CPU
~ 1’s - 10 Ciclos
Caché L1
Caché
L2
~ 100’s Ciclos
Memoria
principal
Disco
Magnético
~ 1000’s Ciclos
Intel® Core™ Microarchitecture – Memory Sub-system
Arquitectura vista desde un alto nivel
Procesador Intel Core
2 Duo
A
A
E
E
C
B
Procesador Intel Core 2
Quad
A
A
A
A
E
E
E
E
El Dual Core tiene caché
compartida
C1
Quad core tiene ambos: caché
compartida y separada
B
Línea de caché 64B
Memoria
A = Estado de la Arquitectura
C = Caché nivel 2
Memoria
C2
B
Línea de caché 64B
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
Linea de caché
CPU1
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
Tiempo
Core 0
X[0] = 0
Core 1
X[1] = 0
X[0] = 1
X[1] = 1
False Sharing no es un
X[0] = 2
problema en cachés
compartidas
1
1 Es
0 un problema en1cachés
0
2
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
FP
SIMD
INT
Ejecución Super-Escalar
Varias operaciones ejecutadas en un
solo núcelo al mismo
tiempo de ejecución
Varias unidades
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
2007
Historia
de estar
nuevas
144 instr
13 instrincorporando
32 instr
Vectores
Datos
Decodifiinstrucciones
Complejos
Doblecación
precision
47 instrucciones
La mayoría
requieren
instrucciones
de
8/16/32
Aceleradores de
Video
64/128-bit
empaquetar
y desempaquetar
bloques de
vector
contrucción para
70 instr
Vectores
SimplePrecision
Operaciones de
Streaming
entero
gráficos
Instrucciones
avanzadas de
vectores
• Intel SSE4.2 (procesamiento XML desde finales de 2008)
•
ver - http://download.intel.com/technology/architecture/newinstructions-paper.pdf
Tipos de datos SSE y Aceleración Potencial
SSE
4x floats
2x doubles
16x bytes
16-bit shorts
Aceleración potencial (en el ciclo8xdestino)
SSE-2 aproximadamente la misma que la
SSE-3 cantidad de empaquetamiento 4x 32-bit enteros
SSE-4
2x 64-bit
Ejemplo. para floats – aceleración
~ 4Xenteros
1x 128-bit enteros
Meta de SSE(x)


Procesamiento Escalar
Procesamiento SIMD


Modo tradicional
 Una instrucción produce un
•Usa toda la amplitud
resultado
de
con SSE(2,3,4)
 Una instrucción produce
múltiples
resultados
los
registros
XMM
•Muchas
unidades
X funcionales
x3
x2
x1
X
•Selección de varias instrucciones
+
+
•No todos los ciclos pueden vectorizarse
x0
Y la mayoría
y3 de las
y2 llamadas
y1 a
Y •No puede vectorizar
funciones
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
Índice de
ciclo rápido
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++)
Saltar en la memoria puede causar
for(j=0;j<NUM;j++)
fallos
de la caché – particularmente
c[i][j] =c[i][j] + a[i][k] * b[k][j];
para arreglos de tamaño 2^n

Muy importante para vectorizar
Acceso de la memoria por paso de unidades (C/C++)
k
a
a00
a01
a02
a03
a0N-1
a10
a11
a12
a13
a1N-1
ai0
ai1
ai2
ai3
aiN-1
i
k
Próximo indice de ciclo más rápido
Indice de memoria consecutivo
aN-10
aN-1N-1
j
b
j
El incremento de indice más rápido
Acceso de memoria consecutivo
b00
b01
b02
b03
b0N-1
b10
b11
b12
b13
b1N-1
bk0
bk1
bk2
bk3
bkN-1
k
bN-10
bN-1N-1
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
listo
para
freir
El
usuario
solicita
un
ElSartén
usuario
solicita
un
El
usario
solicita
unsegundo
tercer
huevo
en
específico
huevo
– Elhuevos
cartón
se expulsa
huevo
en
específico
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
usuario
solicita
los
ElElusuario
usuaurio
eventualmente
El
previo
ha usado
solicita
todos
todos
los huevos
en
la 8
mesa
huevos
del
91 huevos
al16
huevos
dellos
al
Refrigerador
•El usuario frie todos los huevos en el cartón antes
de solicitar un huevo del siguiente cartón
:
:
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
BACKUP
Descargar

Boulder Lake: On-Chip SRAM Options – Rev 1.0