3. Evolución de los Procesadores (1)
1971 – i4004
1992 – i80486
1995 - iPentium
2005 - iCore
+ Fabricación
+ Disenio A.C.
- Limitaciones
4. Evolución de los Procesadores (2)
• Ley de Moore [1975]: # de transistores en un chip se
duplica cada 2 años
– La capacidad de procesamiento se duplica cada 18 meses
[David House]
• Mejoras en las tecnicas de empaque y fabricación
• Avances en el Disenio de la Arquitectura
– Prediccion de Saltos
– Ejecucion Especulativa
– Pipelining
– Procesadores Super-Escalares
– Incremento del Paralelismo a Nivel de Instrucciones (ILP)
– Caches mas grandes
5. La Pared de Ladrillo - Brick Wall (1)
• Andrew Grove – Intel [2002]
• El avance en la evolución de los procesadores “golpeo” una
pared de ladrillo (brick wall):
– Power wall – Incremento de consumo de potencia dinámica y
estática
– Parallelism wall – mas complejo incrementar ILP
– Memory wall – la latencia de memoria es varios ordenes de
magnitud mas lento que la velocidad de los procesadores
• Obligo a un cambio de curso en la arquitectura de los
procesadores
– Procesadores Multi-Core
– Procesadores Many-Core
6. La Pared de Ladrillo - Brick Wall (2)
Brick Wall
9. La Pared de Consumo de Potencia (3)
• Andrew Grove [2002]:
– Consumo de Potencia se esta convirtiendo en un
limitante
– Un incremento de 13% en performance resulta en
un 70% en incremento de consumo de potencia
– Un decremento de 13% en performance resulta en
un 50% decremento de consumo de potencia
• Es mas rentable tener varios cores en un
procesador que un solo core mas rápido
10. No Free Lunch ?
• Durante décadas la industria del software
incrementaba el rendimiento de aplicaciones
aprovechando el avance de los procesadores
– Aplicaciones con un solo thread (hilo)
– Free Lunch
• Desde la aparición de los procesadores con
múltiples cores, esto ya no es posible
– La frecuencia de los cores ya no incrementa (2.5GHz)
– Incrementa el Nro. de cores (2, 4, 6, 8, 16, >100)
– Es necesario tener múltiples threads (>1 por thread)
– No free lunch
11. Procesadores Multi-Core
• De acuerdo a la arquitectura interna, los
procesadores podrian ser:
– SIMD (Single Instruction Multiple Data)
• Arquitecturas Vectoriales
• GPU (Graphics Processing Unit)
– MIMD (Multiple Instruction Multiple Data)
• Multi-Core Super Scalar Processor (ej. dual core)
13. POSIX Threads
• Thread (Hilo): es un conjunto independiente de
instrucciones que es ejecutado de manera independiente
• Un programa puede tener múltiples threads
• Implementa un modelo de programación MIMD
• Todos los threads comparten un area de memoria del
proceso principal
• Pthreads fue creado en un inicio para dar soporte a la
multiprogramación en sistemas operativos, no para
programacion en dispositivos multi-core
• Con la aparicion de procesadores multi-core, cada thread
puede ser ejecutado por un core diferente (processor
affinity)
14. OpenMP (Open Multi-Processing)
• Es un modelo SIMD
• Esta compuesto por un conjunto de directivas
(#PRAGMA) que indican al compilador que es un
area a paralelizar
• Adicionalmente posee variables que permiten
definir parámetros de la paralelizar (ej. el numero
de threads a crear)
• El momento de la ejecucion, el runtime crea
tantos threads como se haya especificado
• Pasa asociar threads a cores, se usa el mismo
concepto de processor affinity
15. CUDA
(Compute Unified Device Architecture)
• Estándar propietario de Nvidia
• Programación de Dispositivos Many-core
(GPU)
• Es SIMT (Single Instruction Multiple Thread)
– Variacion de SIMD
• Necesita miles de threads para obtener
optimo rendimiento
– Esconde la latencia de memoria, no la reduce
como en el caso de los CPUs
16. OpenCL (Open Compute Language)
• Estandar universal desarrollado por Khronos
– Consorcio: Nvidia, Intel, AMD, Apple, entre otros
• Tiene una filosofia de programacion similar a
CUDA
• Define unicamente el API, la implementacion
queda para los fabricantes de HW
– Problema: Interoperabilidad entre plataformas no es
posible hasta este momento
• No totalmente optimizado para las diferentes
plataformas
17. GPGPU: General Purpose Computing
on GPUs
• En 2001 los aceleradores graficos se volvieron
completamente programbles
• A la par el hardware de los aceleradores gráficos se volvió
de propósito general
– Se convirtieron en GPUs
• La comunidad cientifica se dio cuenta del potencial para
programacion de los GPUs
– Solo había OpenGL (para programación de gráficos)
– Los primeros programas cientificos fueron escritos en OpenGL
• Nvidia decide desarrollar CUDA [ ~2007 ]
– Lenguaje de programacion para GPUs, de proposito general
• Nvidia construye GPUs sin el interface de video, para
proposito general
18. CPUs vs GPUs
• GPUs usan mas transistores para procesamiento
• CPU usan una gran cantidad de transistores para
control y caches
21. Parametros a considerar cuando se
programan Procesadores Many-Core
• El runtime de CUDA genera miles (o millones) de
threads
• Los threads son agrupados en grupos de 32 threads
llamados WARPs
• Ocupacion de HW
– Como usar 500 cores ?
• Acceso a memoria
– Evitar conflictos en los bancos
– Optimizar el uso del bandwidth de memoria: coalesced
access, acceso consolidado de los threads
• Thread switching: latencia a memoria se esconde en
lugar de reducirla – Intercalar Bloques de threads
22. Take Home Message (Mensaje Final)
• La computación paralela esta en nuestros
escritorios, e incluso en nuestras manos (ej.
smart phones, etc)
• Estudiantes: aprender programacion paralela
• Profesores (Universidades): Incorporar cursos
de programación paralela en los curriculos de
las carreras
23. Algunos lugares de interes
• www.nvidia.com
• www.intel.com/multicore
• www.khronos.com