Está en la página 1de 45

Contenido

INTRODUCCION ................................................................................................................................... 3
1. Antecedentes .............................................................................................................................. 4
1.1. Evolución de los sistemas .................................................................................................... 4
Punto de vista de los Sistemas Operativos ................................................................................. 4
Punto de vista de la arquitectura ................................................................................................ 5
2. Vision general .............................................................................................................................. 6
2.1. ¿Qué es? .............................................................................................................................. 6
2.2. ¿Por qué usar la computación paralela? ........................................................................... 12
3. Conceptos básicos ..................................................................................................................... 15
3.1. Ley de Amdhal y ley de Gustafson .................................................................................... 15
3.2. Dependencias .................................................................................................................... 16
3.3. Condiciones de carrera, exclusión mutua, sincronización y desaceleración paralela ...... 17
3.4. Paralelismo de grano fino, grano grueso y paralelismo vergonzoso ................................ 19
3.5. Límites y costos de la programación paralela ................................................................... 19
Complejidad .............................................................................................................................. 19
Portabilidad ............................................................................................................................... 20
Requerimientos de recursos ..................................................................................................... 20
Escalabilidad .............................................................................................................................. 20
3.6. Tipos de paralelismo ......................................................................................................... 21
Paralelismo a nivel de BIT ......................................................................................................... 21
Paralelismo a nivel de Instrucción ....................................................................................... 22
Paralelismo de datos ................................................................................................................. 23
Paralelismo de tareas ................................................................................................................ 24
3.7. Arquitectura de la computadora de von Neumann .......................................................... 24
3.8. La taxonomia de Flynn ...................................................................................................... 25
3.8.1. SISD( Single Instruction, Single Data ) ....................................................................... 26
3.8.2. SIMD (Single Instruction, Multiple Data)................................................................... 27
3.8.3. MISD (Multiple Instruction, Single Data)................................................................... 29
3.8.4. MISD (Multiple Instruction, Multiple Data)............................................................... 29
3.9. Arquitecturas paralelas de memoria de computadora ..................................................... 34
3.9.1. Memoria compartida ................................................................................................ 34
3.9.2. Memoria distribuida .................................................................................................. 36
3.9.3. Memoria hibrida distribuida-compartida.................................................................. 37
4. Aplicaciones............................................................................................................................... 39
5. Terminologia ................................................................................ ¡Error! Marcador no definido.
6. Referencias ................................................................................................................................ 45
INTRODUCCION

Cada vez se está exigiendo mayor potencia de cálculo en las computadoras a nivel
científico, industrial, comercial. Cabe esperar que esta demanda se irá
incrementando en el futuro sobre todo en aplicaciones de simulación y tiempo real,
por tanto, existe una tendencia actual para alcanzar grandes capacidades de
elaboración de datos. Pero la velocidad en la computación tiene limitaciones
tecnológicas y lógicas.
La eficiencia de un computador depende directamente del tiempo requerido para
ejecutar una instrucción y del número de instrucciones que pueden ser ejecutadas
concurrentemente. Esta eficiencia puede ser incrementada por avances en la
arquitectura y por avances tecnológicos. Una vez incorporados estos avances,
mejorar la eficiencia de un procesador implica reducir el tiempo de los ciclos:
avances tecnológicos.
Las soluciones planteadas para esta demanda se pueden concretar en 2 líneas
importantes que son el Software y Hardware.
La solución de software consiste en la mejora de los algoritmos, para que estos se
ejecuten requiriendo el menor tiempo posible. Aunque los algoritmos poseen una
complejidad y necesidad de recursos que los limitan.
Las soluciones de Hardware consisten en mejoras en las tecnologías de las
computadoras para una mayor rapidez en la ejecución de instrucciones.
La solución que une el uso del Software y Hardware es el paralelismo, que por el
lado del hardware abarca la réplica de unidades de tratamiento de información con
el objetivo de repartir tareas entre las mismas y por el lado del software la
adaptación de los algoritmos a estas arquitecturas paralelas.
Todo esto impulsa al desarrollo de computadoras cada vez más potentes en las
que se disponen procesadores en paralelo, actuando simultáneamente. Las
ventajas de estos sistemas son notables por cuanto hacen uso de procesadores
estándar para alcanzar enormes velocidades de cálculo, del orden de Tera
instrucciones por segundo (1012 instrucciones) por segundo.
La necesidad de resolver problemas de manera eficiente y en el menor tiempo
posible ha hecho que se tengan que realizar mejoras en el poder computacional de
los computadores.
1. Antecedentes
En el año 1936 Alan Turing demostró que, al menos teóricamente, era posible
diseñar una maquina secuencial de propósito general capaz de llevar a cabo
eficientemente cualquier calculo que pudiese realizar una maquina secuencial de
propósito específico, diseñada por tanto para resolver de forma muy eficiente un
determinado tipo de cálculo.
Años más tarde Von Neumann realiza su propuesta de computador secuencial de
propósito general que refleja el trabajo de Turing en un modelo practico, conocido
como el nombre de “Computador de von Neumann”. En este modelo se han
basado la mayoría de computadores secuenciales construidos desde finales de los
años cuarenta hasta la actualidad.
EL modelo de von Neumann ha permitido y estimulado el desarrollo de lenguajes
de alto nivel, aplicaciones portables, ejecutables en cualquier computadora
secuencial con un buen rendimiento.
La búsqueda de un mayor rendimiento en las aplicaciones, que no eran
satisfechas por computadoras secuenciales, ha impulsado el desarrollo y
construcción de computadores paralelos, más aun en los años 80 estos
computadores paralelas tenían un rendimiento aceptable explotando los detalles
de la arquitectura de la maquina ya que muchas de las aplicaciones paralelas
producidas en ese entonces no podían adaptarse a todas las máquinas de la
época.
La diversidad de arquitecturas paralelas impidió el crecimiento de la computación
en paralelo, lo cual ha mejorado sustancialmente desde ese entonces. Desde los
noventa las diferentes clases de computadores paralelos están convergiendo a
una estructura cada vez más parecida y se ha ido evolucionando a un modelo
arquitectónico estándar, en un conjunto de pares procesador-memoria
interconectadas mediante una red de comunicación que permite el empleo de un
espacio de direcciones global.

1.1. Evolución de los sistemas


Punto de vista de los Sistemas Operativos
 Procesamiento por lotes: En el cual cada programa es cargado y ejecutado,
en forma separada.

 Multiprogramación: En el cual se carga una serie de programas en memoria,


y se ejecutan de acuerdo a las necesidades de cada uno.

 Tiempo compartido: En este caso, todos los programas están cargados en la


