02 Arquitectura y Herramientas de Software ver3.0.01

Download Report

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

BACKUP