Paralelismo en el Procesador
Paralelismo es una
función que realiza el procesador para ejecutar varias tareas al mismo tiempo.
Es decir, puede realizar varios cálculos simultáneamente, basado en el
principio de dividir los problemas grandes para obtener varios problemas
pequeños, que son posteriormente solucionados en paralelo.
PARALELISMO A NIVEL DE INSTRUCCIONES
El
paralelismo a nivel de instrucción consiste en una técnica que busca que la
combinación de instrucciones de bajo nivel que ejecuta un procesador puedan ser
ordenadas de forma tal que al ser procesadas en simultáneo no afecten el
resultado final del programa, y más bien incrementen la velocidad y aprovechen
al máximo las capacidades del hardware. Un pipeline (canalizador) de
instrucciones es el que permite que por cada ciclo de reloj del procesador
múltiples instrucciones se encuentren en distintas fases de ejecución.
El paralelismo a nivel
de instrucción es aplicable dentro de cada bloque básico (secuencia de
instrucciones sin saltos). Sin embargo, la longitud media de un bloque básico es
de 3 a 6 instrucciones lo que reduce bastante su posible aprovechamiento. Una
técnica para mejorar el aprovechamiento del ILP dentro de un bucle se conoce
como des enrollamiento de bucles. El des enrollamiento de bucles consiste en
entrelazar la ejecución de instrucciones de varias iteraciones de un bucle. Al
tratarse de instrucciones no relacionadas no generan dependencias y permiten un
mejor aprovechamiento de la arquitectura segmentada.
PARALELISMO A NIVEL DE DATOS
Paralelismo a nivel de datos es un paradigma de la programación concurrente que
consiste en subdividir el conjunto de datos de entrada a un programa, de manera
que a cada procesador le corresponda un subconjunto de esos datos. Cada
procesador efectuará la misma secuencia de operaciones que los otros
procesadores sobre su subconjunto de datos asignado. En resumen: se distribuyen
los datos y se replican las tareas.
Idealmente, esta ejecución simultánea de operaciones, resulta en una
aceleración neta global del cómputo.
El paralelismo a nivel de datos es un paradigma suficientemente adecuado
para operaciones sobre vectores y matrices, dado que muchas de ellas consisten
en aplicar la misma operación sobre cada uno de sus elementos.
PARALELISMO DE TAREAS
El paralelismo de tareas es la característica de un programa
paralelo en la que cálculos completamente diferentes se pueden realizar en
cualquier conjunto igual o diferente de datos. Esto contrasta con el
paralelismo a nivel de datos, donde se realiza el mismo cálculo en distintos o
mismos grupos de datos. El paralelismo de tareas por lo general no escala con
el tamaño de un problema.
PARALELISMO A NIVEL DE BITS
Es cuando se aumenta el
tamaño de la palabra en la computadora, hacer esto reduce el número de
instrucciones que son necesarias para ejecutar una instrucción en la cual sus operandos
son más grandes que su tamaño de palabra.
MULTI THREADINGS
Arquitecturas que consideran
la ejecución simultánea de diferentes hilos de ejecución en un mismo
procesador: paralelismo a nivel de hilo o thread level parallelism (TLP). En
estas arquitecturas:
- Diferentes hilos de ejecución comparten las unidades funcionales del procesador (por ejemplo, unidades funcionales).
- El procesador debe tener estructuras independientes para cada uno de los hilos que ejecuta, como registro de renombre o contador de programa, entre otros.
- Si los hilos pertenecen a diferentes procesos, el procesador debe facilitar mecanismos para que puedan trabajar con diferentes tablas de páginas.
Arquitecturas
multihilo, también conocidas como super-threading. Esta fue la siguiente de las
variantes TLP que apareció. El modelo de pipeline del procesador se extiende
considerando también el concepto de hilo de ejecución. En este caso, el
planificador (que escoge cuál de las instrucciones empezará en este ciclo)
tiene la posibilidad de escoger cuál de los hilos de ejecución empezará la
instrucción siguiente en el ciclo siguiente. Consiste en compartir los recursos
en el tiempo, es decir, en un ciclo concreto y en una etapa concreta del
procesador, solo se pueden encontrar instrucciones de un mismo hilo.
MULTI NUCLEO
El concepto de multi núcleo,
como su nombre indica, consiste en replicar m núcleos diferentes dentro de un
procesador. Cada núcleo acostumbra a tener una memoria caché de primer nivel
(de datos e instrucción) y puede tener una memoria de segundo nivel (suele ser
unificada: datos más instrucciones). Aparte de los núcleos, el procesador
acostumbra a tener otros componentes especializados y ubicados fuera de estos.
Habitualmente, existen los siguientes: una memoria de tercer nivel, un
controlador de memoria y componentes para hacer
procesamiento de gráficos, entre otros. Todos estos componentes (incluidos los
núcleos) se encuentran conectados mediante una red de interconexión. Esta es el
medio físico y lógico que permite enviar peticiones de un componente a otro.
Como se ha introducido, uno de los componentes de un
multinúcleo fundamental es el controlador de memoria. Este gestiona las
peticiones de acceso al subsistema de memoria que hace el resto de componentes
(tanto lecturas como escrituras).
CLASIFICACION DE FLYNN
La taxonomía de Flynn
es la clásica clasificación usada en computación paralela, la cual usa ideas
familiares al campo de la computación convencional para proponer una taxonomía
de arquitecturas de computadores. Esta es una de las más viejas, pero es la más
conocida hasta nuestros días. La idea central que se usa se basa en el análisis
del flujo de instrucciones y de datos, los cuales pueden ser simples o
múltiples, originando la aparición de 4 tipos de máquinas. Es decir, esta
clasificación está basada en el número de flujos de instrucciones y de datos
simultáneos que pueden ser tratados por el sistema computacional durante la
ejecución de un programa. Un flujo de instrucción es una secuencia de instrucciones
transmitidas desde una unidad de control a uno o más procesadores. Un flujo de
datos es una secuencia de datos que viene desde un área de memoria a un
procesador y viceversa. Se pueden definir las variables ni y nd como el número
de flujos de instrucciones y datos, respectivamente, los cuales pueden ser
concurrentemente procesados en un computador. Según eso, las posibles
categorías son:
SISD
(Single Instruction Stream, Single Data Stream)
Esta
representa la clásica máquina de Von-Neumann, en la cual un único programa es
ejecutado usando solamente un conjunto de datos específicos a él. Está
compuesto de una memoria central donde se guardan los datos y los programas, y
de un procesador (unidad de control y unidad de procesamiento). En esta
plataforma sólo se puede dar un tipo de paralelismo virtual a través del
paradigma de multitareas, en el cual el tiempo del procesador es compartido
entre diferentes programas. Así, más que paralelismo lo que soporta esta
plataforma es un tipo de concurrencia. Los PC son un ejemplo de máquinas que
siguen este tipo de procesamiento.
SIMD
(Single Instruction Stream, Multiple Data Stream)
Arreglo
de elementos de procesamiento, todos los cuales ejecutan la misma instrucción
al mismo tiempo. El enfoque de paralelismo usado aquí se denomina paralelismo
de datos. Los arreglos de procesadores son típicos ejemplos de esta clase de
arquitectura. En estas arquitecturas, un controlador recibe y decodifica
secuencias de instrucciones a ejecutar, para después enviarlas a múltiples
procesadores esclavos. El arreglo de procesadores procesa los datos que llegan
a los diferentes procesadores, usando la instrucción enviada por el
controlador. Los procesadores están conectados a través de una red. Los datos a
tratar pueden estar en un espacio de memoria que es común a todos los
procesadores o en un espacio de memoria propio a cada unidad de procesamiento.
Todos los procesadores trabajan con una perfecta sincronización. SIMD hace un
uso eficiente de la memoria, y facilita un manejo eficiente del grado de
paralelismo. La gran desventaja es el tipo de procesamiento (no es un tipo de
procesamiento que aparece frecuentemente), ya que el código debe tener una
dependencia de datos que le permita descomponerse.
MISD (Multiple Instruction Stream, Single
Data Stream)
Estas
son computadoras con elementos de procesamiento, cada uno ejecutando una tarea
diferente, de tal forma que todos los datos a procesar deben ser pasados a
través de cada elemento de procesamiento para su procesamiento.
Implementaciones de esta arquitectura no existen realmente, excepto ciertas
realizaciones a nivel de mecanismos de procesamiento tipo encauzamiento
(pipelining en inglés) (internamente en los procesadores RISC, etc.) o sistemas
de tolerancia a fallas. Muchos autores consideran que esta clase no corresponde
a un modo de funcionamiento realista. Otros autores consideran que representan
el modo de procesamiento por encauzamiento.
La idea es descomponer
las unidades de procesamiento en fases, en donde cada una se encarga de una
parte de las operaciones a realizar. De esta manera, parte de los datos pueden
ser procesados en la fase 1 mientras otros son procesados en la 2, otros en la
tres, y así sucesivamente. El flujo de información es continuo y la velocidad
de procesamiento crece con las etapas. Este tipo de clasificación de Flynn
puede ser incluida dentro de la clasificación SIMD si se asemeja el efecto de
estas máquinas, al tener múltiples cadenas de datos (los flujos) sobre las
etapas de procesamiento, aunque también puede ser visto como un modo MIMD, en
la medida de que hay varias unidades y flujos de datos y cada etapa está
procesando datos diferentes.
MIMD (Multiple Instruction Stream,
Multiple Data Stream)
Es el modelo más
general de paralelismo, y debido a su flexibilidad, una gran variedad de tipos
de paralelismo puede ser explotados. Las ideas básicas son que múltiples tareas
heterogéneas puedan ser ejecutadas al mismo tiempo,
y que cada procesador opere
independientemente con ocasionales sincronizaciones con otros. Está compuesto
por un conjunto de elementos de procesamiento donde cada uno realiza una tarea,
independiente o
no, con respecto a los otros procesadores. La conectividad entre los elementos
no se especifica y usualmente se explota un paralelismo funcional. La forma de
programación usualmente utilizada es del tipo concurrente, en la cual múltiples
tareas, quizás diferentes entre ellas, se pueden ejecutar simultáneamente.
Muchos sistemas de multiprocesadores y sistemas de múltiples computadores están
en esta categoría. Un computador MIMD es fuertemente acoplado si existe mucha
interacción entre los procesadores, de lo contrario es débilmente acoplado.
Comentarios
Publicar un comentario