memoria, y se asigna un tiempo de ejecución para cada uno, en forma tal
que parecen ejecutarse todos simultáneamente.
 Multiprocesamiento: En este caso se disponen varias unidades de
procesamiento, en forma tal que operan simultáneamente sobre varios
programas.

Punto de vista de la arquitectura


 Procesamiento de datos: es el tipo de procesamiento que mayormente se
emplea aun actualmente, pues consiste en operar sobre datos alfanuméricos
no relacionados

 Procesamiento de información: La información consiste en un cúmulo de


datos, que están de alguna manera ligados mediante una estructura sintáctica
o una relación espacial cualquiera.

 Procesamiento de conocimientos: El conocimiento, es una forma de


información más algún significado semántico, o sea que forman un sub-
espacio de la información.

 Procesamiento de inteligencia: La inteligencia, es derivada de una colección


de ítems de conocimiento.
2. Visión general
2.1. ¿Qué es?
Computación en serie:
Tradicionalmente, el software ha sido escrito para computación en serie, y su
forma de trabajo era:
 Un problema se divide en una serie discreta de instrucciones
 Las instrucciones se ejecutan secuencialmente una tras otra.
 Ejecutado en un solo procesador
 Solo se puede ejecutar una instrucción en cualquier momento.

Computación Paralela
La computación paralela es una técnica en la que muchas instrucciones se
ejecutan simultáneamente, operando sobre el principio de que problemas grandes,
se pueden dividir en unos más pequeños, que luego son resueltos
simultáneamente (paralelo), tiene las siguientes características:
 Un problema se divide en partes discretas que pueden resolverse
simultáneamente
 Cada parte se divide en una serie de instrucciones.
 Las instrucciones de cada parte se ejecutan simultáneamente en diferentes
procesadores.
 Se emplea un mecanismo general de control / coordinación.
El paralelismo es posible en sistemas multinúcleo, multiprocesador o distribuidos.

 El problema computacional debería ser capaz de:


- Se puede dividir en piezas de trabajo discretas que se pueden
resolver simultáneamente;
- Ejecute múltiples instrucciones de programa en cualquier momento;
- Resuélvase en menos tiempo con múltiples recursos informáticos
que con un solo recurso informático.
 Los recursos de cómputo son típicamente:
- Una sola computadora con múltiples procesadores / núcleos
- Un número arbitrario de tales computadoras conectadas por una red
Ordenadores Paralelos
Prácticamente todas las computadoras independientes de hoy son paralelas
desde una perspectiva de hardware:
 Múltiples unidades funcionales (caché L1, caché L2, rama, captación
previa, decodificación, punto flotante, procesamiento de gráficos (GPU),
entero, etc.)
 Múltiples unidades / núcleos de ejecución.
 Multiples hilos de hardware.

Las redes conectan varias computadoras independientes (nodos) para hacer


grupos de computadoras paralelas más grandes.
Por ejemplo, el esquema a continuación muestra un clúster típico de
computadoras paralelas LLNL:
 Cada nodo de cálculo es una computadora paralela multiprocesador en sí
misma
 Múltiples nodos de cómputo están conectados en red junto con una red
Infiniband
 Los nodos de propósito especial, también multiprocesador, se usan para
otros propósitos

La mayoría de las grandes computadoras paralelas (supercomputadoras) del


mundo son grupos de hardware producidos por un puñado de (en su mayoría)
vendedores bien conocidos.
1

1
https://www.top500.org/statistics/list/
2.2. ¿Por qué usar la computación paralela?
El mundo real es masivamente paralelo
 En el mundo natural, muchos eventos complejos e interrelacionados están ocurriendo al
mismo tiempo, pero dentro de una secuencia temporal.
 En comparación con la computación en serie, la computación en paralelo es mucho más
adecuada para modelar, simular y comprender fenómenos complejos del mundo real.
Imaginemos modelar estos en serie:

Principales razones:
Ahorra tiempo y/o dinero:
 En teoría, dedicar más recursos a una tarea acortará su tiempo hasta su
finalización, con posibles ahorros de costos.
 Las computadoras paralelas se pueden construir a partir de componentes
baratos y básicos.
RESOLVER MÁS GRANDE / MÁS COMPLEJOS PROBLEMAS:

 Muchos problemas son tan grandes y / o complejos que no es práctico o imposible


resolverlos en una sola computadora, especialmente dada la limitada memoria de la
computadora.
 Ejemplo: "Problemas de gran desafío que requieren PetaFLOPS y PetaBytes de recursos
informáticos.

PROPORCIONAR CONCURRENCIA:

 Un solo recurso de cómputo solo puede hacer una cosa a la vez. Múltiples
recursos de cómputo pueden hacer muchas cosas simultáneamente.
 Ejemplo: las redes de colaboración proporcionan un lugar global donde
personas de todo el mundo pueden reunirse y realizar el trabajo
"virtualmente".

APROVECHE LOS RECURSOS NO LOCALES:

 Usar recursos informáticos en una red de área amplia, o incluso Internet


cuando los recursos informáticos locales son escasos o insuficientes. Dos
ejemplos a continuación, cada uno de los cuales tiene más de 1.7 millones
de contribuyentes a nivel mundial (mayo de 2018):
 Ejemplo: SETI @ home ( setiathome.berkeley.edu )
 Ejemplo: Folding @ home ( fold.stanford.edu )

HAGA UN MEJOR USO DE LOS HARDWARE PARALELOS SUBYACENTES:

 Las computadoras modernas, incluso las computadoras portátiles, tienen


una arquitectura paralela con múltiples procesadores / núcleos.
 El software paralelo está específicamente diseñado para hardware paralelo
con múltiples núcleos, hilos, etc.
 En la mayoría de los casos, los programas en serie que se ejecutan en
computadoras modernas "desperdician" la potencia informática potencial.
3. Conceptos básicos

3.1. Ley de Amdhal y ley de Gustafson


Ley de Amdhal:

Idealmente, la aceleración a partir de la paralelización es lineal, doblar el


número de elementos de procesamiento debe reducir a la mitad el tiempo de
ejecución y doblarlo por segunda vez, debe nuevamente reducir el tiempo a la
mitad. Sin embargo, muy pocos algoritmos paralelos logran una aceleración
óptima. La mayoría tiene una aceleración casi lineal para un pequeño número de
elementos de procesamiento, y pasa a ser constante para un gran número de
elementos de procesamiento.
La aceleración potencial de un algoritmo en una plataforma de cómputo en
paralelo está dada por la ley de Amdahl, formulada originalmente por Gene
Amdahl en la década de 1960. Esta señala que:
“Una pequeña porción del programa que no pueda paralelizarse va a
limitar la aceleración que se logra con la paralelización.”
Los programas que resuelven problemas matemáticos o ingenieriles típicamente
consisten en varias partes paralelizables y varias no paralelizables (secuenciales).
Si 𝛼 es la fracción de tiempo que un programa gasta en partes no paralelizables,
luego:
1 1
𝑆= = lim ( )
𝛼 𝑃→∞ 1
𝑃 + 𝛼

