Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

40
Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009

Transcript of Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

Page 1: 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

Page 2: 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

Page 3: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

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

Page 4: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

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

Page 5: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

¿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

Page 6: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

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

Page 7: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

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

Page 8: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

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

Page 9: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

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

Page 10: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

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*

Page 11: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

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

Page 12: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

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

Page 13: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

Parallel Amplifier Hotspots

Page 14: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

¿Qué muestra el análisis de hotspots?

Page 15: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

¿Qué hay en los detalles?

Page 16: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

El stack de llamadas

El stack de llamadas (call) muestra la relación llamado/llamador entre funciones en el código

Page 17: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

Encontrar paralelismo potencial

Page 18: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

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

Page 19: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

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

Page 20: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

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

Page 21: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

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

Page 22: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

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

Page 23: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

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

Page 24: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

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

Page 25: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

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

Page 26: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

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

Page 27: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

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

Page 28: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

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

Page 29: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

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

Page 30: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

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

Page 31: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

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”

Page 32: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

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

Page 33: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

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

Page 34: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

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

Page 35: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

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

Page 36: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

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

Page 37: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

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

Page 38: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

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

Page 39: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.
Page 40: Un vistazo a la arquitectura Intel® Core 2 y herramientas del desarrollo de software Junio 2009.

BACKUP