Está en la página 1de 12

UNIVERSIDAD TECNOLOGICA DE SANTIAGO

UTESA

Nombre:
Joel Antonio Rosa Morillo
Matricula:
1-17-3654
Profesor:
Eduardo Arvelo
Materia:
Algoritmos paralelos
Índice

 Taxonomia de Flynn

 Single Instruction, Single Data (SISD)

 Multiple Instruction, Single Data (MISD)

 Single Instruction, Multiple Data (SIMD)

 Multiple Instruction, Multiple Data (MIMD)

 Tipos de paralelismo: Paralelismo a nivel de bit,

Paralelismo a nivel de instrucción, Pipelining, Paralelismo

a nivel de datos, Paralelismo a nivel de tareas

 Patrones de diseño paralelo

 Fork-Join

 Map

 Stencil

 Medidas de Rendimiento Aplicada a la Computación

Paralela

 Ley de Amdahl

Lenguajes que integran el paradigma del Paralelismo


Introducción
Esta es la segunda parte del resumen sobre el tema tratado
con anterioridad, aquí hablaremos sobre otros temas o vas
bien la continuación, por lo que veremos cosas distintas
La computación paralela es la utilización de diversos
recursos computacionales para solucionar un problema. Se
distingue de la computación secuencial en que numerosas
operaciones tienen la posibilidad de pasar al mismo tiempo.
Esto implica una labor bastante compleja para un solo
procesador, después se necesita que haya cualquier tipo de
paralelismo, para repartir la labor para que esta sea
desarrollada eficiente y eficazmente.
Taxonomia de Flynn

Una instrucción, un dato (SISD) Computador secuencial que no explota el

paralelismo en las instrucciones ni en flujos de datos. Es la Arquitectura

Von-Neumann. Un único procesador ejecuta un solo flujo de

instrucciones para operar datos en una única memoria. Se ejecuta una

única instrucción y un dato en cada ciclo de reloj. Puede utilizar técnicas

de segmentación o de pipelining. Ejemplos de arquitecturas SISD son las

máquinas con uni-procesador o monoprocesador tradicionales como

el PC o los antiguos mainframe.

Una instrucción, un dato (SISD)


Computador secuencial que no explota el paralelismo en las instrucciones
ni en flujos de datos. Es la Arquitectura Von-Neumann. Un único
procesador ejecuta un solo flujo de instrucciones para operar datos en una
única memoria. Se ejecuta una única instrucción y un dato en cada ciclo
de reloj. Puede utilizar técnicas de segmentación o de pipelining.
Ejemplos de arquitecturas SISD son las máquinas con uni-procesador
o monoprocesador tradicionales como el PC o los antiguos mainframe.

Una instrucción, múltiples datos (SIMD)


Todas las unidades ejecutan la misma instrucción sincronizadamente,
pero con datos distintos. Es un computador que explota varios flujos de
datos dentro de un único flujo de instrucciones para realizar operaciones
que pueden ser paralelizadas de manera natural. Puede ser de
Arquitectura vectorial o Arquitectura matricial.

Múltiples instrucciones, un dato (MISD)


Poco común debido al hecho de que la efectividad de los múltiples flujos
de instrucciones suele precisar de múltiples flujos de datos. Sin embargo,
este tipo se usa en situaciones de paralelismo redundante, como por
ejemplo en navegación aérea, donde se necesitan varios sistemas de
respaldo en caso de que uno falle. También se han propuesto algunas
arquitecturas teóricas que hacen uso de MISD, pero ninguna llegó a
producirse en masa. Algunos autores consideran que las arquitecturas
vectoriales supersegmentadas o vectorial escalar forman parte de este
modelo ya que en un momento dado se pueden estar manipulando un
dato (el vector) por varias instrucciones, no obstante no existe consenso al
respecto.

Múltiples instrucciones, múltiples datos (MIMD)


Varios procesadores autónomos que ejecutan simultáneamente
instrucciones diferentes sobre datos diferentes. Los sistemas
distribuidos suelen clasificarse como arquitecturas MIMD; bien sea
explotando un único espacio compartido de memoria, o uno distribuido.

Paralelismo a nivel de bit


cuando se aumenta la el tamaño de la palabra en la computadora, hacer
esto reduce elnumero de instrucciones que son necesarias para ejecutar
unsintruccción en la cual susoperandos son mas grandes que su tamaño
de palabra. Este aumento reduce el número de instrucciones que tiene
que ejecutar el procesador en variables cuyos tamaños sean mayores a la
longitud de la cadena.
Ejemplo: En un procesador de 8-bits sumar dos números de 16bits
tomaría dos instrucciones. En un procesador de 16-bits esa operación
requiere solo una instrucción.
Paralelismo a nivel de instrucción
El paralelismo a nivel de instrucción consiste en un 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