Es la máxima aceleración que se puede alcanzar con la paralelización del


programa. Si la parte secuencial del programa abarca el 10% del tiempo de
ejecución, se puede obtener no más de 10× de aceleración, independientemente
de cuántos procesadores se añadan. Esto pone un límite superior a la utilidad de
añadir más unidades de ejecución paralelas. Cuando una tarea no puede dividirse
debido a las limitaciones secuenciales, la aplicación de un mayor esfuerzo no tiene
efecto sobre la programación.
Ley de Gustafson:

Ley relacionada a la de Amdahl, señala que el aumento de la velocidad con P procesadores es de:

𝑆(𝑃) = 𝑃 − 𝛼(𝑃 − 1) = 𝛼 + 𝑃(1 − 𝛼)

Ambas leyes asumen que el tiempo de funcionamiento de la parte secuencial del programa es
independiente del número de procesadores. La ley de Amdahl supone que todo el problema es de
tamaño fijo, por lo que la cantidad total de trabajo que se hará en paralelo también es
independiente del número de procesadores, mientras que la ley de Gustafson supone que la
cantidad total de trabajo que se hará en paralelo varía linealmente con el número de
procesadores.

Ejemplo:

Supongamos que una tarea tiene dos partes independientes, A y B. B tarda aproximadamente 25%
del tiempo total. Con esfuerzo adicional, un programador puede hacer esta parte cinco veces más
rápida, pero esto reduce el tiempo de cálculo global por muy poco. Por otro lado, puede que sea
necesario poco trabajo para hacer que la parte A sea doble de rápida. Esto haría el cálculo mucho
más rápido que mediante la optimización de la parte B, a pesar de que B tiene una mayor
aceleración (5x frente a 2×).

3.2. Dependencias
Entender la dependencia de datos es fundamental en la implementación de algoritmos
paralelos. Ningún programa puede ejecutar más rápidamente que la cadena más larga de
cálculos dependientes (conocida como la ruta crítica), ya que los cálculos que dependen
de cálculos previos en la cadena deben ejecutarse en orden. Sin embargo, la mayoría de
los algoritmos no consisten sólo de una larga cadena de cálculos dependientes;
generalmente hay oportunidades para ejecutar cálculos independientes en paralelo.
Ejemplo:
Con dependencia:

1: función OperacionDep(a, b)
2: c: = a · b
3: d: = 3 · c
4: fin función

La operación 3 en OperacionDep(a, b) no puede ejecutarse antes de, o incluso en


paralelo con la operación 2, ya que en la operación 3 se utiliza un resultado de la
operación 2. Esto violaría la condición 1, y por tanto introduce una dependencia de flujo.

Sin dependencia:
1: función OperacionNoDep (a, b)
2: c: = a · b
3: d: b = 3 ·
4: e: = a + b
5: fin función

En este ejemplo, no existen dependencias entre las instrucciones, por lo que todos ellos
se pueden ejecutar en paralelo.

Las condiciones de Bernstein no permiten que la memoria se comparta entre los


diferentes procesos. Por esto son necesarios algunos medios que impongan un
ordenamiento entre los accesos tales como semáforos, barreras o algún otro
método de sincronización.

3.3. Condiciones de carrera, exclusión mutua, sincronización y


desaceleración paralela

Las subtareas en un programa paralelo a menudo son llamadas hilos. Algunas


arquitecturas de computación paralela utilizan versiones más pequeñas y ligeras
de hilos conocidas como hebras, mientras que otros utilizan versiones más
grandes conocidos como procesos. Sin embargo, «hilos» es generalmente
aceptado como un término genérico para las subtareas. Los hilos a menudo
tendrán que actualizar algunas variables que se comparten entre ellos. Las
instrucciones entre los dos programas pueden entrelazarse en cualquier orden.
Por ejemplo, considere el siguiente programa:

Hilo A Hilo B

1A: Lee variable V 1B: Lee variable V

2A: Añadir 1 a la variable V 2B: Añadir 1 a la variable V

3A: Escribir en la variable V 3B: Escribir en la variable V

Si la instrucción 1B se ejecuta entre 1A y 3A, o si la instrucción 1A se ejecuta entre


1B y 3B, el programa va a producir datos incorrectos. Esto se conoce como
una condición de carrera. El programador debe utilizar un bloqueo (lock) para
proporcionar exclusión mutua. Un bloqueo es una construcción del lenguaje de
programación que permite a un hilo de tomar el control de una variable y evitar
que otros hilos la lean o escriban, hasta que la variable esté desbloqueado. El hilo
que mantiene el bloqueo es libre de ejecutar su sección crítica —la sección de un
programa que requiere acceso exclusivo a alguna variable—, y desbloquear los
datos cuando termine. Por lo tanto, para garantizar la correcta ejecución del
programa, el programa anterior se puede reescribir usando bloqueos de la
siguiente manera:

Hilo A Hilo B

1A: Bloquear variable V 1B: Bloquear variable V

2A: Lee variable V 2B: Lee variable V

3A: Añadir 1 a la variable V 3B: Añadir 1 a la variable V

4A: Escribir en la variable V 4B: Escribir en la variable V

5A: Desbloquear variable V 5B: Desbloquear variable V

Un hilo bloqueará con éxito la variable V, mientras que el otro hilo no podrá
continuar hasta que V se desbloquee. Esto garantiza la correcta ejecución del
programa. Si bien los bloqueos son necesarios para asegurar la ejecución correcta
del programa, pueden ralentizar en gran medida un programa.
Bloquear múltiples variables utilizando cerraduras no atómicas introduce la
posibilidad de que el programa alcance un bloqueo mutuo (deadlock). Un bloqueo
atómico bloquea múltiples variables a la vez, si no puede bloquearlas todas, no se
bloquea ninguna de ellas. Si hay dos hilos y cada uno necesita bloquear las
mismas dos variables utilizando cerraduras no atómicas, es posible que un hilo
bloquee uno de ellas y el otro bloquee la segunda variable. En tal caso se produce
un bloqueo mutuo donde ningún hilo puede completar la ejecución.
Muchos programas paralelos requieren que sus subtareas actúen en sincronía.
Esto requiere el uso de una barrera. Las barreras se implementan normalmente
mediante un bloqueo. Una clase de algoritmos, conocida como algoritmos libres
de bloqueo y libres de espera, evitan el uso de bloqueos y barreras. Sin embargo,
este enfoque es generalmente difícil de implementar y requiere estructuras de
datos correctamente diseñadas.
No todas las paralelizaciones conllevan una aceleración. Por lo general, mientras
una tarea se divida en cada vez más hilos, estos hilos pasan una porción cada vez
mayor de su tiempo comunicándose entre sí. Eventualmente, la sobrecarga de
comunicación domina el tiempo empleado para resolver el problema, y la
paralelización adicional —dividir la carga de trabajo entre incluso más hilos—
aumenta la cantidad de tiempo requerido para terminar. Esto se conoce
como desaceleración paralela.

