INTRODUCCIÓN
El presente es un trabajo investigativo realizado para la clase de Arquitectura de computadoras de la Carrera de Ingeniería en Sistemas, UNAH.
En él se pretende dar a conocer fundamentos teóricos sobre el tema “Pararelismo en el procesador”, para ello será necesario abordar otros tópicos como ser:
- Las diferentes formas de paralelismo que existen:
- A nivel de datos.
- A nivel de instrucciones.
- Segmentación.
- Multinúcleo.
- Taxonomía de Flynn.
- Modelo SISD.
- Modelo SIMD
- Modelo MIDS
- Modelo MIMD
CONTENIDO
El paralelismo lo podemos definir como la ejecución de diversas actividades simultáneamente en varios procesadores.
Se puede hablar de un “pseudoparalelismo” cuando solamente existe un procesador gestionando multiprogramación.
Al hablar de paralelismo surge el concepto de concurrencia el cual se refiere a la existencia de varias actividades ejecutándose simultáneamente y necesitan sincronizarse para actuar de manera conjunta.
Hay concurrencia entre varios procesos cuando existen al mismo tiempo.
Hay paralelismo entre varios procesos cuando se ejecutan al mismo tiempo.
El paralelismo requiere un soporte físico: varios procesadores.
Paralelismo a nivel de datos.
El paralelismo a nivel de datos se da cuando cada procesador ejecuta la misma tarea sobre diferentes conjuntos o subregiones de datos.
Hace referencia a los escenarios en los que la misma operación se realiza simultáneamente (es decir, en paralelo) en elementos de una colección o matriz de origen. En las operaciones paralelas de datos, se crean particiones de la colección de origen para que varios subprocesos puedan funcionar simultáneamente en segmentos diferentes.
Ejemplo de paralelismo a nivel de datos con C# utilizando la librería “Task Parallel Library”
Esta biblioteca admite el paralelismo de datos a través de la clase System.Threading.Tasks.Parallel, Esta clase proporciona las implementaciones paralelas basadas en método de los bucles for y foreach .
| // Versión secuencial
foreach (var item in sourceCollection)
{
Process(item);
}
// Versión en paralelo
Parallel.ForEach(sourceCollection, item => Process(item));
|
Cuando un bucle paralelo se ejecuta, la TPL crea particiones del origen de datos para que el bucle pueda funcionar simultáneamente en varias partes. En segundo plano, el programador de tareas crea particiones de la tarea según los recursos del sistema y la carga de trabajo. Cuando es posible, el programador redistribuye el trabajo entre varios subprocesos y procesadores si se desequilibra la carga de trabajo.
Paralelismo a nivel de instrucción.
El paralelismo a nivel de instrucción se utilizó por primera vez en las arquitecturas computacionales como un medio para agilizar el código de máquina secuencial ordinario. La pregunta clave en su momento fue: “¿qué tan rápido puede ejecutarse un programa en un procesador con paralelismo a nivel de instrucción?”.
Ciclo de la instrucción.
Cada instrucción que se ejecuta un computador pasa por un ciclo, que va desde que es seleccionada desde memoria hasta que completa su objetivo. Este ciclo aunque es similar en todas las arquitecturas de computadores, presenta algunas variaciones, dependiendo de la complejidad de la microarquitectura y de decisiones de diseño.
Para evitar problemas al momento de analizar el modelo y trabajar con un ciclo más simple, se trabajará con una versión simplificada del computador básico, la cual se muestra en la siguiente figura:

