Arquitecturas Avanzadas

Descargar como pptx, pdf o txt
Descargar como pptx, pdf o txt
Está en la página 1de 8

Arquitecturas avanzadas

Sistemas en paralelo : SIMD, MIMD


ARQUITECTURA SIMD:
SIMD (Single instruction multiple data) permite efectuar varias operaciones de calculo con una sola instrucción.A los procesadores basados en esta arquitectura,
se los conoce como procesadores matriciales. Esta arquitectura nace debido a la necesidad de aplicar repetidamente una misma operación en grupos datos
diferentes como, Muestras contiguas de audio, matrices de vídeo, etc.Cada procesador sigue el mismo conjunto de instrucciones; diferentes elementos de
información son asignados a cada procesador. Utilizan memoria distribuida. Típicamente tienen miles procesadores simples. Son utilizadas en redes neuronales.

Las computadoras SIMD tienen una sola unidad de control y múltiples unidades funcionales. La unidad de control se encarga de enviar la misma instrucción a
todas las unidades funcionales. Cada unidad funcional trabaja sobre datos diferentes. Estos equipos son de propósito específico, es decir, son apropiados para
ciertas aplicaciones particulares, como por ejemplo el procesamiento de imágenes.
Los procesadores SIMS se especializan en problemas numéricos que puedan expresarse como matrices o vectores. Cada unidad de procesamiento consta de
una ALU y registros, y se utiliza para computar un elemento del resultado (front-end von Neumann, más un array de procesadores idénticos que realizan la
misma instrucción).
Ejemplo de Procesador SIMD: El procesador Pentium MMX introdujo en la arquitectura IA32 un set de recursos para el tratamiento de señales.
ARQUITECTURA MIMD: Cuyas siglas significa Multiple Instruction, Multiple Data. Es un sistema con un flujo de múltiples instrucciones que operan sobre
múltiples datos. Estos sistemas empezaron a utilizarse a principios de los 80. Se las conoce como múltiples computadoras y multiprocesadores. Se puede decir
que MIMD es un súper conjunto de SIMD. 
 CARACTERISTICAS
 Son sistemas con memoria compartida que permite ejecutar varios procesos simultáneamente (sistema multiprocesador)
 La diferencia con estos sistemas es que MIMD es asíncrono.
 No tiene un reloj central.
 Cuando las unidades de proceso reciben datos de una memoria no compartida estos sistemas reciben el nombre de Múltiple SISD (MSISD).
 Los procesadores pueden ejecutar la misma o instrucción o diferentes instrucciones y tener sus propios datos
 Diferentes elementos de información se asignan a diferentes procesadores
 Pueden tener memoria distribuida o compartida.
 Cada procesador MIMD corre casi independientemente de los otros.
 Pueden ser utilizadas en aplicaciones con información en paralelo o con tareas en paralelo.
 Cada procesador tiene su propia unidad de control y su propia unidad funcional. 
Organización de procesadores en
paralelo; débil y fuertemente acoplado
 La computación paralela es una forma de cómputo en la que muchas 
instrucciones se ejecutan simultáneamente,1​operando sobre el principio de que
problemas grandes, a menudo se pueden dividir en unos más pequeños, que
luego son resueltos simultáneamente (en paralelo). Hay varias formas
diferentes de computación paralela: paralelismo a nivel de bit, paralelismo a
nivel de instrucción, paralelismo de datos y paralelismo de tareas. El
paralelismo se ha empleado durante muchos años, sobre todo en la
computación de altas prestaciones, pero el interés en ella ha crecido
últimamente debido a las limitaciones físicas que impiden el aumento de la
frecuencia.n. 12​​Como el consumo de energía —y por consiguiente la generación
de calor— de las computadoras constituye una preocupación en los últimos
años,n. 23​​la computación en paralelo se ha convertido en el paradigma
dominante en la arquitectura de computadores, principalmente en forma de 
procesadores multinúcleo
Lenguajes paralelos

Son aquellos lenguajes de programación especialmente diseñados


para la programación en paralelo, generalmente trabajan con
memoria compartida. Proveen estructuras de control, sentencias
entre otros que facilitan al programador trabajar con tareas
independientes y variables de memoria compartida; abstraen casi
totalmente (en su mayoría) al programador de los detalles de la
arquitectura del computador en donde trabaja
En estos años la mayoría de los lenguajes diseñados eran
extensiones de lenguajes secuenciales ya existentes. High
Performance Fortran ha sido uno de los pocos lenguajes que ha
prevalecido en el tiempo, del que se ha originado nuevos lenguajes
con este concepto y que se ha mantenido estable en el tiempo.
PROGRAMACION EN PARALELO