3.4. Paralelismo de grano fino, grano grueso y paralelismo


vergonzoso
Las aplicaciones a menudo se clasifican según la frecuencia con que sus
subtareas se sincronizan o comunican entre sí.
Grano fino: Una aplicación muestra un paralelismo de grano fino si sus subtareas
deben comunicase muchas veces por segundo
Grano grueso: Una aplicación muestra un paralelismo de grano grueso si sus
subtareas no se comunican muchas veces por segundo.
Paralelismo Vergonzoso: Una aplicación muestra un paralelismo vergonzoso si
nunca o casi nunca se tiene que comunicar.
Aplicaciones vergonzosamente paralelas son consideradas las más fáciles de
paralelizar.

3.5. Límites y costos de la programación paralela


Complejidad
 En general, las aplicaciones paralelas son mucho más complejas que las aplicaciones en
serie correspondientes, quizás un orden de magnitud. No solo tiene múltiples secuencias
de instrucciones ejecutándose al mismo tiempo, sino que también tiene datos que fluyen
entre ellas.

 Los costos de complejidad se miden en el tiempo del programador en prácticamente todos


los aspectos del ciclo de desarrollo del software:

o Diseño

o Codificación

o Depuración

o Mantenimiento

 Adherirse a "buenas" prácticas de desarrollo de software es esencial cuando se trabaja


con aplicaciones paralelas, especialmente si alguien además de usted tendrá que trabajar
con el software.
Portabilidad
 Gracias a la estandarización en varias API, como MPI, subprocesos POSIX y OpenMP, los
problemas de portabilidad con programas paralelos no son tan serios como en años
anteriores.

 Todos los problemas de portabilidad habituales asociados con los programas serie se
aplican a los programas paralelos. Por ejemplo, si utiliza las "mejoras" de los proveedores
en Fortran, C o C ++, la portabilidad será un problema.

 A pesar de que existen estándares para varias API, las implementaciones diferirán en una
serie de detalles, a veces hasta el punto de requerir modificaciones de código para
efectuar la portabilidad.

 Los sistemas operativos pueden jugar un papel clave en los problemas de portabilidad de
código.

 Las arquitecturas de hardware son característicamente muy variables y pueden afectar la


portabilidad.

Requerimientos de recursos
 El objetivo principal de la programación en paralelo es disminuir el tiempo de reloj de la
pared de ejecución, sin embargo, para lograr esto, se requiere más tiempo de CPU.

Por ejemplo, un código paralelo que se ejecuta en 1 hora en 8 procesadores en realidad


usa 8 horas de tiempo de CPU.

 La cantidad de memoria requerida puede ser mayor para los códigos paralelos que para
los códigos seriales, debido a la necesidad de replicar los datos y para los gastos generales
asociados con las bibliotecas y subsistemas de soporte paralelos.

 Para los programas paralelos de ejecución corta, en realidad puede haber una disminución
en el rendimiento en comparación con una implementación en serie similar. Los costos
generales asociados con la configuración del entorno paralelo, la creación de tareas, las
comunicaciones y la terminación de tareas pueden representar una parte significativa del
tiempo total de ejecución para ejecuciones cortas.

Escalabilidad
Dos tipos de escalamiento basados en el tiempo para la solución: escala fuerte y escala débil.

 Escala fuerte

o El tamaño total del problema permanece fijo a medida que se agregan más
procesadores.

o El objetivo es ejecutar el mismo problema más rápido


o La escala perfecta significa que el problema se resuelve en tiempo 1 / P (en
comparación con la serie)

 Escalamiento débil

o El tamaño del problema por procesador se mantiene fijo a medida que se agregan
más procesadores. El tamaño total del problema es proporcional al número de
procesadores utilizados.

o El objetivo es ejecutar un problema mayor en la misma cantidad de tiempo

 La capacidad del rendimiento de un programa paralelo para escalar es el resultado de una


serie de factores interrelacionados. Simplemente agregar más procesadores no es la
respuesta.

 El algoritmo puede tener límites inherentes a la escalabilidad. En algún momento, agregar


más recursos hace que el rendimiento disminuya. Esta es una situación común con
muchas aplicaciones paralelas.

 Los factores de hardware juegan un papel importante en la escalabilidad. Ejemplos:

o Ancho de banda del bus de memoria-CPU.

o Ancho de banda de la red de comunicaciones.

o Cantidad de memoria disponible en cualquier máquina o conjunto de máquinas


determinado.

o Velocidad del reloj del procesador.

 Las bibliotecas de soporte paralelo y el software de subsistemas pueden limitar la


escalabilidad independientemente de su aplicación.

3.6. Tipos de paralelismo


Paralelismo a nivel de BIT
Desde el advenimiento de la integración a gran escala (VLSI) como tecnología de fabricación de
chips de computadora en la década de 1970 hasta alrededor de 1986, la aceleración en la
arquitectura de computadores se lograba en gran medida duplicando el tamaño de la palabra en la
computadora, la cantidad de información que el procesador puede manejar por ciclo.

El aumento del tamaño de la palabra reduce el número de instrucciones que el procesador debe
ejecutar para realizar una operación en variables cuyos tamaños son mayores que la longitud de la
palabra.

Por ejemplo:

Cuando un procesador de 8 bits debe sumar dos enteros de 16 bits, el procesador primero
debe adicionar los 8 bits de orden inferior de cada número entero con la instrucción de
adición, a continuación, añadir los 8 bits de orden superior utilizando la instrucción de
adición con acarreo que tiene en cuenta el bit de acarreo de la adición de orden inferior,
en este caso un procesador de 8 bits requiere dos instrucciones para completar una sola
operación, en donde un procesador de 16 bits necesita una sola instrucción para poder
completarla.

Paralelismo a nivel de Instrucción


Un programa de ordenador es, en esencia, una secuencia de instrucciones ejecutadas por un
procesador. Estas instrucciones pueden reordenarse y combinarse en grupos que luego son
ejecutadas en paralelo sin cambiar el resultado del programa. Esto se conoce como paralelismo a
nivel de instrucción.

Los avances en el paralelismo a nivel de instrucción dominaron la arquitectura de computadores