Pipelining

El pipelining proviene de la idea de que en una tubería no es necesario

esperar a que todo el agua dentro salga, para que pueda entrar más. Los

procesadores modernos tienen un 'pipeline' que separa las instrucciones


en varias etapas, donde cada etapa corresponde a una acción diferente

que necesita la salida de la anterior.

Ejemplo: Un pipeline de 5 etapas: fetch (buscar la instrucción), decode


(decodificarla), execute (ejecutarla), write (escribir en memoria el
resultado de la operación).

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.
Idealmente, esta ejecución simultánea de operaciones, resulta en una
aceleración neta global del cómputo.
El paralelismo 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 a nivel de tareas


es un paradigma de la programación concurrente que consiste en asignar
distintas tareas a cada uno de los procesadores de un sistema de
cómputo. En consecuencia, cada procesador efectuará su propia secuencia
de operaciones.
En su modo más general, el paralelismo de tareas se representa mediante
un grafo de tareas, el cual es subdividido en subgrafos que son luego
asignados a diferentes procesadores. De la forma como se corte el grafo,
depende la eficiencia de paralelismo resultante. La partición y asignación
óptima de un grafo de tareas para ejecución concurrente es un
problema NP-completo, por lo cual en la práctica se dispone de métodos
heurísticos aproximados para lograr una asignación cercana a la óptima.

Patrones de diseño paralelo

Los patrones se han establecido como buenas practicas a la hora de

realizar ingeniería de software.


Los patrones de control en el caso de la programación paralela son

maneras de combinar la distribución de los procesos y el acceso a los

datos para la solucion de un problema.

Fork-Join

En este patrón de diseño se generan dos ejecuciones concurrentes, que

empieza inmediatamente después de que el fork es llamado en código,

después, se usa join para combinar estas dos ejecuciones concurrentes en

una. Cada join puede unirse entonces a su fork correspondiente y lo hace

antes de las otras terminen.

Map

Map es un patrón que replica una función sobre todos los elementos de un

conjunto de entrada. La función que está siendo replicada se llama

función elemental, dada que la misma se aplica a una coleccion real de

datos.

Stencil

Stencil es un generalización del patron de Map, en el cual una función

elemental tiene acceso no solo a un elemento del conjunto de entrada sino

también a un conjunto de "vecinos"

Medidas de Rendimiento Aplicada a la Computación Paralela


Ley de Amdahl

El incremento de velocidad de un programa utilizando múltiples

procesadores en computación paralela está limitada por la fracción

secuencial del programa. Sea f el porcentaje paralelizado del programa

expresado en decimal, la ley de Amdahl dice que llega un punto en el cual

sin importar que el numero de procesadores sea muy alto , el speedup se

va a comportar de manera lineal ; esto de acuerdo al porcentaje que este

paralelizado el codigo.
Lenguajes que integran el paradigma del Paralelismo

Actualmente, existe una variedad de lenguajes de programación con un

enfoque multiparadigma, los cuales permiten tener flexibilidad a la hora

de querer lograr un objetivo en cuanto a un determinado tipo de

programación. Igualmente, los lenguajes suelen complementar dicho

comportamiento con librerías, APIs o frameworks (ya sean comunitarios

o privativos), los cuales le permiten al programador el disponer de

herramientas de trabajo.
Conclusión
Espero que este resumen de continuación le pueda servir de
útil, recordando que hay temas de interés e importancia
para los conocedores de los algoritmos.
Es una forma de cómputo en la que muchas normas se
ejecutan simultáneamente, operando sobre el principio de
que problemas gigantes, habitualmente pueden dividir en
unos más pequeños, que luego son resueltos
simultáneamente (en paralelo) Por qué se hace
programación paralela: Esta clase de programación paralela
una y otra vez ha sido bastante compleja, sobre todo en el
instante de depurar aplicaciones en las que hay muchas
probabilidades de generar interbloqueos o “race conditions”
sucediendo al mismo tiempo, no obstante, en una sucesión
temporal.
Bibliografía
https://es.slideshare.net/babygoodbyeHDZ/paralelismo-de-nivel-de-bit

https://es.wikipedia.org/wiki/Paralelismo_de_tareas#:~:text=Paralelismo%20de%20tareas%20
es%20un,su%20propia%20secuencia%20de%20operaciones.

https://es.wikipedia.org/wiki/Paralelismo_de_datos

También podría gustarte