“Año de la Promoción de la Industria Responsable y del Compromiso Climático”
UNIVERSIDAD INCA GARCILASO DE LA VEGA
FACULTAD DE INGENIERÍA DE SISTEMAS, CÓMPUTO Y TELECOMUNICACIONES
ARQUITECTURA DE PROCESADORES MULTINÚCLEO
PRESENTADO POR:
YANGALES TRUJILLO, YOHAN ANDRÉ
106837630
0
Tarea académica Microprocesadores
INDICEINTRODUCCION............................................................................................................................2
BREVE HISTORIA...........................................................................................................................3
ARQUITECTURAS SIMD, MIMD, SMT..........................................................................................15
PROGRAMACIÓN MULTINUCLEO...............................................................................................17
APLICACIONES............................................................................................................................28
ORGANIZADOR TEMATICO.........................................................................................................32
CONCLUSIONES..........................................................................................................................33
BIBLIOGRAFIA.............................................................................................................................34
1
Tarea académica Microprocesadores
INTRODUCCION
En este presente trabajo de investigación de microprocesadores trata el tema de los
procesadores multinúcleo, dando un panorama de porque se decidió fabricarlos, historia,
como trabajan. Además se muestra algunos procesadores multinúcleos actuales, de
Intel, de AMD.
Eran muy lentos inicialmente los microprocesadores y con poco poder de cómputo, se
mejoró su arquitectura a través de los años, aumentando la frecuencia de reloj, el bus
tanto de datos como de direcciones, entre otras. El poder de cómputo de estos
microprocesadores es realmente sorprendente, sin embargo aun sigue siendo
insuficiente para efectos de investigación, como el modelado de clima, cómputo
financiero, entre otras.
Los fabricantes de microprocesadores pasaron a la era de los microprocesadores
multinúcleo para aumentar el poder de cómputo de sus microprocesadores,
abandonando así la era en que se mejoraban los procesadores incrementando la
frecuencia del reloj.
Las arquitecturas multinúcleo como lo es el procesador CELL de banda ancha, Intel
Core 2 Quad, Intel Core i7, AMD Opteron y Nvidia Tesla C1060, son procesadores con
un gran poder de cómputo, aunque algunos con precio muy elevado. Estas arquitecturas
no son aprovechadas en su totalidad, debido a que muchos programadores aún siguen
programando secuencialmente. Los lenguajes de programación de alto nivel como C y
Java tienen bibliotecas de funciones para el manejo y creación de procesos y hebras que
permiten de manera fácil y eficiente aprovechar estas arquitecturas multinúcleo.
2
Tarea académica Microprocesadores
BREVE HISTORIA
En los últimos veinte años el rendimiento en los procesadores se ha duplicado
aproximadamente cada dos años. Los fabricantes de microprocesadores mejoran el
rendimiento en base a procesadores multinúcleo y multihebras (Multicore
Hyperthreading). Estas nuevas tecnologías abren una amplia gama de oportunidades a
desarrolladores de software.
Antes de ver este tema de procesadores multinúcleo revisaremos algunos conceptos:
El socket de CPU: es una matriz de pequeños agujeros (zócalo) existente en una placa
base donde encajan los pines de un microprocesador; dicha matriz, denominada Pin grid
array o PGA, permite la conexión entre el microprocesador y dicha placa base.
Ejemplos de socket de CPU son:
Socket 939 (AMD), Socket AM2 (AMD), Socket 478 (Intel), Socket 775 (Intel)
Propósito de la cache : actuar como una memoria temporal entre los registros de
CPU, limitados y de gran velocidad y la RAM, mucho más grande y lenta.
Los subsistemas de cache pueden ser de niveles múltiples; es decir, puede haber más de
un conjunto de cache entre el CPU y la memoria principal. Muchos sistemas tienen dos
niveles de cache:
Cache L1 ubicada en el chip de la CPU, se ejecuta a la misma velocidad que dicha CPU.
Cache L2 suele ser parte del modulo de la CPU, se ejecuta a las mismas velocidades que
la CPU (o casi) y es un poco más grande y lenta que la cache L1.
Algunos sistemas (normalmente servidores) también tienen cache L3 formando parte
del sistema de la placa base. La cache L3 es más grande y algo más lenta que la cache
L2.
MMX Es el acrónimo de Multimedia Extensions. Conjunto de instrucciones SIMD
(Single Instruction Multiple Data) diseñado por Intel e introducido en 1997 en sus
microprocesadores Pentium MMX. I MMX agrego 8 nuevos registros a la arquitectura,
conocida como MM0 a MM7. En realidad, estos nuevos registros son meros alias de los
registros de la pila de la FPU. Cada uno de los registros MMn es un número entero de
64 bits. El juego de instrucciones MMX utiliza el concepto del tipo de datos
compactados) en lugar de usar el registro completo para un solo numero entero de 64
3
Tarea académica Microprocesadores
bits, se usa para almacenar dos enteros de 32 bits, cuatro enteros de 16 bits u ocho
enteros de 8 bits. Problema: MMX solo soporta operaciones con números enteros. Hace
algún tiempo, el uso de matemáticas de vector entero tenía sentido (operaciones 2D y
3D), pero cuando esta funcionalidad se pasa a las GPUs, la coma flotante se vuelve
mucho más importante.
SSE (Streaming SIMD Extensions) es una extensión al grupo de instrucciones MMX.
Estas instrucciones operan con paquetes de operandos en coma flotante de precisión
simple. Hay varios tipos de instrucciones SSE:
Instrucciones SSE de Transferencia de datos.
Instrucciones SSE de Conversión.
Instrucciones SSE Aritméticas.
Instrucciones SSE lógicas.
Con la tecnología SSE, se introducen 70 nuevas instrucciones y 8 registros nuevos: del
xmm0 al xmm7.
Los registros tienen una extensión de 128 bits. A diferencia de MMX, la utilización de
SSE no implicaba la inhabilitación de la FPU, por lo que no era necesario habilitarla
nuevamente, lo que significaba para MMX pérdida de velocidad.
La CPU está conectada a un bus que le permite comunicarse con el resto de
dispositivos. Gracias a este bus frontal de datos, llamado FSB (Front Side Bus), la CPU
recibe información y la envía a otros dispositivos.
El FSB se encuentra conectado al chip Northbridge, que es el núcleo de la placa base.
La frecuencia de un procesador se expresa en términos de la frecuencia del FSB
multiplicado por un valor predeterminado por el fabricante, por eso conocer bien el FSB
es vital en la práctica del Overclocking (forzar un procesador a trabajar a una velocidad
mayor que la de serie). Ejemplo) Multiplicador: x18, Frecuencia del FSB: 200MHz,
Frecuencia del procesador: 3600 MHz.
La fuerte competencia en el mundo de los procesadores, especialmente entre Intel y
AMD, ha producido que la tecnología actual de fabricación de procesadores está
llegando a sus límites. Cada vez la miniaturización de los componentes del procesador
es más difícil (el límite de construcción del silicio ronda los 15-20nm, donde el silicio
4
Tarea académica Microprocesadores
empieza a ceder por falta de consistencia, ya se ha llegado a los 65nm), el problema de
la generación de calor a aumentado, produciendo que sea más difícil aumentar la
frecuencia principal del procesador. Todos estos problemas dificultan el aumento de
rendimiento de los procesadores.
Los procesadores actuales no sobrepasan los 3.8 GHz (obtenido por el Pentium 4
Prescott), necesitan grandes disipadores y ventiladores porque generan mucho calor. No
se podía continuar fabricando procesadores de la misma manera, se estaba llegando a un
“estancamiento”; era necesario tomar otro camino, utilizar otra variable que hiciera que
el rendimiento del procesador aumentará. Entonces, basándose en el procesamiento en
paralelo, se empezaron a construir los procesadores multinúcleo.
Antes de construir los procesadores multinucleo los fabricantes utilizaron tecnologías
que simulaban esta, tenemos a continuación:
Tecnologías empleadas por INTEL:
Hyper-Threading
Intel 64 Architecture
Bit de desactivación de ejecución y seguridad
Tecnologías empleadas por AMD:
HyperTransport
AMD 64
Bit NX
Hyper-Threading:
Dos formas de brindar más potencia informática:
1 Aumentar la velocidad del reloj.
2 Realizar más trabajo en cada ciclo de reloj.
Un procesador compatible con la tecnología Hyper-Threading se presenta así mismo
ante las aplicaciones y los S.O. como dos procesadores virtuales.
El procesador puede entonces trabajar en dos conjuntos de tareas a la vez, utilizar los
recursos que de otro modo estarán inactivos y realizar más trabajo en la misma cantidad
de tiempo.
5
Tarea académica Microprocesadores
En los PC de escritorio: La tecnología HT aprovecha la capacidad de subprocesos
múltiples integrada en WinXP y en muchas aplicaciones. El software con subprocesos
múltiples divide su carga de trabajo en procesos y subprocesos que se pueden programar
y enviar de forma independiente. Es parecido a un sistema multiprocesador pero con un
único procesador.
En los servidores: La tecnología HT permite el paralelismo a nivel de subprocesos al
duplicar el estado arquitectónico de cada procesador a la vez que se comparte un
conjunto de recursos de ejecución del procesador. Cuando programa subprocesos, el SO
considera los dos estados arquitectónicos claramente determinados como procesadores
“lógicos" separados
Intel 64:
La arquitectura Intel 64 proporciona computación de 64 bits cuando se combina con
software que la soporte. Mejora el rendimiento permitiendo a los sistemas direccionar
más de 4 gigabytes tanto de memoria virtual como física.
Bit de desactivación de ejecución y seguridad:
Previene ciertos tipos de ataques de desbordamiento de buffer cuando se combina con
un sistema operativo compatible. Permite que el procesador clasifique aéreas de la
memoria en función de donde se puede ejecutar el código de las aplicaciones.
HyperTransport:
Tecnología que induce en una mejora de las prestaciones del sistema, diseñada para
incrementar las mismas mediante la eliminación de cuellos de botella en la E/S, lo cual
mejora notablemente el ancho de banda y reduce la latencia. Las mejoras se centran en
cuatro apartados:
1) FSB del procesador: Sustituyendo el FSB por unas conexiones de E/S basadas en la
tecnología HyperTransport se consigue una extensión del ancho de banda desde los
2,1GB/s hasta los 6,4GB/s.
6
Tarea académica Microprocesadores
2) Interfaz de memoria: Cuando ocurre un fallo en la cache, el procesador debe traer
información de memoria principal. En Northbridge/Southbridge, las transacciones de
memoria pasan por el chip Northbridge, creando latencias adicionales. Para resolver
este cuello de botella, AMD incorpora el controlador de memoria en su 8a generación
de procesadores.
3) Interconexión chip a chip: La integración simultanea de las tecnologías de alta
velocidad como AGP-8x, Gigabit Ethernet, PCI-X, etc. elimina virtualmente los cuellos
de botella en la E/S.
4) Capacidades de expansión de E/S hacia la industria de buses de alta velocidad: La
arquitectura Northbridge/Southbridge no está preparada para soportar más de dos
núcleos lógicos, ya que la funcionalidad deberá fijarse a una interfaz existente, y un bus
actual no tendrá su cliente ancho de banda para soportar tecnologías de alta velocidad.
AMD64:
Es una arquitectura basada en la extensión del conjunto de instrucciones x86 para
manejar direcciones de 64 bits. Además, contempla mejoras adicionales como duplicar
el número y el tamaño de los registros de uso general y de instrucciones SSE. I Bit NX:
el bit NX es una característica del procesador que permite al SO prohibir la ejecución
del código en ciertas aéreas de datos.
PROCESADORES MULTINUCLEO
Las arquitecturas multinúcleo se
refieren a microprocesadores que
combinan dos o más núcleos
independientes en un solo paquete
ó circuito integrado, los cuales
trabajan a la misma frecuencia. En
general, los microprocesadores
multinúcleos permiten que un
dispositivo computacional exhiba una cierta forma del paralelismo a nivel de hebras sin
incluir múltiples microprocesadores en paquetes físicos separados.
7
Tarea académica Microprocesadores
Un microprocesador multinúcleo es el que combina dos o más procesadores en un
paquete, estos procesadores se basaron en los sistemas distribuidos y el procesamiento
en paralelo, este procesamiento consiste en la división de una aplicación en varias partes
para que sean ejecutadas a la vez por diferentes unidades de ejecución.
Una de las interrogantes más comunes es que si al adquirir un equipo con más de un
núcleo la velocidad de los procesos disminuirá drásticamente con respecto a los núcleos,
por ejemplo si se adquiere una computadora con un procesador Dual Core (dos núcleos)
la velocidad del proceso tardara la mitad, esto es una mentira, si es verdad que
disminuye pero el decir que si tenemos un equipo con 4 núcleos la velocidad aumentara
4 veces es falso, pero algo bueno de estos procesadores es que ayuda al ahorro de
energía, ya que la tendencia que tenían los procesadores era aumentar la velocidad del
reloj del chip, esto consumía mucha energía y podía causar un sobrecalentamiento, con
más de un procesador ya no es necesario aumentar la velocidad del reloj.
Intel es una empresa que va a la vanguardia, comenzando con el dual core de dos
núcleos. AMD saca el Quad Core de cuatro núcleos y que hoy en día es de los más
actuales, se puede decir que comenzó la guerra de los multinúcleos y ahora las empresas
se encargaran de crear mejores procesadores, con cada vez más núcleos y a un precio
accesible.
Hay una lucha constante entre AMD e Intel por presentar el mejor procesador, AMD
publico sus procesadores Opteron 6000 de 8 y 12 núcleos, mientras que Intel presentó
el Xenon de 8 núcleos orientado a servidores.
Cabe mencionar que fuera de los fabricantes
de procesadores más comerciales como Intel
y AMD, existen un gran número de empresas
tal es el caso de Tilera, esta joven empresa
anunció que tiene planes de crear un
procesador capaz de contener 100 núcleos,
además tendrá funciones especiales que le
permitirán evadir los problemas de falta de ancho de banda que sufren los procesadores
multinúcleo actuales.
8
Tarea académica Microprocesadores
Se verá un resumen de los principales procesadores multinúcleo de la actualidad. Se
comienza por Intel, mostrando los procesadores multinúcleo que ha sacado al mercado,
luego viene AMD, y por último se muestra al nuevo procesador Cell, que próximamente
va a salir en la PlayStation 3.
Procesadores Multinúcleo de Intel
Actualmente Intel está fabricando procesadores de doble núcleo. Comenzó fabricando
los Pentium D en el 2005, luego en el 2006 lanzó los Core Duo y el Core 2 Duo.
Pentium D.
Los Pentium D están conformados por dos procesadores Pentium 4 Prescott sin
Hyperthreading. Luego Intel sacó el Pentium Extreme Edition (No confundir con el
Pentium 4 Extreme Edition) que era un procesador que tenía los procesadores P4
Prescott, con la tecnología Hyperthreading, lo que hacía que el software viera cuatro
procesadores.
Las características de los Pentium D son:
- Proceso de fabricación de 90nm
- Tienen la tecnología EM64T, que permite trabajar con 64 bits de forma nativa
- Utilizan núcleos SmithField (basados en los Prescott), cada uno de ellos tiene una
memoria caché L2 de 1MB
- Van desde 2.80GHz, del modelo menos potente, hasta 3.20GHz para el modelo más
potente.
El procesador que contiene dos núcleos Prescott se llama Smithfield. Los nuevos
procesadores de doble núcleo Pentium D se llaman Presler, están construidos con
tecnología de fabricación de 65nm y van desde 2.8 hasta 3.73Ghz. Tienen una caché L2
por cada núcleo de 2MB (4MB en total).
Core Duo
Los procesadores Core Duo es una versión para los portátiles, implementa 2MB de
caché de memoria compartida para ambos núcleos. Están hechos con la tecnología de
65nm. Su velocidad va desde 1.20 hasta 2.33Ghz. El FSB (bus del sistema) va desde
533Mhz del modelo menos potente hasta 667Mhz para los demás. El gasto de energía
va desde 9.0w hasta 31w. Por los datos se ve que tienen una gran relación
rendimiento/energía.
9
Tarea académica Microprocesadores
Core 2 Duo
Esta nueva familia de procesadores de Intel está basado en la micro arquitectura Core,
que reemplaza a la antigua micro arquitectura Netburst que fue aplicada en los demás
procesadores y que ya estaba llegando a sus límites.
La arquitectura Core proviene de la arquitectura que produjo al Pentium M (utilizado
por los Intel Centrino), que destaca por el gran rendimiento que obtiene de la poca
energía que gasta. El Pentium M además proviene del Pentium III, y este del Pentium
Pro (Los Pentium 4 son una rama genealógica aparte).
Las subfamilias del Core 2 Duo son:
Merom, para portátiles.
Conroe, para equipos de sobremesa.
WoodCrest, para servidores.
Los Core 2 Duo, recién han salido en julio del 2006. Además de la versión normal, hay
una versión extrema. No se tienen todos los datos disponibles, pero ya se han probado
algunos de ellos.
Los Core 2 Duo que han sido probados, por la mayoría de testeadores, son el Core 2
Extreme X6800, el Core 2 Duo E6700 y el E6600. En las pruebas estos procesadores
demuestran tener más rendimiento que el más poderoso procesador del AMD, el AMD
FX-62. Los más fuertes (X6800 y E6700) vencen en casi todo al FX-62, en algunas
pruebas por un margen considerable y el tercero (E6600) está muy cerca.
Intel Core i7: Descripción y características del nuevo procesador de Intel.
Con el nombre en clave de Nehalem conocido hasta ahora desde hace varios años que
se lleva desarrollando, por fin llega al mercado rebautizado con el nombre comercial
Intel Core i7 en sus versiones de dos, cuatro y ocho núcleos.
Construido a 45 nm., es el primer procesador del Intel en conseguir poner cuatro y ocho
procesadores integrados de forma nativa compartiendo una misma memoria caché y
procesador de instrucciones. Así mismo vuelve la tecnología hyperthreading ya
utilizada en el Pentium 4, por lo el sistema operativo nos reportaría 16 procesadores si
tuviéramos instalado el Intel Core i7 Octo. Además el controlador de memoria va
integrado dentro del propio procesador con la nueva tecnología QuickPath, algo a lo que
AMD ya nos tiene acostumbrados desde hace bastante tiempo con su tecnología
10
Tarea académica Microprocesadores
HyperTransport.
Tenemos cambio de socket y de chipsets, es decir, este procesador no será compatible
con ninguna de las placas madres desarrolladas para Intel Core 2 y procesadores
anteriores. Intel Core i7 necesita placas madre nuevas y chipsets nuevo. El zócalo para
el procesador ha crecido considerablemente de tamaño pasando a ser LGA1366 en
comparación con el anterior LGA775.
Procesadores Multinúcleo de AMD
Antes de sacar sus procesadores multinúcleo al mercado, AMD ya había conseguido un
gran éxito con su procesador Athlon 64, que incorporaba la capacidad de direccional 64
bits de memoria, la tecnología HyperTransport que era un nuevo bus bastante rápido
que eliminaba cuellos de botella anteriores, y otras tecnologías; este procesador fue
tomado como base para la construcción de su procesador de doble núcleo Athlon 64 X2,
que salió al mercado a partir del 2005.
Para Servidores, AMD sacó el procesador Opteron X2, que se basaba también en el
Opteron de un solo núcleo, el hermano mayor de los Athlon 64.
Para Portátiles AMD ha sacado el Turion X2, que lleva el poder de los procesadores de
doble núcleo al campo de los móviles.
AMD fue el primero en sacar la tecnología de 64 bits, y también fue la primera en sacar
los procesadores de doble núcleo para servidores, portátiles y computadoras de
escritorio. Han tenido un gran éxito, pero con la aparición de los Core 2 Duo de Intel,
basados en su exitoso Pentium M Centrino, la iniciativa vuelve a las manos de Intel en
todos los frentes. Hay que esperar a que AMD saque sus nuevos procesadores K8L, de 4
núcleos y con tecnologías mejoradas, como el HyperTransport 3 y una caché L3.
Procesador CELL
El procesador Cell, es un procesador multinúcleo diseñado por las empresas IBM, Sony
y Toshiba desde el marzo del 2001. Este procesador va a ser usado inicialmente por la
PlayStation 3, pero se tiene previsto usarlo también en los productos electrónicos que
fabrican estas empresas, que van desde televisores de alta definición hasta ordenadores.
11
Tarea académica Microprocesadores
Los componentes del procesador son:
1 Power Processor Element (PPE).
8 Synergistic Processor Elements (SPEs).
Bus de Interconexión de los Elementos (EIB).
Controlador de Acceso Directo a Memoria (DMAC).
2 Controladores de Memoria Rambus XDR.
Una interfaz Rambus FlexIO (Input / Output).
El PPE es el núcleo principal, este se encarga de coordinar el trabajo de todos los demás
núcleos (SPEs), mediante la tecnología SMT (Simoultaneous Multi-Threading). El PPC
toma el control del sistema operativo y deja a los SPEs el trabajo de los demás procesos.
EL PPE está basado en la arquitectura PowerPC de 64 bits, tiene 32 KB de caché L1 y
512 KB de caché L2, tiene también tecnología de doble hilo y puede ejecutar dos
instrucciones por hilo. Este procesador esta hecho como los RISC clásicos, o sea no es
como los PowerPC tradicionales, por eso no tiene implementado la predicción de saltos,
y la ejecución de instrucciones es en orden; lo que ahorra una cantidad considerable de
transistores, pasando todo ese trabajo al compilador.
12
Tarea académica Microprocesadores
Los SPE son los procesadores auxiliares, son unidades de cálculo vectorial. Pueden
ejecutar hasta dos instrucciones por ciclo. Cada SPE tiene 128 registros de 128 bits cada
uno, 4 unidades de coma flotante, 4 unidades aritméticas enteras y una memoria local de
256 KB (esta memoria es SRAM como las memorias caché, pero no es una de ellas). Al
no utilizar memoria caché, se simplifica el diseño del SPE. Los SPEs tienen memoria
local para tomar los datos que requieren más rápidamente.
El bus de interconexión de elementos, EIB, está compuesto por 4 canales de datos de
128 bits, permite la comunicación entre todos los elementos del procesador, permite
también cargar y mover 16GB de datos por segundo hacia y fuera del Cell
respectivamente. Para mantener lleno este ancho de banda, el procesador Cell utiliza en
sus controladores de I/O y la memoria las tecnologías diseñadas por la empresa Rambus
(conocida por haber fabricado las veloces memorias RAM para Pentium 4, las RIMM,
que no tuvieron aceptación en el mercado). La memoria XDR de Rambus es bastante
rápida, llegando a velocidades 12 veces superiores a las memorias convencionales de
533Mhz actuales.
El chip Cell ha ahorrado muchos transistores al no implementar caché para los SPEs,
ejecución fuera de orden, predicción de saltos, etc., dejando todo ese trabajo al
13
Tarea académica Microprocesadores
compilador; con el fin de poner más procesadores (SPEs) lo que aumenta el poder de
procesamiento, y además para que el chip sea más sencillo y gaste menos energía. Este
chip es un monstruo con sus 234 millones de transistores, la mayoría dedicados al poder
de procesamiento por lo anteriormente expuesto, y como utiliza muchos “cerebros”, la
generación de calor se disemina por todo el procesador.
Otras características de este procesador son:
Fabricación en 90nm (nanómetros).
Frecuencia de trabajo desde 3.2 GHz
1,3 Voltios.
Operación a 85ºC con un disipador.
El prototipo tiene 221mm2.
Utiliza la tecnología SOI (Silicio sobre aislante)
Otras características que tiene el Cell es que es escalable, fue diseñado para poder
trabajar con otros Cell. Un PPC de un Cell tiene el potencial de comunicarse con un
PPC o un SPE de otro Cell que se encuentre en la misma placa madre, en la misma red
o en cualquier parte del mundo si ambos estos conectados a Internet.
Otros Procesadores
Otros procesadores multinúcleo importantes que han salido son:
- el PowerPC G5 para las Apple.
- El UltraSparc T1 Niagara, poderoso procesador para servidores, que genera un gran
ahorro de energía por su relación rendimiento/energía. Su fabricante Sun
Microsystems antes también ha sacado buenos procesadores multinúcleo para sus
servidores.
14
Tarea académica Microprocesadores
ARQUITECTURAS SIMD, MIMD, SMT.
El sistema de una sola instrucción, múltiple dato (SIMD, del inglés Single Instruction
Multiple data) es un sistema en el que la misma instrucción manipula diferentes datos
en paralelo. Aquí el número de datos es el número de procesadores trabajando
simultáneamente. En la figura se ilustra el modelo SIMD.
El modelo múltiple instrucción, múltiple dato (MIMD, del inglés Multiple Instruction
Multiple Data) se refiere a un sistema multiprocesador, que es un sistema que tiene
múltiples procesadores y capaz de trabajar independientemente y producir resultados
para el sistema global. Cada procesador es capaz de ejecutar una instrucción diferente
con un dato diferente. En la figura se ilustra el modelo MIMD.
15
Tarea académica Microprocesadores
Simultaneous multithreading (SMT): dentro de un procesador superescalar fuera de
orden ya hay mecanismos Hw para soportar la ejecución de más de un thread
Gran numero de registros físicos donde poder mapear los registros arquitectónicos de
los diferentes threads
El renombrado de registros proporciona un identificador único para los operandos de
una instrucción, por tanto instrucciones de diferentes thread se pueden mezclar sin
confundir sus operados
La ejecución fuera de orden permite una utilización eficaz de los recursos.
Solo necesitamos sumar una tabla de renombrado por thread y PC separados
Commit independiente se soporta con un ROB por thread (Lógico o físico)
Ejemplos; Pentium4, Power5 y 6, Nehalem (2008)
16
Tarea académica Microprocesadores
PROGRAMACIÓN MULTINUCLEO.
Hoy en día la mayoría de las CPUs tienen varios núcleos, desde 2 hasta 8 o 16, y cada
vez más y más. Para que tus aplicaciones aprovechen esta característica de llevar varios
procesos en paralelo se da a conocer y aplicar metodologías de programación y las
herramientas para análisis de rendimiento diseñadas para lograr el funcionamiento más
eficiente de sus programas en ambientes de cómputo basados en procesadores de
múltiples núcleos y de procesamiento concurrente:
Ada es un lenguaje de programación de alto nivel estructurado, con tipos estáticos, y
orientado a objetos que permite el desarrollo de aplicaciones de tiempo real y de gran
tamaño de una manera sencilla. Más importante aun es el hecho de que tiene un gran
soporte para paralelismo debido a varios mecanismos que incluye como el paso
síncrono de mensajes y los objetos protegidos. Como ya se ha mencionada algunas
veces antes, Ada tiene muy buen soporte para paralelismo y concurrencia debido a la
manera en que se estructuran sus programas. Para Ada, la unidad básica para la
concurrencia es la tarea (task en inglés). Es importante mencionar que de hecho, por lo
menos en cierto modo, hay dos tipos de tareas: las tareas sencillas y los tipos tarea. Las
tareas simplemente son una tarea única y especial, es decir, que solo hay una de ellas.
Por otro lado, un tipo tarea es una especie de plantilla para tareas y se permite tener
varias tareas del mismo tipo. Las tareas tienen la capacidad de comunicarse entre ellas a
través de paso de mensajes y pueden compartir variables a través de una memoria
compartida. Estas características son posibles gracias a un mecanismo “de citas”
(rendezvous en inglés) que establece un punto de sincronización entre dos tareas. Debo
mencionar que este mecanismo hace que una de las tareas se suspenda hasta que la otra
tarea alcance el mismo punto. Es también importante dejar claro que las tareas no son
llamadas como lo son los procedimientos o las funciones, sino que comienzan a
ejecutarse cuando el procedimiento principal inicia y solo se detienen para esperar los
valores especificados en los puntos de entrada. Ada es un lenguaje bastante interesante
que ha sabido mantenerse como una buena opción para los desarrolladores debido a las
actualizaciones que ha tenido con el tiempo y la gran comunidad que lo respalda
(incluido el departamento de defensa de los Estados Unidos). Su estructura en bloques
me parece algo rara pero relativamente sencilla de entender y su implementación de
17
Tarea académica Microprocesadores
18
Tarea académica Microprocesadores
paralelismo es también muy sencilla. Claro que tiene ventajas y desventajas como
todos los lenguajes, pero me parece una alternativa bastante buena, especialmente para
proyectos grandes.
Chapel es un lenguaje de programación paralelo emergente en el que su diseño y
desarrollo está dirigido por Cray Inc. Chapel está siendo desarrollado como un proyecto
de open-source con contribuciones de academia, industria y centros computacionales
científicos. Chapel está diseñado para mejorar la productividad de los usuarios finales
mientras también sirve como un modelo portable de lenguaje de programación paralelo
que pueda ser usado en clusters o bien en computadoras multinucleo, tratando de
semejar o mejorar el desempeño y portabilidad de los modelos de programación
actuales como los Message Passing Interface (MPI). Chapel soporta un modelo de
ejecución de múltiples hilos gracias a un nivel alto de abstracción para la paralelizacion
de la información, concurrencia y paralelismo anidado. Es importante remarcar que el
diseño de Chapel es a partir de sus propios principios, en lugar de basarse en algún
lenguaje ya existente. Es un lenguaje de estructura de bloque imperativo, de fácil
aprendizaje para los usuarios de C, C++, Fortran, Java, Perl, Matlab y otros lenguajes de
programación populares. El lenguaje está basado en el modelo de vista global de High-
Performance Fortran (HPF), el cual es muy fuerte trabajando con lenguajes comunes
para computación científica a un nivel de abstracción muy alto pero evita la debilidad de
HPF’s, la cual es que únicamente tiene como estructura de datos a los arreglos. Chapel,
para corregir este problema, implementa programación multitareas y estructuras de
datos arbitrarias con afinidad a nivel de objetos. A diferencia de OpenMP que crea hilos
con mucho peso y un esquema de compartir trabajo, Chapel no usa un esquema basado
en hilos, sino que utiliza subcomputaciones que se pueden ejecutar de manera
concurrente. Eliminando el concepto de hilo, no es necesario un manejador de los
mismos, haciendo que cada módulo en el código de Chapel puede expresar su
concurrencia libremente. Chapel está diseñado para soportar la programación paralela
general a través del uso de abstracciones del lenguaje de alto nivel. También soporta un
modelo de programación de perspectiva global que incrementa el nivel de abstracción al
expresar tanto la información como el control de flujo, comparado con los modelos de
programación paralelos usados actualmente.
19
Tarea académica Microprocesadores
Chapel podría parecer como cualquier otro lenguaje de programación, pues comparte
muchas características similares a los que ya hemos estudiado. Soporta programación
orientada a objetos como C++, Java, etc., tiene manejo de reduce como Erlang o
Clojure; pero el verdadero potencial de Chapel es que su arquitectura y diseño lo
vuelven un lenguaje de programación fácil de utilizar, cuenta con distintas declaraciones
para paralelizar y evita el uso de manejadores de hilos, lo cual lo hace sumamente
práctico. También podemos percibir que Chapel se enfoca en la eficiencia, por la forma
en que maneja sus multitareas y provee herramientas poderosas para el programador,
brindándole la oportunidad de desarrollar con un poco más de libertad que con otros
lenguajes; un ejemplo de esto es que permite que el programador sea libre de utilizar y
manejar sus propios iteradores paralelos y que utilice la programación acorde a la
localidad, donde especificará en donde deberá ir tanto la información como el poder de
cómputo.
Cilk es un lenguaje algorítmico basado en múltiples threads. La idea de Cilk es que un
programador debe concentrarse en estructurar su programa en forma paralela sin tenerse
que preocupar por como será la corrida en el sistema para mejorar su eficiencia en la
plataforma. La corrida de un programa Cilk se encarga de detalles como el balanceo de
carga y comunicación entre los procesadores. Cilk básicamente se asegura de que se
asignen las cargas de trabajo de forma eficiente y con un desempeño predecible. Cilk es
una implementación muy natural de paralelismo para C y C++, ya que, al incluir pocas
instrucciones es fácil de aprender y difícil de cometer errores. El hecho de que sea
compatible con C y C++ lo hacen ideal para una gran cantidad de proyectos. El lenguaje
Cilk es bastante sencillo si ya sabes C. Consiste en el lenguaje C con seis palabras
claves para ocuparse del paralelismo y la sincronización. Un programa en Cilk tiene la
misma semántica que un programa en C si se eliminan las palabras claves de Cilk.
Cuando se corre un programa en un procesador y sin estas palabras claves el programa
es llamado “serial eleison” o un “C eleison” que básicamente significa que el programa
en Cilk tiene el mismo desempeño que la versión de C.
Curry es un lenguaje de programación universal, multi-paradigmatico, fuertemente
tipado, con inferencia de tipos y tipado estático que tiene como objetivo principal
conjuntar los paradigmas más importantes de programación declarativa: la
20
Tarea académica Microprocesadores
programación funcional, la programación lógica y programación de restricciones.
Además, abarca los principios operativos más importantes desarrollados en el ´área de
lenguajes lógicos-funcionales: residuation y narrowing. Curry combina una serie de
características de la programación funcional (expresiones anidadas, funciones de orden
superior, lazy evaluation), de la programación lógica (variables lógicas, estructuras
parciales de datos, built-in search), y la programación concurrente (evaluación
concurrente de las expresiones con la sincronización en variables lógicas). El desarrollo
de Curry es una iniciativa internacional que surgió la década pasada cuyo objetivo es
proporcionar una plataforma común para la investigación, la enseñanza y la aplicación
de lenguajes lógicos-funcionales. Su principal diseñador es Michael Hanus. Curry
ofrece una forma muy sencilla y transparente para incorporar concurrencia en sus
programas. Esto lo logra al momento de ejecutar restricciones con ayuda de variables
free. Este tipo de variables se encuentran sin instanciar o sin relacionar. El objetivo
principal al tener restricciones y variables free es asignarle valores a las variables hasta
que la expresión sea reducible, esto significa que la expresión llegue a un caso terminal
y se satisfaga la restricción. Curry es un lenguaje muy completo, resultado de la mezcla
de los paradigmas que lo componen. Esto permite que se resuelvan los problemas de
forma más sencilla ya que el programador puede modelar su código de forma muy
similar a la realidad. El implementar concurrencia en Curry es muy fácil gracias al uso
de restricciones combinado con el operador “&” ya que el programador no tiene que
agregar código extra y si se ejecuta en un equipo multinucleo adquiere la característica
de paralelo. El inconveniente de esta facilidad es que el problema a resolver tiene que
modelarse enfocado a restricciones para aprovechar la concurrencia. Pienso que es un
lenguaje que está en crecimiento por lo que puede adherir nuevas características y
funcionalidades para implementar concurrencia aprovechando las características de los
paradigmas que lo conforman.
D es un lenguaje de sistemas que surge como una mejora práctica de C++, pero
enriquecido de muchas maneras por otros lenguajes. Fue diseñado desde su incepción
para ser multiparadigma, pues soporta la programación orientada a objetos, funcional,
imperativa, concurrente y la meta programación. En este artículo se expondrá una breve
introducción a D y se discutirá su enfoque en la concurrencia. Siendo D un lenguaje de
21
Tarea académica Microprocesadores
sistemas, se ofrece una variedad de formas para crear programas concurrentes. A
continuación se mencionan las formas y herramientas incluidas en el lenguaje. La forma
principal y sugerida por D es la utilización de threads aislados que se comunican a
través de paso de mensajes. Sin embargo, también se provee sincronización de las
conocidas secciones críticas protegidas por mutexes y variables de evento. Cualquier
uso de operaciones o funciones que no se consideren seguras (a través de la propiedad
@safe) es responsabilidad del programador. D es un lenguaje que nos ofrece una
versión aumentada y mejorada de C++. Tenemos a nuestra disposición todas las
herramientas para desarrollar cualquier aplicación que deseemos con un altísimo grado
de control, teniendo al mismo tiempo la posibilidad de utilizar elementos del mismo
lenguaje que nos facilitan ciertas tareas. Es agradable ver que D nos provee de
soluciones que necesitan atención especial en C++ y que nos dan la ventaja de
despreocuparnos de particularidades que sólo nos quitarían tiempo de desarrollo o
pruebas. De igual manera es interesante ver que la concurrencia manejada en D tiene un
enfoque sumamente moderno, desafiando paradigmas de los lenguajes sobre los que
está basado, ya que toma partes probadas de otros lenguajes para resolver problemas
con diferentes paradigmas de programación. Esta flexibilidad e innovación le da al
programador diversas herramientas empaquetadas en un mismo lenguaje de
programación para que no necesite disponer de bibliotecas a la hora de desarrollar
aplicaciones o al enfrentarse a problemas. Cabe destacar que D, al reunir lo mejor de
diferentes lenguajes, requiere de un dominio de conceptos que van de nivel intermedio a
avanzado de programación. La transición desde un lenguaje como C o C++ resulta
natural y fluida, pero tener conocimientos de programación funcional y concurrente y de
meta programación son los que desatan el verdadero potencial de un programador que
utiliza D. El manejo y soporte por parte de D para la concurrencia es bastante
sofisticado, sobre todo por el rol tan importante que juega el compilador en la
validación de código mientras se asegura de eliminar la mayor cantidad posible de
problemas que pueden surgir al correr programas que utilizan el paralelismo. De las
formas en las cuales D soporta la concurrencia, se recomienda más la utilización de
variables explícitamente no compartidas en los threads y la comunicación entre ellos por
paso de mensajes. En caso de compartir datos, es recomendable que se haga uso de
22
Tarea académica Microprocesadores
variables inmutables.
El lenguaje Fortress debe su nombre a la idea de ser un Fortran seguro que provee fuerte
abstracción y seguridad en tipos según los principios de los lenguajes de programación
modernos. Entre sus características principales se encuentran un paralelismo implícito
para los ciclos más comunes y facilitando el trabajado de administrar los hilos de
ejecución, soporte para caracteres Unicode y una sintaxis muy concreta similar a la
notación matemática. Fortress está desarrollado para crear programas paralelos con
facilidad combinando una gran funcionalidad con bibliotecas desarrolladas en Java pero
optimizando todos los procesos . El desarrollo de este trabajo nos ha ayudado a expandir
nuestro conocimiento sobre lenguajes de programación y los diferentes alcances en lo
que refiere a la programación concurrente y paralela sobre la forma que los autores la
ven y diseñan. Cuando vimos por primera vez un programa escrito en Fortress nos
pareció algo extraño ver la notación matemática en un programa computacional debido
a que no estamos acostumbrados a ello. Estudiándolo nos dimos cuenta que al crear de
esa manera el lenguaje, la forma de programar es más intuitiva para los matemáticos. Ya
no diseñarían y analizarían sus problemas en papel, ahora seria en una computadora. Por
el otro lado, sentimos que al lenguaje le faltaron más formas de expansión para darse a
conocer en todos los rubros porque la idea de que el paralelismo sea una característica
por defecto lo hace interesante y el manejo de hilos de ejecución es muy sencillo. A
pesar de que Oracle no continuará con más investigación y desarrollo del lenguaje
pensamos que varias características de este lenguaje deberían ser tomadas en cuenta
para el desarrollo de futuros lenguajes de programaci´on.
F# es un lenguaje de programación que opera sobre la plataforma .NET e incluye
paradigmas como programación funcional, así como también programación imperativa
y programación orientada a objetos. F# es una variante de ML y es compatible con
implementaciones de OCaml. F# fue originalmente desarrollado por Don Syme en los
Laboratorios de Investigación de Microsoft en Cambridge y actualmente se distribuye
como un lenguaje totalmente soportado en la plataforma .NET y en Visual Studio. F# es
un lenguaje que utiliza inferencia de tipos y además soporta declaraciones de tipos
explicitas. F# soporta todos los tipos que están dentro del Common Language
Infrastructure (CLI) y además categoriza esos tipos como inmutables, lo cual facilita el
23
Tarea académica Microprocesadores
diseño de aplicaciones multinucleo, o como mutables. F# es un lenguaje de
programación simple y pragmático que tiene fortalezas particulares en programación
orientada a datos, programación paralela de operaciones de entrada/salida, programaci
´on paralela en CPU, scripting y desarrollo de algoritmos. Además permite el acceso a
una gran biblioteca de herramientas base ya incluidas en Visual Studio. F# ofrece varias
opciones para paralelizar programas secuenciales, desde el manejo directo con hilos a
nivel sistema operativo hasta modelos y patrones de diseño que abstraen el manejo de
bajo nivel. Además, la infraestructura de .NET incluye muchas clases útiles para la
concurrencia y tareas asíncronas, aunque no todas ofrecen la misma simplicidad en F#
que ofrecen otros lenguajes de .NET. Al ofrecer opciones de diferente grado de control
y complejidad, F# hace un buen trabajo al atacar los temas de paralelizacion,
concurrencia y tareas asíncronas, aunque todavía hay campo para mejorar; la existencia
de expresiones computacionales, tipos inmutables y la inclusión del paradigma
funcional en su sintaxis son una ventaja mientras que la disponibilidad y
funcionamiento de varios tipos de candados para el manejo de memoria compartida
puede mejorar. En general, F# cumple con las características necesarias para mejorar la
programaci´on serial a través del diseño paralelo y concurrente.
En el año 2009 Google Inc. anunció un nuevo lenguaje de programación llamado Go,
que es un lenguaje de programación concurrente y compilado inspirado en la sintaxis de
C. Go está diseñado para incrementar la eficiencia, para que así pueda ser usado para
escribir grandes aplicaciones con el menor tiempo de compilación. Soporta
concurrencia usando Goroutines y un canal de comunicación tipo CPS, y gracias a ello,
hace más fácil el escribir programas para obtener el máximo rendimiento de las
maquinas multinucleo y en red. Los ingenieros que desarrollan el lenguaje, lo describen
como rápido, divertido y productivo, donde pueden escribir sus programas más rápido,
más efectivo y que soporta los grandes sistemas distribuidos que conectan miles de
maquinas y el tipo de problemas que se encuentran al escribir ese tipo de programas El
lenguaje de programación Go de Google es relativamente nuevo, con tan sólo 2 o 3 años
desde su lanzamiento, y aunque sigue en una fase experimental, los ingenieros de
Google han probado su velocidad en Web Crawl contra lenguajes como Python, Ruby y
Scala. Este lenguaje ha recibido muy buenas críticas entre comunidades de
24
Tarea académica Microprocesadores
programadores, que usándolo por poco tiempo, se han adaptado muy bien y lo han
descrito como efectivo y rápido, aunque nunca hayan programado en un ambiente
paralelo. El lenguaje es fácil de instalar, incluye muchas bibliotecas y tiene la
documentación suficiente para que la gente pueda empezar a usarlo y esté a la par de
lenguajes como Erlang. Go recopila aspectos de C++ y C, y escribir en este lenguaje
tiene muchas ventajas, pero es importante comprender que tiene sus propias
propiedades y convenciones.
Io es un lenguaje de programación orientado a objetos basado en prototipos, dinámico y
fuertemente tipado. Su autor, Steve Dekorte, cita a Smalltalk, Newtonscript, Lua y Lisp
como sus principales influencias. Al igual que Ruby, Io es un lenguaje de programación
con facilidades importantes de meta programación que le permiten modificar incluso la
sintaxis del lenguaje. Además, al igual que Erlang, Scala y Clojure tiene un modelo de
concurrencia orientado a actores, en el cuál un componente corre en su propio thread,
aislado del resto. Io es un lenguaje que ofrece un modelo de concurrencia que a
comparación de algunos otros lenguajes, es más sencillo de usar. Esto es una fuerte
ventaja, sin embargo el problema que tiene Io es que no es un lenguaje muy eficiente. Si
bien es un lenguaje no tan veloz, su capacidad de concurrencia es una parte importante
que lo hace poder competir con otros lenguajes más veloces. Es una lástima que no sea
un lenguaje más usado, al punto de que no llega ni al top 50 del TIOBE Índex.
Esperamos que su popularidad aumente o que si no, al menos que lleguen nuevos
lenguajes con ideas similares con respecto al modelo de concurrencia.
Modula-3 fue diseñado a finales de los años ochenta en Digital Equipment Corporation
(DEC) y Olivetti Research Center (ORC) por Luca Cardelli, Jim Donahue, Mick Jordan,
Bill Kalsow y Eric Muller. Modula- 3 es un lenguaje miembro descendiente de la
familia Pascal, es el sucesor inmediato de Modula-2+ y por su naturaleza por Modula-2.
Mejorando muchas deficiencias de sus predecesores e incorporando nuevas
funcionalidades, Modula-3 es un lenguaje de programación orientado a objetos, tiene
manejo de excepciones, encapsulamiento, un recolector de basura automático y la
característica principal de este articulo: manejo de Threads. Para esa época eran pocos
los lenguajes de programación que implementaban el paradigma orientado a objetos y
el recolector de basura automático, además Modula-3 es un leguaje bastante robusto por
25
Tarea académica Microprocesadores
lo que sería interesante analizar por qué no es uno de los lenguajes más utilizados hoy
en día, sin embargo, no es el objetivo de este articulo. El objetivo principal del lenguaje
era crear un lenguaje imperativo que implementara las características más importantes
de los lenguajes modernos de ese tiempo de una manera sencilla y segura, es por esa
razón que se omiten características como sobrecarga de operadores, herencia múltiple y
otras características que son consideradas complicadas y “peligrosas”. Modula-3 es un
lenguaje de programación que cuenta con la mayoría de las necesidades que hoy en día
utilizamos. Es interesante ver que a pesar de ello, no es un lenguaje que se mencione
mucho o que se utilice al mismo nivel que lenguajes que soportan lo que este lenguaje
soporta, se menciona que puede ser un lenguaje más orientado a la enseñanza sin
embargo uno de los problemas más grandes es que se le dejó de dar soporte al lenguaje
convirtiéndose en un lenguaje olvidado. Es sin duda un lenguaje interesante para
trabajar y para la época uno de los lenguajes que revolucionaron el concepto de la
Programación Orientada a Objetos, pues como se mencionó se creó a finales de los
ochenta y para 1991 no muy lejos se comenzaba a idear Java. En cuanto al manejo de
concurrencia, tiene implementados los mecanismos necesarios de sincronización para el
manejo de Threads lo que nos permitiría escribir programas “Thread-safe”, sin
embargo, su implementación es un poco confusa a diferencia de otros lenguajes como
Java. Probablemente en parte es porque ya estamos acostumbrados a desarrollar en Java
que no es un lenguaje modular por lo que se nos hace más fácil instanciar objetos y
escribir programas con uso de Threads.
OpenCL es un lenguaje diseñado para utilizar cualquier procesador que se encuentre, ya
sea CPU, GPU u otros y fue diseñado principalmente por Apple Inc quien hizo partícipe
del proyecto al grupo Khronos. Actualmente apoyan el proyecto diferente OEMs
(Original Equipment Manufacturer) como IBM, AMD, Intel, Nvidia, EA, Ericsson,
entre muchos otros. Actualmente el proyecto le pertenece a Nvidia. La primera versión
que fue liberada al público fue el 8 de Diciembre de 2008, para la cual se trabajó 5
meses (de Junio de 2008 hasta Noviembre de 2008) y después el grupo Khronos revisó
y aprobó el proyecto. OpenCL significa Open Computing Language y su objetivo es
hacer que máquinas heterogéneas de diferentes fabricantes puedan trabajar
26
Tarea académica Microprocesadores
conjuntamente. OpenCL, básicamente, es un framework de programación para
desarrollar aplicaciones que aprovechen recursos computacionales heterogéneos y
permite ejecutar código en plataformas mixtas (sin importar el fabricante o cuántos
procesadores tiene) que pueden consistir en CPUs, GPUs y otros tipos de procesadores.
Este framework incluye un lenguaje propio el cual mantiene similaridades con el
lenguaje C. También hace uso de las GPUs para realizar tareas diferentes a graficas
computacionales (a esto se le llama General Purpose GPU). OpenCL también se
compone de un API que corre en la computadora anfitriona y hace posible el manejo y
control de objetos y código de OpenCL, así como lidiar con los dispositivos de
procesamiento viéndolos como unidades de procesamiento abstractas e independientes.
Sin embargo, se tiene que entender que OpenCL no proporciona los SDKs, estos son
proporcionados por la compañía correspondiente. Es decir, para el SDK de AMD tienes
que ingresar al portal oficial de AMD y descargar el SDK de OpenCL para AMD, de
igual forma para las tarjetas gráficas Nvidia OpenCL es un tema complejo. Programar la
aplicación más sencilla puede poner a prueba al desarrollador, ya que se necesita
comprensión sobre programación en un anfitrión, programación para dispositivos y los
mecanismos necesarios para transferir datos entre ambos. Sin embargo, si se logra
dominar un framework tan poderoso como este, es evidente el jugo que se le puede
sacar. Además, un framework con un soporte tan grande, de parte de tantos
distribuidores conocidos sencillamente brinda al programador la tranquilidad de que el
framework está desarrollado de manera correcta, utilizando estándares de la industria de
la tecnología de la información. Además de que es seguro de que los problemas serán
solucionados velozmente, por un grupo altamente calificado de desarrolladores.
OpenCL es un framework extremadamente robusto, que tiene una funcionalidad muy
extensa, imposible de describir completamente en un artículo como este. Sin embargo,
creemos que con lo descrito en el, alguien que desee conocer el funcionamiento general
y los objetivos de OpenCL puede hacerlo al leer el presente artículo. En general,
programar en OpenCL es cómo manejar un camión grande, de dieciséis llantas. Los
principios de manejar son los mismos, pero al tener tanta carga en la caja, se tiene que
lidiar y manejar pensando en muchas otras preocupaciones”.
27
Tarea académica Microprocesadores
Oz es un lenguaje de programación el cual fue creado por Gert Smolka, junto con sus
estudiantes en el año de 1991. En 1996 el desarrollo de Oz fue continuado gracias al
grupo de investigación de Seif Haridi y Peter Van Roy en el Instituto Sueco de las
Ciencias Computacionales. Ésa versión fue conocida como Oz 2. A partir del año 1999
Oz, fue desarrollado por el grupo internacional conocido como el Consorcio Mozart. El
grupo fue conformado por la Universidad del Sarre, SICS, y la Universidad Católica de
Lovania. La implementación principal de Oz es el sistema Mozart, el cual fue liberado
bajo una licencia de código abierto, por lo tanto Mozart y Oz son software libre,
también conocido como open source. Actualmente Mozart implementa Oz 3, el cual
está basado en un modelo concurrente y con restricciones. Después de haber revisado y
analizado las diversas características del lenguaje se concluye que Oz posee diversas
características interesantes sobre el manejo de programas de forma concurrente, como
implementación de estructuras de datos complejas y esquemas de cómputo distribuido
que posiblemente han sido de cierta influencia en otros lenguajes de programación o
han tenido efecto en el desarrollo de varias bibliotecas que presentan muchas similitudes
con diversas características del lenguaje como manejo de estructuras de datos
concurrentes, siendo un ejemplo de ello Intel Threading Building Blocks.
Scala, un lenguaje de programación multiparadigma, como una opción atractiva para el
desarrollo de software paralelo. Está dirigido a personas con conocimientos de lenguaje
orientado a objetos y que tengan noción sobre programación concurrente y/o paralela.
Scala fue diseñado por Martin Odersky y liberado a finales del 2003 e inicios del
siguiente año. Los sistemas de tipo que utiliza son static, strong, structural e inferred.
Este lenguaje de programación fue influenciado por Eiffel, Erlang, Haskell, Java, Lisp,
Pizza, Standard ML, OCaml, Scheme y Smalltalk; y a la vez, ha influenciado a otros
como Fantom, Ceylon y Kotlin. Corre sobre las plataformas JVM y CLR (Common
Language Runtime). Para terminar este artículo con broche de oro no nos queda más
que comentar que la experiencia de trabajar con Scala por lo menos en dos ejemplos fue
bastante agradable.
28
Tarea académica Microprocesadores
APLICACIONES
Los procesadores con varios núcleos son habituales en las configuraciones tanto de los
equipos de sobremesa como de los portátiles. Desde dos núcleos hasta seis, pasando por
tres y cuatro, tanto Intel como AMD han visto en ellos la fórmula para incrementar el
rendimiento de los PCs sin necesidad de aumentar la frecuencia de reloj de los
microprocesadores.
Multiprocesador y multinúcleo, parecido pero no igual
Estos dos términos se prestan a cierta confusión; sin embargo, aunque presentan cierta
similitud, no deben confundirse. Un sistema multiprocesador es aquel que tiene más de
un zócalo donde «pinchar» un procesador. A su vez, un procesador puede contener uno
o más núcleos, en cuyo caso se habla de procesador multinúcleo, o multi-core si se usa
el término anglosajón.
En ambos casos, se trata de configuraciones donde se emplea el paralelismo como
método para aumentar el rendimiento efectivo de un equipo, pero mediante estrategias
distintas. Los equipos multiprocesador encajan mejor en entornos empresariales, en los
que se necesita un nivel de paralelismo mayor que el que puede ofrecer un sistema con
un único procesador y varios núcleos. Por ejemplo, los sistemas Xeon de dos
procesadores pueden acomodar hasta 12 núcleos físicos y 24 núcleos en total
Paralelismo
Frente a estos impedimentos para el aumento del rendimiento a partir de un único
procesador, tanto Intel como AMD adoptaron la estrategia del paralelismo. Si en un
sistema con una sola CPU y un único núcleo las tareas en ejecución tenían que ir
alternando el uso de la CPU, en un sistema con varios procesadores y/o núcleos la
táctica consiste en repartir la ejecución de las tareas entre los distintos procesadores /
núcleos.
Este reparto de los recursos se realiza de forma automática por parte del sistema
operativo, que asigna prioridades a los procesos y servicios en ejecución, aunque de un
modo poco inteligente. Es decir, no hay una forma especial de asignar prioridades ni
29
Tarea académica Microprocesadores
afinidades dependiendo de su relevancia para los usuarios. Por ejemplo, para el sistema
operativo un antivirus está en igualdad de condiciones que Office cuando se trata de
asignar recursos de procesador, pero también se podría intentar dar más recursos a una
aplicación si en determinadas circunstancias importa más finalizar una tarea dada
mientras las demás se siguen ejecutando con menos recursos.
Este tipo de personalización es posible usando tanto herramientas del sistema como
programas específicos para ello, como Ashampoo Core Tuner o AMD OverDrive. Estas
utilidades permiten asignar los distintos núcleos presentes en el sistema a diferentes
aplicaciones y procesos.
OverDrive es específica para procesadores de AMD y es todo un compendio de
tecnología dedicada a sacar el máximo partido a las CPUs. No obstante, Ashampoo
Core Tuner presenta problemas con el procesador Core i7 980X de 6 núcleos,
mostrando solo cuatro de ellos (ocho si se contabilizan los virtuales a partir de la
presencia de Hyper-Threading). Por su parte, OverDrive, en el caso de que tengas un
procesador AMD, sí presenta un funcionamiento impecable, con un completo sistema
para gestionar perfiles personalizados en los cuales se puede definir con precisión la
afinidad para cada aplicación que se esté ejecutando en el sistema.
En realidad, OverDrive contempla bastantes más apartados que el de la asignación de
núcleos a programas dependiendo de nuestras necesidades particulares, con una gestión
completa de los parámetros de velocidad de los núcleos, el voltaje, la memoria, etc. Pero
para el caso que nos ocupa, y suponiendo que tenemos un procesador de al menos
cuatro núcleos, la parte interesante es la que hace posible crear perfiles para las
aplicaciones en los cuales se asignan afinidades diferentes según el reparto que se quiera
hacer de los núcleos.
Así, se podría asignar a un programa como Photoshop la totalidad de los núcleos,
mientras que a un antivirus se le podría dejar uno solo. Al mismo tiempo, al Explorador
de archivos se le podría asociar con uno o dos núcleos, de modo que en caso de que se
«cuelgue» sea más sencillo hacerse con el control del sistema.
El disco adecuado
De poco vale tener el procesador más potente del mercado con seis núcleos, como es el
30
Tarea académica Microprocesadores
caso del Intel Core i7 980X, y tener instalada una cantidad de memoria por debajo de 4
Gbytes con un disco duro lento. Lo que se gana con un procesador más potente se puede
perder si el resto de los componentes «frenan» al sistema.
Además, en un escenario multitarea lo más probable es que todas las aplicaciones hagan
uso del disco duro para leer y guardar datos. Esto supone un problema para los discos
magnéticos, por ejemplo, que se ralentizan enormemente frente al acceso múltiple desde
distintos procesos y aplicaciones simultáneas.
Por ello, uno de los primeros componentes que resulta interesante revisar para conseguir
aprovechar al máximo un sistema multinúcleo es el disco duro, que preferiblemente será
de tipo SSD, precisamente para minimizar el impacto negativo de los accesos múltiples
al disco. Las pruebas de rendimiento son incontestables.
Memoria: cantidad frente a velocidad
Otro de los componentes que hay que dimensionar correctamente es la memoria
principal. No se trata tanto de instalar la más rápida como de implantar una cantidad lo
más generosa que sea posible. Las aplicaciones usan la RAM preferentemente y, cuanta
más haya, menos necesidad hay de leer y escribir en un disco duro.
Eso sí, con una cantidad de RAM por encima de 4 Gbytes es interesante deshabilitar el
archivo de intercambio para reducir al mínimo el uso de los discos duros. Con 8 Gbytes
habrá más que suficiente para abordar las tareas y aplicaciones en un escenario
doméstico avanzado. Insistimos, no hace falta que sea la más rápida ni con las latencias
más agresivas, solo necesitamos que supere los 1.066 MHz
La placa base
En el caso de los procesadores AMD, la elección de una placa base es extremadamente
importante. La razón radica en el uso por parte de AMD de procesadores de cuatro y
seis núcleos físicos para comercializar productos etiquetados como de tres o cuatro
núcleos. Si se dispone de una placa base que permita desbloquear en la BIOS los
núcleos ocultos, se tiene la posibilidad de conseguir un sistema bastante más capaz a
partir de un procesador económico.
Utiliza la virtualización
Una de las mejores maneras de aprovechar al máximo las virtudes de un sistema
31
Tarea académica Microprocesadores
multinúcleo es adoptar soluciones de virtualización. En esencia, se trata de hacer que un
mismo equipo físico sobre el que se instala un software de virtualización se vea de cara
al exterior como un conjunto de máquinas distintas.
Los ejemplos más habituales son la ejecución de Windows y Linux en una misma
máquina, o configurar aplicaciones que se ejecuten de manera independiente sobre una
máquina virtual. Los procesadores multinúcleo, junto con una cantidad de memoria
suficiente, permiten que el rendimiento global se incremente respecto al de sistemas
donde no se usan máquinas virtuales al aprovechar todo el potencial de rendimiento
disponible en el procesador.
Conexión a escritorio remoto
Si tienes un portátil, trabajas desde el salón de casa o el dormitorio y necesitas la
potencia del ordenador «grande», no tienes por qué dejar de estar delante del portátil. Si
estableces una conexión a escritorio remoto desde el laptop al PC podrás ejecutar
remotamente aplicaciones sin moverte de tu sillón.
Las únicas que presentan un comportamiento anómalo cuando se lanzan remotamente
son las de índole gráfica; pero, en general, no hay problema para trabajar con cualquier
programa instalado en el equipo remoto.
Las mayores ventajas se obtienen cuando esta conexión se realiza desde un equipo
portátil o incluso desde un móvil, puesto que, en esos casos, el portátil o el móvil se
comportarán «virtualmente» como si se tratase de un equipo de sobremesa, al cual se le
sacará un partido extraordinario al usarlo incluso cuando no se está delante de él
físicamente.
Existen distintas aplicaciones que facilitan la tarea de la conexión no solo dentro de la
misma red doméstica en casa, sino también desde cualquier ubicación remota donde
haya una conexión a Internet. Desde RDC en Windows o Conexión a Escritorio Remoto
en Mac, ambas de la propia Microsoft, hasta LogMeIn, que es una de las referencias en
esta área, permitiendo incluso establecer una conexión remota desde un móvil. De
especial interés es la conexión desde un smartphone con una pantalla de alta resolución,
como puede ser un iPhone 4 o un iPad.
32
Tarea académica Microprocesadores
ORGANIZADOR TEMATICO
33
ARQUITECTURAS DE PROCESADORES MULTINUCLEO
BREVE HISTORIA
En los últimos veinte años el rendimiento en los procesadores se ha duplicado aproximadamente cada dos años
CONCEPTOSSOCKET : matriz de pequeños agujeros en la placa base donde encaja los pines del procesador.CACHE: actua como una memoria temporal en tre los registros de CPU.MMX : conjunto de instrucciones SIMD.SSE : extension al grupo de instruccion MMX.FSB : bus frontal de datos .
Antes de construir los procesadores multinucleo los fabricantes utilizaron tecnologías que simulaban esta, tenemos a continuación:Tecnologías empleadas por INTEL:• Hyper-Threading• Intel 64 Architecture• Bit de desactivación de ejecución y seguridadTecnologías empleadas por AMD:• HyperTransport• AMD 64• Bit NX
PROCESADORES MULTINUCLEO Las arquitecturas multinúcleo se refieren a microprocesadores que combinan dos o más núcleos independientes en un solo paquete ó circuito integrado,
procesadores Intel de escritorio:Pentium D:
Pentium Extreme Edition: Pentium 4 Prescott, Pentium Dual Core:
Intel Core 2 Duo: Intel Core 2 Quad:
procesadores AMD de escritorio:AMD Athlon 64 X2 Dual Core:
AMD Sempron:AMD Athlon 64:
AMD Athlon 64 FX: AMD Athlon X2 Dual Core
ARQUITECTURAS SIMD,MIMD,STM
SIMD :es un sistema en el que la misma instrucción manipula diferentes datos en paralelo
MIMD :es un sistema que tiene múltiples procesadores y capaz de trabajar independientemente y producir resultados para el sistema global
SMT dentro de un procesador superescalar fuera de orden ya hay mecanismos Hw para soportar la ejecución de más de un thread gran numero de registros físicos
PROGRAMACION MULTINUCLEOADA :un lenguaje de programación de alto nivel estructurado, con tipos estáticos, y orientado a objetosCHAPEL :es un lenguaje de programación paralelo emergente en el que su diseño y desarrollo está dirigido por Cray IncCILK :es un lenguaje algorítmico basado en múltiples threadsCURRY :es un lenguaje de programación universal, multi-paradigmatico, fuertemente tipado, con inferencia de tipos y tipado estático D :es un lenguaje de sistemas que surge como una mejora práctica de C++FORTRESS :debe su nombre a la idea de ser un Fortran seguro que provee fuerte abstracción y seguridad en tiposF# :es un lenguaje de programaci´on que opera sobre la plataforma .NET e incluye paradigmas como programación funcionalGO :es un lenguaje de programaci´on concurrente y compilado inspirado en la sintaxis de CIO :es un lenguaje de programaci´on orientado a objetos basado en prototipos, dinámico y fuertemente tipadoMODULA-3 :es un lenguaje miembro descendiente de la familia Pascal, es el sucesor inmediato de Modula-2+ OPENCL :es un lenguaje diseñado para utilizar cualquier procesador que se encuentre, ya sea CPU, GPUOZ :el cual está basado en un modelo concurrente y con restriccionesSCALA :un lenguaje de programación multiparadigma, como una opción atractiva para el desarrollo de software paralelo
APLICACION
PARALELISMO :en un sistema con varios procesadores y/o núcleos la táctica consiste en repartir la ejecución de las tareas entre los distintos procesadores / núcleos.EL DISCO ADECUADO :que preferiblemente será de tipo SSD, precisamente para minimizar el impacto negativo de los accesos múltiples al discoMEMORIA: cantidad frente a velocidad :no hace falta que sea la más rápida ni con las latencias más agresivas, solo necesitamos que supere los 1.066 MHzLA PLACA BASE :que permita desbloquear en la BIOS los núcleos ocultos, se tiene la posibilidad de conseguir un sistema bastante más capaz a partir de un procesador económico.UTILIZA LA VIRTUALIZACIÓN :se trata de hacer que un mismo equipo físico sobre el que se instala un software de virtualización se vea de cara al exterior como un conjunto de máquinas distintasCONEXIÓN A ESCRITORIO REMOTO :ventajas se obtienen cuando esta conexión se realiza desde un equipo portátil o incluso desde un móvil, puesto que, en esos casos, el portátil o el móvil se comportarán «virtualmente»
Tarea académica Microprocesadores
34
Tarea académica Microprocesadores
CONCLUSIONES
Todos creemos que un procesador con más de un núcleo aumentará su velocidad al
doble de lo que era, en parte aumenta la velocidad pero no a tal dimensión, también algo
muy importante es que el ahorro de energía aumenta considerablemente debido a que
entre más núcleos existan, la tarea que se esté procesando no aumentará la velocidad de
reloj por lo cual se reducirá el riesgo de un sobrecalentamiento. Hay que tener en cuenta
que aunque existan procesadores con 16 núcleos o más, que incluso se habló que podían
a llegar a ser 100, nosotros como usuarios simples jamás aprovecharíamos al máximo
esas características, sería más factible tratándose de grandes servidores.
35
Tarea académica Microprocesadores
BIBLIOGRAFIA
Rodolfo jiménez cancino. “Análisis del Impacto de Arquitecturas Multi-núcleo en
Cómputo Paralelo”. Tesis de Especialización. Instituto Politécnico Nacional,
México, 2009.
Juan Alexander Peña Serna. Arquitectura de Procesadores Familias Intel y AMD,
Universidad Nacional de Piura, Perú ,2012.
El procesador: Aspectos Tecnológicos http://www.zator.com/Hardware/H3 1.htm
José Ignacio Alvarez Ruiz. “Microprocesadores multinucleo. Diseño de
procesadores y evaluación de configuraciones”. Universidad de Córdoba, Bolivia
2007.
36