desde mediados de 1980 hasta mediados de la década de 1990.

Los procesadores modernos tienen “pipeline” de instrucciones de varias etapas. Cada etapa en
el pipeline corresponde a una acción diferente que el procesador realiza en la instrucción
correspondiente a la etapa; un procesador con un pipeline de N etapas puede tener hasta n
instrucciones diferentes en diferentes etapas de finalización.

El ejemplo canónico de un procesador segmentado es un procesador RISC, con cinco etapas: pedir
instrucción, decodificar, ejecutar, acceso a la memoria y escritura. El procesador Pentium 4tenía
un pipeline de 35 etapas.

Además del paralelismo a nivel de instrucción del pipelining, algunos procesadores pueden
ejecutar más de una instrucción a la vez. Estos son conocidos como procesadores superes calares.
Las instrucciones pueden agruparse juntas sólo si no hay dependencia de datos entre ellas.

Pipeline
• Técnica de implementación
• Persigue aumentar las prestaciones.
• Divide la ejecución de una instrucción en etapas.
• Cada etapa utiliza diferentes recursos.
• Permite solapar la ejecución de distintas instrucciones en diferentes etapas.
• Permite comenzar una instrucción en cada ciclo de reloj.
Conceptos Importantes:

• Productividad (Throughtput): Nº de instrucciones por segundo


• Ciclo de procesador: Tiempo de una etapa; determinado por la etapa más lenta.
• Latencia: Tiempo total de ejecución de una instrucción.
• Objetivo del diseñador: Equilibrar el tiempo de cada etapa.
• La segmentación consigue una reducción del CPI (Ciclo por instrucción) o del Tciclo
• Si partimos de un procesador con muchos ciclos por instrucción => reduce el CPI.
• Si partimos de un procesador de ciclo largo => reduce Tciclo.
• Híbrido.
• La segmentación explota el paralelismo inherente en un conjunto de
instrucciones.
• Es transparente al usuario.
Ejemplo: Consideremos la siguiente descomposición del procesamiento de una instrucción.

 Captar instrucción (Fetch lnstruction, FI): Leer la supuesta siguiente instrucción en un


buffer.
 Decodificar instrucción (Decode Instruction, DI): Determinar el código de operación y los
campos de operando.
 Calcular operandos (Calculate Operands, CO): Calcular la dirección efectiva de cada
operando fuente. Esto puede involucrar direccionamiento mediante un desplazamiento,
indirecto a través de registro, indirecto, u otras formas de calcular la dirección.
 Captar operandos (Fetch Operands, FO): Captar cada operando de memoria. Los
operandos en registros no tienen que ser captados.
 Ejecutar instrucción (Execute Instruction, EI): Realizar la operación indicada y almacenar el
resultado, si lo hay, en la posición de operando destino especificada.
 Escribir operando (Write Operand, WO): Almacenar el resultado en memoria.

Paralelismo de datos
El paralelismo de datos es el paralelismo inherente en programas con ciclos, que se centra en la
distribución de los datos entre los diferentes nodos computacionales que deben tratarse en
paralelo.

La paralelización de ciclos conduce a menudo a secuencias similares de operaciones (no


necesariamente idénticas) o funciones que se realizan en los elementos de una gran estructura de
datos. Muchas de las aplicaciones científicas y de ingeniería muestran paralelismo de datos.

Una dependencia de terminación de ciclo es la dependencia de una iteración de un ciclo en la


salida de una o más iteraciones anteriores. Las dependencias de terminación de ciclo evitan la
paralelización de ciclos.
A medida que el tamaño de un problema se hace más grande, la paralelización de datos disponible
generalmente también lo hace.

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 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.

Durante muchos años, la computación paralela se ha aplicado en la computación de altas


prestaciones, pero el interés en ella ha aumentado en los últimos años debido a las restricciones
físicas que impiden el escalado en frecuencia.

La computación paralela se ha convertido en el paradigma dominante en la arquitectura de


computadores, principalmente en los procesadores multinúcleo.

Sin embargo, recientemente, el consumo de energía de los ordenadores paralelos se ha


convertido en una preocupación.

Los ordenadores paralelos se pueden clasificar según el nivel de paralelismo que admite su
hardware: los ordenadores multinúcleo y multiproceso tienen varios elementos de procesamiento
en una sola máquina, mientras que los clusters, los MPP y los grids emplean varios ordenadores
para trabajar en la misma tarea.

Los programas de ordenador paralelos son más difíciles de escribir que los secuenciales porque la
concurrencia introduce nuevos tipos de errores de software, siendo las condiciones de carrera los
más comunes.

La comunicación y la sincronización entre las diferentes subtareas son típicamente las grandes
barreras para conseguir un buen rendimiento de los programas paralelos.

El incremento de velocidad que consigue un programa como resultado de la paralelización viene


dado por la ley de Amdahl.

3.7. Arquitectura de la computadora de von Neumann


El matemático húngaro John von Neumann, quien fue el primero en escribir los requisitos
generales para una computadora electrónica en sus artículos de 1945.

También conocida como "computadora de programa almacenado", tanto las instrucciones del
programa como los datos se guardan en la memoria electrónica. Difiere de las computadoras
anteriores que fueron programadas a través de "cableado".

Desde entonces, prácticamente todas las computadoras han seguido este diseño básico:
 Consta de cuatro componentes principales:

o Memoria

o Unidad de control

o Unidad de lógica aritmética

o De entrada y salida

 La memoria de acceso aleatorio de lectura / escritura se utiliza para almacenar tanto las
instrucciones del programa como los datos.

o Las instrucciones del programa son datos codificados que le dicen a la


computadora que haga algo.

o Los datos son simplemente información para ser utilizada por el programa.

 La unidad de control obtiene las instrucciones / datos de la memoria, decodifica las


instrucciones y luego coordina las operaciones de forma secuencial para realizar la tarea
programada.

 Unidad aritmética realiza operaciones aritméticas básicas.

 Entrada / Salida es la interfaz para el operador humano

3.8. La taxonomía de Flynn


Como toda clasificación (o taxonomía) de arquitecturas persigue dividir el conjunto de los
computadores en una serie de clases de forma que, si se sabe la clase a la que pertenece un
computador, automáticamente se conocen una serie de características interesantes del mismo.

Una de las clasificaciones más utilizadas, en uso desde 1966, se llama Taxonomía de Flynn.
La taxonomía de Flynn distingue las arquitecturas de computadora multiprocesador según cómo
pueden clasificarse a lo largo de las dos dimensiones independientes de Instruction Stream y Data
Stream. Cada una de estas dimensiones puede tener solo uno de dos estados
posibles: Único o Múltiple.

La siguiente matriz define las 4 clasificaciones posibles según Flynn:

3.8.1. SISD (Single Instruction, Single Data)


 La CPU activa un solo flujo de instrucciones.
 Datos almacenados en una única memoria.
 Ejemplo: Computadores monoprocesador, mainframes de generación
anterior, minicomputadoras, estaciones de trabajo.

Descripción Estructural

3.8.2. SIMD (Single Instruction, Multiple Data)

Una única instrucción máquina controla paso a paso la ejecución simultánea de un cierto
número de elementos de proceso.
Cada elemento de proceso tiene una memoria asociada.

Cada instrucción es ejecutada por cada procesador, con un conjunto de datos diferentes.

Se aprovecha el paralelismo de datos.

Instrucción única: todas las unidades de procesamiento ejecutan la misma instrucción en


cualquier ciclo de reloj dado.

Datos múltiples: cada unidad de procesamiento puede operar en un elemento de datos


diferente.

Más adecuado para problemas especializados caracterizados por un alto grado de regularidad,
como el procesamiento de gráficos e imágenes.

Dos variedades: matrices de procesadores y tuberías de vectores

Ejemplos:

Arreglos de procesadores: Máquinas de pensar CM-2, MasPar MP-1 y MP-2, ILLIAC IV

Tuberías de vectores: IBM 9000, Cray X-MP, Y-MP y C90, Fujitsu VP, NEC SX-2, Hitachi
S820, ETA10

La mayoría de las computadoras modernas, particularmente aquellas con unidades de


procesamiento de gráficos (GPU) emplean instrucciones SIMD y unidades de ejecución.
3.8.3. MISD (Múltiple Instruction, Single Data)
Se transmite una secuencia de datos a un conjunto de procesadores.
Cada procesador ejecuta una secuencia de instrucciones diferente.
Esta estructura nunca ha sido implementada.

Pocos (si alguno) ejemplos reales de esta clase de computadora paralela han
existido alguna vez.

Algunos usos concebibles podrían ser:


 Múltiples filtros de frecuencia que operan en una sola señal.
 Algoritmos de criptografía múltiple que intentan descifrar un solo mensaje
codificado.

3.8.4. MISD (Múltiple Instruction, Múltiple Data)


La organización básica de un multiprocesador es la indicada en la figura adjunta
líneas abajo. El sistema contiene dos o más procesadores de capacidades
semejantes.
Todos los procesadores comparten el acceso a varios módulos de
memoria, varios canales de E/S, y dispositivos periféricos.
Lo más importante es que todo el conjunto puede ser controlado por un
sistema operativo integrado, que provee interacción entre los procesadores y sus
programas en varios niveles.
Cada procesador posee su propia memoria y puede tener sus dispositivos
privados. La intercomunicación entre procesadores puede ser a través de las
memorias compartidas o por medio de una malla conmutada.

La organización del hardware es determinada, primariamente, por la


estructura de interconexión utilizada entre memorias y procesadores, de la cual se
han utilizado al presente tres modelos:
- Bus común de tiempo compartido
- Malla de conmutación tipo crossbar
- Memorias multipuerto.

En resumen:
 Un conjunto de procesadores ejecuta simultáneamente secuencias de
instrucciones diferentes.

 Conjuntos de datos diferentes.

 Un computador multiprocesador está formado por muchos procesadores lo


cuales pueden comunicarse y cooperar entre ellos a diferentes niveles, para
resolver un dado problema. Esta comunicación puede hacerse mediante
mensajes entre ellos o mediante una memoria compartida.

Ejemplo: SMP, los Clusters y los sistemas NUMA son ejemplos de esta
categoría.
En general se denotan 2 modelos de multiprocesadores MIMD:

a. MULTIPROCESADORES LEVEMENTE ACOPLADOS:


En estos sistemas, cada procesador tiene un conjunto de dispositivos de
entrada/salida y una gran memoria local, donde obtienen la mayoría de sus
instrucciones y datos.
Nos referiremos al procesador, a su memoria y a sus dispositivos de E/S como un
"módulo computador". Los procesos que se ejecutan en diferentes módulos
computadores, se comunican mediante el intercambio de mensajes a través de un
sistema de transferencia de mensajes (STM).
El grado de acoplamiento, o sea la interacción procesador-procesador, en estos
sistemas es muy pobre, tanto que a veces se los conoce como "sistemas de
procesamiento distribuido", aunque en realidad, el término procesamiento
distribuido se aplica al procesamiento de un problema y sus partes en diferentes
computadores, interconectados de alguna manera.

En la figura adjunta, se indica la conformación de un módulo computador y del


sistema de conexión entre ellos. En la interfase de cada módulo, hay un
conmutador de arbitraje y un canal. El canal es un dispositivo particular de E/S,
mientras que la llave de arbitraje es la que permite la conexión con el STM de
acuerdo con los requerimientos que se establezcan para evitar colisiones.

MODELO FUERTEMENTE ACOPLADO.


En el modelo fuertemente acoplado, los procesadores se comunican por medio de
una memoria compartida, con lo cual la velocidad a la que se transfieren datos es
del orden del ancho de banda de la memoria.
Cada procesador puede tener asimismo una pequeña cache o memoria local de
alta velocidad, existiendo una total conectividad entre procesadores y memoria, la
que puede ser implementada por una malla de interconexión o por una memoria
multipuerto.
La limitación más importante de este tipo de computadores, es la degradación que
sufre el rendimiento por los múltiples accesos a memoria, necesarios para la
comunicación.
Los multiprocesadores fuertemente acoplados, tienen un modelo tal como el
expuesto en la figura, donde se tiene un conjunto de N procesadores, L módulos
de memoria y varios canales de E/S, conectados mediante un conjunto de tres
mallas de interconexión:

1 - La red de conexión procesador-memoria


2 - La red de conexión procesador-E/S
3 - La red de conexión para interrupción entre procesadores.

La primera es un sistema de conmutación que conecta a cualquier procesador con


cualquier módulo de memoria, normalmente es un conmutador crossbar.
La red de conexión procesador-E/S permite a un procesador cualquiera conectarse
con uno de los dispositivos periféricos. Esta también es normalmente una red
crossbar.
Finalmente, la red inter procesadores, permite que cualquiera de ellos interrumpa
a cualquier otro a fin de o bien transferirle datos, o información de estado. En este
último caso, la información puede ser la de mal funcionamiento, solicitando así su
reemplazo.

Caso: CLUSTERS
Un clúster es un tipo de computador paralelo o distribuido que consiste en un
conjunto de computadores independientes pero interconectados entre sí que
trabajan conjuntamente como un único recurso para resolver un problema común.
Multiprocesador “casero”: utiliza componentes comerciales, baratos y potentes:
Commodity of the shelf (COTS)