El ciclo de la instrucción para este computador, contará de 5 etapas: instruction fetch, instruction decode, execute, memory y writeback.
Corresponde a la primera etapa del ciclo, en la cual se va a buscar a la memoria de instrucciones la siguiente instrucción, apuntada por el valor actual del “Program Counter”. La salida de esta etapa es la instrucción obtenida desde memoria, la cual se separará en un “opcode” y en un parámetro.
La segunda etapa del ciclo corresponde al “Instruction decode”, es decir la decodificación de la instrucción y la generación de las señales de control. La unidad de control se encargará de transformar el “opcode” de la instrucción obtenida en las señales de control específicas que le indicarán al procesador qué tarea ejecutar.
La tercera etapa corresponde a la ejecución, la cual es realizada mediante la ALU.
La ALU, como única unidad de ejecución en este computador, se encargará de realizar la operación seleccionada en la etapa previa, con los parámetros seleccionados también por las señales de control, obteniendo un resultado. Adicionalmente, la ALU también generará el “condition code Z”, dependiendo del resultado de la operación obtenida.
La cuarta etapa corresponde a la lectura o escritura en memoria de datos.
Esta etapa solo estará presente si a la instrucción ejecutada le correspondía transferencia hacia o desde memoria.
En esta etapa se podrá haber escrito en memoria, u obtenido un dato de esta para luego ser almacenado en un registro.
La última etapa del ciclo también estará presente solamente en algunas instrucciones.
En esta etapa de “writeback”, corresponderá escribir en los registros ya sea un resultado de la ALU o un dato obtenido desde memoria.
Segmentación (Pipelining).
La segmentación consiste en dividir un proceso secuencial en etapas independientes.
Existen diversos procesos que pueden ser modelados como un pipeline, siendo los más comunes las líneas de ensamblaje industriales, en las cuales distintas tareas son ejecutadas sobre un producto y luego de ejecutar todas las tareas se obtiene un producto final terminado.
La gran ventaja de un pipeline de ensamblaje está en que es posible paralelizar la producción de un producto, dado que al mismo tiempo que se le esté aplicando un proceso a un elemento, es posible estar ejecutando otra tarea sobre otro elemento.
De esta forma, al dividir la producción completa en tareas menores se logra reducir el tiempo, ya que se aprovecha que cada parte del proceso es independiente, y que por tanto queda “libre” una vez que un determinado elemento ha pasado por esta.
Instruction pipeline.
En el caso del procesamiento de la instrucción, esta secuencia de etapas se conoce como “instruction pipeline”, que contiene las distintas partes del ciclo de la instrucción antes descrito. En el “instruction pipeline” ocurre lo mismo que en el pipeline de ensamblaje: la idea es poder reutilizar cada una de las subetapas para ir procesando otras instrucciones de manera simultánea; de esta manera se consigue que N unidades funcionales del procesador estén trabajando a la vez, lo que redunda en un factor de mejor en el rendimiento del chip en circunstancias ideales.
Ventajas:
- El programador puede conocer las partes lógicas de su programa, dándoles un tratamiento particular.
- Es posible compilar módulos separados como segmentos.
- Es posible que los segmentos crezcan dinámicamente según las necesidades del programa en ejecución.
- Existe la posibilidad de definir segmentos que aun no existan.
Desventajas:
- Debido a que los segmentos tienen un tamaño variable se pueden presentar problemas de fragmentación externas.
- Al permitir que los segmentos varíen de tamaño, pueden ser necesarios planes de reubicación a nivel de los discos, si los segmentos son devueltos a dicho dispositivo, lo que conlleva a nuevos costos.
Tecnología MultiThreading.
Esta Tecnología permite ejecutar múltiples hilos para procesarlos en paralelo dentro de un único procesador. Esta tecnología simula dos procesadores no lógicos dentro de un procesador imaginario.

Ya que los programas usualmente ejecutan más de un “thread”, un paso más de desarrollo de procesadores es la incorporación de capacidad para ejecutar varios hilos. Se pueden mantener los recursos del procesador ocupados aún cuando un “thread” se frene ante un fallo de caché o una falla de predicción de salto.
Características.
- 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.
Las arquitecturas actuales explotan este paradigma de muchas formas diferentes. Sin embargo, la motivación es la misma: la mayoría de aplicaciones actuales tienen un alto nivel de paralelismo y su rendimiento escala añadiendo más paralelismo a nivel de procesador.
El objetivo es mejorar la productividad de los sistemas que pueden correr aplicaciones que son inherentemente paralelas.
Tecnología Multinúcleo.
Cuando se habla de “núcleos” o “Cores” de una CPU, se refiere a cada uno de los procesadores que están empaquetados en la cápsula, es decir en el chip. Entonces cuando nos referimos a “Tecnología Multinúcleo” nos referimos a dos o cuatro núcleos en un único chip. Básicamente, los CPU de varios núcleos, permiten que la computadora realice varios procesos a la vez en los diferentes procesadores que posee el chip.
Cada uno de los procesadores está fuertemente acoplado con una cache pequeña de 1er nivel, y todos los procesadores comparten una cache de 2º nivel. Los procesadores pueden colaborar en tareas paralelas o ejecutar tareas independientes. Requiere código con paralelismo explícito para aprovechar todo el potencial.
Definiciones
A continuación se muestra un recuadro con el significado de las definiciones con las cuales se conocen en el mercado a los diferentes tipos de CPU y la cantidad de cores o núcleos que contienen.
| TIPO DE PROCESADOR |
CANTIDAD DE NUCLEOS |
| Dual Core |
Dos núcleos |
| Quad Core |
Cuatro núcleos |
| Hexa Core |
Seis núcleos |
| Octo Core |
Ocho núcleos |
| Deca Core |
Diez núcleos |
Evolución potencial de las arquitecturas multicore.



Taxonomía de Flynn.
Michael Flynn propuso un mecanismo de clasificación de las computadoras.
El método de Flynn se basa en el número de instrucciones y de la secuencia de datos que la computadora utiliza para procesar información. Puede haber secuencias de instrucciones sencillas o múltiples y secuencias de datos sencillas o múltiples.

Modelo SISD: Single Instruction, Single Data
Se refiere a las computadoras convencionales de Von Neumann. Ejemplo: PC’s.
En la categoría SISD están la gran mayoría de las computadoras existentes. Son equipos con un solo procesador que trabaja sobre un solo dato a la vez. A estos equipos se les llama también computadoras secuenciales.
Este hardware está diseñado para dar soporte al procesamiento secuencial clásico, basado en el intercambio de datos entre memoria y registros del procesador, y la realización de operaciones aritméticas en ellos.