Muchos equipos y estaciones de trabajo personales tienen varios núcleos de CPU


que permiten ejecutar múltiples subprocesos simultáneamente. Para
aprovecharse del hardware, puede paralelizar el código para distribuir el trabajo
entre varios procesadores.
En el pasado, la paralelización requería manipulación de bajo nivel de los
subprocesos y bloqueos. Visual Studio y .NET mejoran la compatibilidad para la
programación paralela proporcionando un tiempo de ejecución, tipos de
biblioteca de clases y herramientas de diagnóstico. Estas características, que se
presentaron en .NET Framework 4, simplifican el desarrollo en paralelo. Puede
escribir código paralelo eficaz, específico y escalable de forma natural sin tener
que trabajar directamente con subprocesos ni el bloque de subprocesos.
La siguiente ilustración proporciona una información general de alto nivel de la
arquitectura de programación paralela en .NET.
PROGRAMACION VECTORIAL

La programación vectorial está unida al concepto de vector. Cabe destacar que dicho concepto
se refiere a un conjunto de datos del mismo tipo almacenados en memoria normalmente en
posiciones contiguas pero no tiene por qué ser así ya que imaginase una matriz de dos
dimensiones que está almacenada en memoria por filas. Si consideramos que un vector es una
fila sí que se cumple que los datos están almacenados de forma contigua en la memoria pero si
se considera como vectores las columnas o incluso las diagonales se pierde esa contigüidad en
memoria. Decimos que la programación vectorial está unida al concepto de vector e hicimos
hincapié en ese concepto debido a que la principal diferencia entre la programación vectorial y
escalar estriba en que en la vectorial, utilizada en procesadores vectoriales, puede decodificar
instrucciones cuyos operandos sean vectores por lo que pueden realizar operaciones tanto
aritméticas como lógicas sobre las componentes de dichos vectores en una única instrucción. En
este contexto surge a su vez el proceso de vectorización que se basa en la conversión de un
programa correspondiente a un procesador escalar a otro vectorial. A continuación se mostrará
una parte del conjunto de operaciones vectoriales que se pueden realizar sobre operandos
vectoriales (vectores) compuestos por un conjunto de n componentes (nos referiremos a dicho n
como tamaño) donde cada componente es un escalar (por ejemplo entero, punto flotante…)
ALGORITMOS EN PARALELO

En las ciencias de la computación, un algoritmo paralelo, en oposición a los algoritmos clásicos


o algoritmos secuenciales, es un algoritmo que puede ser ejecutado por partes en el mismo
instante de tiempo por varias unidades de procesamiento, para finalmente unir todas las partes
y obtener el resultado correcto.
Algunos algoritmos son fácilmente divisibles en partes; como por ejemplo, un algoritmo que
calcule todos los números primos entre 1 y 100, donde se podría dividir los números originales
en subconjuntos y calcular los primos para cada uno de los subconjuntos de los números
originales; al final, uniríamos todos los resultados y tendríamos la solución final del algoritmo.
Otro ejemplo, puede ser el cálculo de Pi en paralelo.
Por el contrario, a veces los problemas no son tan fácilmente paralelizables, de ahí que estos
problemas se conozcan como problemas inherentemente secuenciales. Como ejemplo de estos
métodos tendríamos los métodos numéricos iterativos como el método de Newton o el 
problema de los tres cuerpos. Por otro lado, algunos problemas son difícilmente paralelizables,
aunque tengan una estructura recursiva. Como ejemplo de esto último tendríamos la 
búsqueda primero en profundidad en un grafo.
BENCHMARKING

Una prueba de rendimiento o comparativa (en inglés benchmark) es una técnica


utilizada para medir el rendimiento de un sistema o uno de sus componentes. Más
formalmente puede entenderse que una prueba de rendimiento es el resultado de
la ejecución de un programa informático o un conjunto de programas en una
máquina, con el objetivo de estimar el rendimiento de un elemento concreto, y
poder comparar los resultados con máquinas similares. En el ámbito de las 
computadoras, una prueba de rendimiento podría ser realizada en cualquiera de
sus componentes, ya sea la CPU, RAM, tarjeta gráfica, etc. También puede estar
dirigida específicamente a una función dentro de un componente, como la unidad
de coma flotante de la CPU, o incluso a otros programas. Los benchmarks
devuelven información detallada de todas las características que posee y en base
a dicha información, se puede evaluar si esta completamente optimizado para
correr o ejecutar las aplicaciones que necesitamos dependiendo del área.

También podría gustarte