Los clusters se clasifican:

 Según la aplicación.
- Clusters de alto rendimiento: diseñados para la implementación de
aplicaciones de alto coste computacional.
- Clusters de alta fiabilidad: diseñado para aplicaciones críticas, en las que lo
importante es la disponibilidad.

 Según el propietario de los nodos:


- Clusters dedicados: las aplicaciones paralelas se ejecutan en todo el
sistema, sin ningún tipo de restricción.
- Clusters no dedicados: cada nodo tiene un propietario y las aplicaciones
paralelas se ejecutan en el tiempo en que los nodos están ociosos (ciclos
libres).

 Configuración del clúster:


- Clusters homogéneos: la arquitectura (hardware y software) de todos los
nodos es la misma.
- Clusters heterogéneos: los nodos tienen diferentes características, en
cuanto a hardware o software.

3.9. Arquitecturas paralelas de memoria de computadora


3.9.1. Memoria compartida
Características Generales:

 Las computadoras paralelas de memoria compartida varían ampliamente, pero


generalmente tienen en común la capacidad de todos los procesadores para acceder a
toda la memoria como espacio de direcciones global.

 Múltiples procesadores pueden operar independientemente pero comparten los mismos


recursos de memoria.

 Los cambios en una ubicación de memoria efectuados por un procesador son visibles para
todos los otros procesadores.

 Históricamente, las máquinas de memoria compartida se han clasificado


como UMA y NUMA, según los tiempos de acceso a la memoria.

Acceso Uniforme a la Memoria (UMA)


 Lo más comúnmente representado en la actualidad por las máquinas de multiprocesador
simétrico (SMP)

 Procesadores idénticos.

 Igual acceso y tiempos de acceso a la memoria.

 A veces se llama CC-UMA - Caché UMA coherente. Caché coherente significa que si un
procesador actualiza una ubicación en la memoria compartida, todos los demás
procesadores conocen la actualización. La coherencia de caché se logra a nivel de
hardware.

Acceso de Memoria no Uniforme (NUMA)

 A menudo se realiza mediante la vinculación física de dos o más SMP

 Un SMP puede acceder directamente a la memoria de otro SMP

 No todos los procesadores tienen el mismo tiempo de acceso a todas las memorias

 El acceso a la memoria a través del enlace es más lento

 Si se mantiene la coherencia de la memoria caché, también puede llamarse CC-NUMA -


NUMA coherente de la memoria caché
Ventajas:

 El espacio de direcciones global proporciona una perspectiva de programación fácil de


usar para la memoria.

 El intercambio de datos entre tareas es rápido y uniforme debido a la proximidad de la


memoria a las CPU.

Desventajas:

 La principal desventaja es la falta de escalabilidad entre la memoria y las CPU. Agregar más
CPU puede aumentar el tráfico geométricamente en la ruta de la CPU y la memoria
compartida, y para los sistemas coherentes de caché, aumentar el tráfico asociado con la
administración de memoria / caché.

 Responsabilidad del programador para las construcciones de sincronización que aseguran


el acceso "correcto" de la memoria global.

3.9.2. Memoria distribuida


Características Generales:

 Al igual que los sistemas de memoria compartida, los sistemas de memoria distribuida
varían ampliamente pero comparten una característica común. Los sistemas de memoria
distribuida requieren una red de comunicación para conectar la memoria entre
procesadores.

 Los procesadores tienen su propia memoria local. Las direcciones de memoria en un


procesador no se asignan a otro procesador, por lo que no existe un concepto de espacio
de direcciones global en todos los procesadores.

 Debido a que cada procesador tiene su propia memoria local, opera de manera
independiente. Los cambios que realiza en su memoria local no tienen efecto en la
memoria de otros procesadores. Por lo tanto, el concepto de coherencia de caché no se
aplica.
 Cuando un procesador necesita acceder a los datos en otro procesador, generalmente es
tarea del programador definir explícitamente cómo y cuándo se comunican los datos. La
sincronización entre tareas es responsabilidad del programador.

 El "tejido" de red utilizado para la transferencia de datos varía ampliamente, aunque


puede ser tan simple como Ethernet.

Ventajas:

 La memoria es escalable con el número de procesadores. Aumenta la cantidad de


procesadores y el tamaño de la memoria aumenta proporcionalmente.

 Cada procesador puede acceder rápidamente a su propia memoria sin interferencias y sin
los gastos generales incurridos al tratar de mantener la coherencia de caché global.

 Rentabilidad: puede utilizar productos básicos, procesadores estándar y redes.

Desventajas:

 El programador es responsable de muchos de los detalles asociados con la comunicación


de datos entre procesadores.

 Puede ser difícil asignar las estructuras de datos existentes, basadas en la memoria global,
a esta organización de memoria.

 Tiempos de acceso a la memoria no uniformes: los datos que residen en un nodo remoto
tardan más en acceder a los datos locales del nodo.

3.9.3. Memoria hibrida distribuida-compartida


Características Generales:

 Las computadoras más grandes y rápidas del mundo hoy en día emplean arquitecturas de
memoria compartida y distribuida.

 El componente de memoria compartida puede ser una máquina de memoria compartida y


/ o unidades de procesamiento de gráficos (GPU).
 El componente de memoria distribuida es la conexión en red de múltiples máquinas de
memoria compartida / GPU, que solo conocen su propia memoria, no la memoria de otra
máquina. Por lo tanto, se requieren comunicaciones de red para mover datos de una
máquina a otra.

 Las tendencias actuales parecen indicar que este tipo de arquitectura de memoria
continuará prevaleciendo y aumentará en el extremo superior de la computación en el
futuro inmediato.

Ventajas y Desventajas:

 Lo que sea común a ambas arquitecturas de memoria compartida y distribuida.

 El aumento de la escalabilidad es una ventaja importante

 El aumento de la complejidad del programador es una desventaja importante


4. Aplicaciones
 Ciencia e Ingenieria:
 Históricamente, la computación paralela ha sido considerada como "el
extremo superior de la computación", y se ha utilizado para modelar
problemas difíciles en muchas áreas de la ciencia y la ingeniería:
o Atmósfera, Tierra, Medio Ambiente. o

o Física: aplicada, nuclear, partículas, materia condensada, alta


presión, fusión, fotónica.
o Biociencia, Biotecnología, Genética.
o Química, Ciencias Moleculares
o Geología, sismología
o Ingeniería mecánica - desde prótesis hasta naves espaciales.
o Ingeniería Eléctrica, Diseño de Circuitos, Microelectrónica.
o Informática, Matemáticas
o Militar. defensa, Armas

Industrial y Comercial:
 Hoy en día, las aplicaciones comerciales proporcionan una fuerza motriz