Características del modelo SISD.
- La CPU procesa únicamente una instrucción por cada ciclo de reloj.
- Únicamente un dato es procesado en cada ciclo de reloj.
- Es el modelo más antiguo de computadora y el más extendido.
- Ejemplo: la mayoría de las computadoras, servidores y estaciones de trabajo.
Modelo SIMD: (Single Instruction, Multiple Data).
Fueron los primeros multiprocesadores difundidos comercialmente.
Es una técnica empleada para conseguir paralelismo a nivel de datos.
Los repertorios SIMD consisten en instrucciones que aplican una misma operación sobre un conjunto más o menos grande de datos. Es una organización en donde una única unidad de control común despacha las instrucciones a diferentes unidades de procesamiento. Todas éstas reciben la misma instrucción, pero operan sobre diferentes conjuntos de datos. Es decir, la misma instrucción es ejecutada de manera sincronizada por todas las unidades de procesamiento.
Características del modelo SIMD.
- Todas las unidades ejecutan la misma instrucción.
- Cada unidad procesa un dato distinto.
- Todas las unidades operan simultáneamente

Modelo MISD: (Multiple Instruction, Single Data).
Las arquitecturas de tipo pipeline pertenecen a esta clasificación, también pertenecen los computadores tolerantes a fallos que utilizan ejecución redundante para detectar y enmascarar errores, no existen otras implementaciones específicas.

Características del modelo MISD.
- Cada unidad ejecuta una instrucción distinta.
- Cada unidad procesa el mismo dato.
- Aplicación muy limitada en la vida real.
Modelo MIMD: (Multiple Instruction, Multiple Data).
Las máquinas que usan MIMD tienen un número de procesadores que funcionan de manera asíncrona e independiente. En cualquier momento, cualquier procesador puede ejecutar diferentes instrucciones sobre distintos datos. La arquitectura MIMD puede utilizarse en una amplia gama de aplicaciones como el diseño asistido, simulación, modelado y en interruptores.

Características del modelo MIMD.
- Cada unidad ejecuta una instrucción distinta.
- Cada unidad procesa un dato distinto.
- Todas las unidades operan simultáneamente.
- Consistieron en el “siguiente paso” en la evolución de las arquitecturas paralelas.
Categorización del modelo MIMD.
Esta categorización se basa en el mecanismo utilizado para comunicación y sincronización.
MIMD de memoria compartida:
- Comunicación entre procesadores a través del recurso compartido.
- El bus (cuello de botella) limita la escalabilidad a un máximo de pocas decenas de procesadores.
MIMD de memoria distribuida:
- No existe el concepto de memoria global.
- Arquitectura escalable para aplicaciones apropiadas para esta topología.
CONCLUSIONES
El paralelismo (multiprocesadores) se puede aprovechar desde un programa al utilizar la Programación Concurrente.
El paralelismo hace referencia a la cantidad de procesadores, mientras que la concurrencia hace referencia a las actividades, por lo que podemos concluir que la concurrencia es un concepto lógico.
El paralelismo es una forma eficaz de explotar los sucesos concurrentes en el proceso de computación.
Un procesador segmentado es aquel que divide el proceso de ejecución de una instrucción en etapas de similar duración, con el objetivo último de procesar instrucciones simultáneamente, encontrándose cada una en una etapa diferente de su ejecución.
El principio “MultiThreading” se refiere a que el procesador puede ejecutar más de un “thread” al mismo tiempo.
La carga de instrucciones y la ejecución segmentada de instrucciones son ejemplos comunes encontrados en las computadoras SISD más modernas.
Los modelos MIMD y SIMD son más apropiados para la aplicación del paralelismo tanto a nivel de datos como de control.
A diferencia de los modelos SISD y MISD, las computadoras MIMD pueden trabajar asincrónicamente
BIBLIOGRAFÍA
- “Pipeline: paralelismo a nivel de instrucción”
http://www.academia.edu/10850712/Pipeline_Paralelismo_a_nivel_de_instrucci%C3%B3n
- “Concurrencia y paralelismo”
Haz clic para acceder a concurrencia.pdf
- “Data Parallelism (Task Parallel Library)”
https://msdn.microsoft.com/es-es/library/dd537608(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1
- “Características de paralelismo en procesadores”
http://www.academia.edu/9664619/Caracter%C3%ADsticas_de_Paralelismo_en_Procesadores
- “Microprocesadores Multinúcleo”
Haz clic para acceder a procesadores_multi_nucleo.pdf
- “Introducción al Paralelismo y Organización de un Computador”
Haz clic para acceder a OC_T00.pdf
- “Arquitecturas multihilo”
Haz clic para acceder a Arquitecturas_de_computadores_avanzadas_(Modulo_3).pdf
- “Arquitecturas paralelas”
Haz clic para acceder a Clase2-2009.pdf
Link al documento en PDF:
Paralelismo en el procesador Saul Lainez – 20101006758