igual o mayor en el desarrollo de computadoras más rápidas. Estas
aplicaciones requieren el procesamiento de grandes cantidades de datos de
manera sofisticada. Por ejemplo:
o "Big Data", bases de datos, minería de datos o
o Inteligencia Artificial (IA)
o Buscadores web, servicios empresariales basados en web.
o Imagen médica y diagnóstico.
o Diseño farmaceutico
o Modelización financiera y económica.
o Gestión de empresas nacionales y multinacionales.
o Gráficos avanzados y realidad virtual, particularmente en la
industria del entretenimiento.
o Video en red y tecnologías multimedia.
o Exploración de aceite
5. Terminología
 Como todo lo demás, la computación paralela tiene su propia "jerga". A continuación se
enumeran algunos de los términos más comúnmente asociados con la computación
paralela.

 La mayoría de estos serán discutidos en más detalle más adelante.

Supercomputación / Computación de alto rendimiento (HPC)

Usando las computadoras más grandes y rápidas del mundo para resolver grandes problemas.

Nodo

Un "ordenador en una caja" independiente. Por lo general, se compone de varias CPU /


procesadores / núcleos, memoria, interfaces de red, etc. Los nodos están conectados en red para
formar un supercomputador.

CPU / Socket / Procesador / Core

Esto varía, dependiendo de con quién hables. En el pasado, una CPU (Unidad central de
procesamiento) era un componente de ejecución singular para una computadora. Luego, se
incorporaron múltiples CPU a un nodo. Luego, las CPU individuales se subdividieron en múltiples
"núcleos", cada uno de los cuales es una unidad de ejecución única. Las CPU con múltiples núcleos
a veces se denominan "sockets", depende del proveedor. El resultado es un nodo con varias CPU,
cada una con múltiples núcleos. La nomenclatura se confunde a veces. ¿Preguntarse por qué?

Tarea
Una sección lógicamente discreta del trabajo computacional. Una tarea es típicamente un
programa o conjunto de instrucciones similar a un programa que es ejecutado por un
procesador. Un programa paralelo consiste en múltiples tareas que se ejecutan en múltiples
procesadores.

Tubería

Dividir una tarea en pasos realizados por diferentes unidades de procesador, con entradas que se
transmiten a través de, como una línea de ensamblaje; Un tipo de computación paralela.

Memoria compartida

Desde un punto de vista estrictamente de hardware, describe una arquitectura de computadora


donde todos los procesadores tienen acceso directo (generalmente basado en bus) a la memoria
física común. En un sentido de programación, describe un modelo en el que todas las tareas
paralelas tienen la misma "imagen" de memoria y pueden abordar y acceder directamente a las
mismas ubicaciones de memoria lógica independientemente de dónde exista realmente la
memoria física.

Multiprocesador simétrico (SMP)

Arquitectura de hardware de memoria compartida donde varios procesadores comparten un


único espacio de direcciones y tienen igual acceso a todos los recursos.

Memoria distribuida

En hardware, se refiere al acceso a la memoria basado en la red para la memoria física que no es
común. Como modelo de programación, las tareas solo pueden "ver" lógicamente la memoria de
la máquina local y deben usar comunicaciones para acceder a la memoria en otras máquinas
donde se ejecutan otras tareas.

Comunicaciones

Las tareas paralelas normalmente necesitan intercambiar datos. Hay varias formas en que esto se
puede lograr, por ejemplo, a través de un bus de memoria compartida o a través de una red, sin
embargo, el evento real de intercambio de datos se conoce comúnmente como comunicaciones,
independientemente del método empleado.

Sincronización

La coordinación de tareas paralelas en tiempo real, muy a menudo asociada a las


comunicaciones. A menudo se implementa mediante el establecimiento de un punto de
sincronización dentro de una aplicación donde una tarea no puede continuar hasta que otra (s)
tarea (s) alcance el mismo punto o el punto lógicamente equivalente.

La sincronización generalmente implica esperar por al menos una tarea y, por lo tanto, puede
hacer que aumente el tiempo de ejecución del reloj de pared de una aplicación paralela.

Granularidad
En la computación en paralelo, la granularidad es una medida cualitativa de la relación entre
computación y comunicación.

o Grueso: se realizan cantidades relativamente grandes de trabajo computacional


entre eventos de comunicación

o Fino: se realizan cantidades relativamente pequeñas de trabajo computacional


entre eventos de comunicación.

Aceleración observada

Aceleración observada de un código que ha sido paralelizado, definido como:

reloj de pared de ejecución en serie

-----------------------------------

reloj de pared de ejecución paralela

Uno de los indicadores más simples y más utilizados para el desempeño de un programa paralelo.

Sobrecarga paralela

La cantidad de tiempo requerido para coordinar tareas paralelas, en lugar de hacer un trabajo
útil. La sobrecarga paralela puede incluir factores tales como:

o Tiempo de inicio de la tarea

o Sincronizaciones

o Transmisión de datos

o Gastos generales de software impuestos por lenguajes paralelos, bibliotecas,


sistema operativo, etc.

o Hora de finalización de la tarea

Masivamente paralelo

Se refiere al hardware que comprende un sistema paralelo dado, que tiene muchos elementos de
procesamiento. El significado de "muchos" sigue aumentando, pero en la actualidad, las
computadoras paralelas más grandes están compuestas por elementos de procesamiento que
suman cientos de miles a millones.

Avergonzadamente paralelo

Resolviendo muchas tareas similares, pero independientes simultáneamente; Poco o ninguna


necesidad de coordinación entre las tareas.

Escalabilidad
Se refiere a la capacidad de un sistema paralelo (hardware y / o software) para demostrar un
aumento proporcional en la aceleración paralela con la adición de más recursos. Los factores que
contribuyen a la escalabilidad incluyen:

o Hardware: en particular, ancho de banda de memoria-CPU y propiedades de


comunicación de red

o Algoritmo de aplicación

o Gastos generales paralelos relacionados

o Características de su aplicación específica.


6. Referencias
“Introducción a la computación paralela”, Blaise Barney, Laboratorio Nacional Lawrence Livermore

"Introducción a la computación paralela". Ananth Grama, Anshul Gupta, George Karypis, Vipin
Kumar.

"Resumen de las supercomputadoras recientes". AJ van der Steen, Jack Dongarra.

https://computing.llnl.gov/tutorials/parallel_comp/?fbclid=IwAR0ASc6jLwAXCt_eOhMU5fj-
ry5mKn44BOTwUKOydA34jD-YiO-e4s1pwEE#Neumann

https://es.wikipedia.org/wiki/Computaci%C3%B3n_paralela#Paralelismo_de_grano_fino,_grano_g
rueso_y_paralelismo_vergonzoso

También podría gustarte