0% encontró este documento útil (0 votos)
16 vistas14 páginas

SCP - Apuntes.0 Conceptosbasicos

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1/ 14

▪ 0▪

Arquitecturas Paralelas:
conceptos básicos

0.1 INTRODUCCIÓN

Aunque los procesadores son cada vez más rápidos, existen numerosas
aplicaciones para las que la velocidad de cálculo de un único procesador
resulta insuficiente. La alternativa adecuada para esas aplicaciones es el uso
de paralelismo. Con el término paralelismo se indica que la ejecución de un
determinado programa se reparte entre muchos procesadores, que trabajan
simultáneamente.
Pueden utilizarse diferentes niveles de paralelismo. Por ejemplo, se
explota el paralelismo a nivel de instrucción (ILP) cuando se segmenta la
ejecución de las instrucciones de un programa: en un momento dado, se
están ejecutando muchas instrucciones a la vez, pero en fases de ejecución
diferentes. También puede explotarse el paralelismo en los datos. El ejemplo
con más éxito de esa alternativa son los computadores vectoriales que
acabamos de analizar. En todos esos casos (y en otros similares, como
VLIW), solo existe un contador de programa o PC, es decir solo se ejecuta
un programa bajo una única unidad de control. En los próximos capítulos
▪ 2 ▪ ARQUITECTURAS PARALELAS: CONCEPTOS BÁSICOS.

vamos a estudiar el paralelismo a nivel de programa, es decir, vamos a


analizar cómo repartir la ejecución de un programa entre P procesadores. Si
fabricar réplicas de un procesador es un proceso relativamente sencillo y
barato, ¿por qué no utilizar P procesadores para intentar ejecutar un
programa P veces más rápido?
Recordemos un momento la clasificación de Flynn de los computadores,
que toma en cuenta el número de flujos de datos y de instrucciones:
▪ SISD: un solo flujo de datos y un solo flujo de instrucciones. Se trata
del modelo de un solo procesador (superescalar, por ejemplo). El
paralelismo se obtiene en el uso simultáneo de unidades funcionales
debido a la segmentación de la ejecución de las instrucciones.
▪ SIMD: un solo flujo de instrucciones (un contador de programa), pero
muchos flujos de datos. En función del uso de la memoria, pueden
diferenciarse dos familias: los procesadores vectoriales (memoria
compartida) y los procesadores en array de memoria distribuida. En
esta categoría entran también las tarjetas graficas que se utilizan
actualmente para efectuar cálculo.
▪ MIMD: múltiples flujos de datos y de instrucciones. Se trata del
verdadero modelo de paralelismo, en el que existen muchos
programas en ejecución simultanea. Este es el tipo de máquina que
vamos a analizar a partir de ahora.
Antes de ello, una pequeña precisión acerca del uso de P procesadores,
puesto que podemos tener diferentes alternativas, en función del objetivo que
busquemos:
▪ Redes de computadores (LAN, WAN...). P usuarios ejecutan cada uno
de ellos un programa diferente, independientemente (tal vez, de vez en
cuando, se produzca alguna transmisión de datos entre los usuarios).
Cada programa se ejecuta según el modelo de un único procesador.
▪ Tolerancia a fallos. En función de la aplicación, existen diferentes
maneras de hacer frente a los fallos del sistema. Por ejemplo, se repite
la ejecución del mismo programa en P procesadores, para obtener un
alto nivel de fiabilidad de los resultados (por ejemplo, en situaciones
especiales en las que no podemos permitirnos un error), o para
disponer de una máquina cuando falla otra (high reliability, en un
banco, por ejemplo) En otros casos, un computador ofrece un
determinado servicio y un segundo computador está a la espera del
ARQUITECTURAS PARALELAS (conceptos básicos). VELOCIDAD DE CÁLCULO. ▪ 3 ▪

posible fallo del primero, y cuando lo detecta toma su función para


que el servicio ofertado esté siempre disponible (high availability).
▪ Se ejecuta el mismo programa, repetido en todos los procesadores,
pero con datos diferentes; por ejemplo, para hacer múltiples
simulaciones independientes de un proceso físico en menor tiempo
(mejora del throughput). O, en los servidores, para poder atender a
múltiples peticiones simultáneas (por ejemplo, en una base de datos).
• Para ejecutar un programa P veces más rápido (high
performance). Este es el tipo de aplicación que nos interesa.
Comparado con los anteriores casos, la diferencia fundamental va a
estar en la comunicación entre procesos, que va a ser mucho más
intensiva y que habrá que efectuar en tiempos muy breves
(microsegundos). Esta comunicación es una parte de la ejecución y se
produce como consecuencia de ejecutar en paralelo. Existen diferentes
arquitecturas de este tipo, en función del número de procesadores, el
nivel de acoplamiento entre ellos (frecuencia de la comunicación), la
capacidad y complejidad de los procesadores, los mecanismos de
sincronización y control, el tamaño de las tareas, etc.
En los próximos capítulos vamos a analizar las principales características
y problemas de este nuevo modelo de ejecución. Pero, antes de ello, vamos a
definir los principales conceptos y terminología de esta área.

0.2 COMPUTADORES DM-SIMD

Acabamos de analizar los computadores vectoriales, máquinas SIMD de


memoria compartida. Aunque no son nuestro objetivo, vamos a hacer un
breve resumen de las características principales del otro tipo de arquitecturas
SIMD, las de memoria distribuida (DM = distributed memory) o
procesadores en array. Como ya hemos comentado, los computadores SIMD
explotan el paralelismo de datos: con una única instrucción (la misma en
todos los procesadores en el caso de los arrays) se procesan múltiples datos.

Red de comunicación

Pr + M + I/O
Computador front-end Procesador
de control

Array de cálculo
▪ 4 ▪ ARQUITECTURAS PARALELAS: CONCEPTOS BÁSICOS.

Las características principales son las siguientes:


- Procesadores: en general, se utilizan muchos procesadores muy
sencillos; por ejemplo, 1024 procesadores de 1 bit. Así pues,
procesadores baratos pero no muy rápidos. En el caso de los
procesadores serie, de 1 bit, se pueden procesar datos de cualquier
tamaño, siendo la latencia proporcional al tamaño de los mismos.
- Control: el control es centralizado. Todos los procesadores ejecutan la
misma instrucción en el mismo momento (lock-step), sobre datos
diferentes. Si es necesario, la ejecución puede controlarse mediante
máscaras, que indican en qué procesadores sí y en cuáles no se debe
ejecutar la instrucción actual.
Un procesador de control reparte las instrucciones a los procesadores
y de comunicarse con el computador central front-end, desde el que se
controla todo el sistema. Como en el caso de los procesadores
vectoriales, el código que no se pueda ejecutar en el array se ejecutará
en serie en el procesador central (o en el de control).
Normalmente, los procesadores del array también pueden realizar
operaciones de entrada/salida, lo que resulta muy adecuado para las
aplicaciones que necesitan procesar datos de manera intensiva.
- Estructura: los procesadores forman una matriz o array, de 2 o 3
dimensiones. Una red de comunicación facilita la comunicación entre
los procesadores; las redes más habituales son las mallas, los toros,
etc. En general, para mejorar la eficiencia del sistema, la red se suele
dividir en diferentes planos o subredes: para datos, para control, etc.
- Aplicaciones: este tipo de estructura se adecúa muy bien a un
determinado tipo de aplicaciones; por ejemplo, procesamiento de
señales y de imágenes, o cierto tipo de simulaciones (Montecarlo...).
Aunque el espacio de memoria sea común, la eficiencia del sistema es
mucho mayor si las comunicaciones son locales (con los vecinos), que
es lo que ocurre en las aplicaciones que hemos citado.
La regularidad de las estructuras de datos que se procesan y el tipo de
operaciones que se ejecutan hacen que los accesos a memoria se
realicen de acuerdo a patrones conocidos, en muchos casos en forma
de “permutaciones".
ARQUITECTURAS PARALELAS (conceptos básicos). VELOCIDAD DE CÁLCULO. ▪ 5 ▪

ILLIAC IV, Solomon, CM1, BSP, DAP, Quadrics Apemille, procesadores


sistólicos... son algunas de las máquinas más conocidas que han utilizado
este tipo de arquitectura. Aunque han tenido su importancia, los
computadores SIMD únicamente han encontrado un hueco en el tipo de
aplicaciones citadas, y hoy no tienen presencia alguna en el mercado. Sin
embargo, una arquitectura de características “similares”, la de las tarjetas
gráficas o GPUs, está siendo muy utilizada como acelerador específico en
sistemas masivamente paralelos.
Así pues, los sistemas paralelos actuales son de tipo MIMD; veamos, por
tanto, sus características principales.

0.3 COMPUTADORES MIMD

Como ya hemos comentado, en un sistema MIMD las aplicaciones se


reparten en múltiples procesos que se ejecutan en diferentes procesadores.
Desde el punto de vista de la arquitectura del sistema, la primera cuestión a
aclarar sería: ¿cómo se estructuran los P procesadores en un sistema único?
La respuesta puede ser muy amplia, pero pueden identificarse dos grandes
grupos de arquitecturas, de acuerdo al uso de la memoria: los sistemas de
memoria compartida y los de memoria distribuida o privada.

0.3.1 Memoria compartida (shared memory)


En los sistemas paralelos de memoria compartida, todos los procesadores
comparten la memoria global del sistema, es decir, todos los procesadores
utilizan el mismo espacio de direccionamiento.
De esta manera, la comunicación entre procesos es relativamente sencilla,
utilizando para ello variables compartidas en la memoria común. Para pasar
un dato de un proceso a otro, basta con dejar el dato en una determinada
posición de memoria, donde lo leerá el proceso destino.
Procesadores (+ MC)

P0 P1 Pp–1

Red de comunicación

sistema E/S

M0 Mm–1

Memoria principal
▪ 6 ▪ ARQUITECTURAS PARALELAS: CONCEPTOS BÁSICOS.

Para conectar los procesadores y la memoria se utiliza una red de


comunicación. La red más sencilla es el bus; es fácil de usar y el control es
relativamente simple. Sin embargo, tenemos un problema nuevo: si se
conectan muchos procesadores al bus, es posible que estos lleguen a
saturarlo, y que, por tanto, los tiempos de acceso a memoria sean altos. No
hay que olvidar que el bus es una red centralizada que se comparte en el
tiempo, que no admite dos operaciones a la vez. También pueden utilizarse
otro tipo de redes, que analizaremos más adelante. Para simplificar, vamos a
suponer que la red de comunicación es un bus.
A este tipo de arquitectura se le conoce habitualmente con el nombre de
multiprocesador, y también como SMP (symmetric multiprocessor), UMA
(uniform memory access) o sistemas paralelos de alto grado de
acoplamiento. Dada la red de comunicación, un bus, el número de
procesadores de un sistema SMP es relativamente bajo, entre 2 y 32, por lo
que el paralelismo que se puede conseguir es reducido.
Por otra parte, los procesadores actuales están compuestos por varios
cores o núcleos que comparten la memoria; por tanto, desde el punto de vista
de la arquitectura, podemos considerarlos como sistemas de tipo SMP.

0.3.2 Memoria privada o distribuida (distributed memory)


En este segundo modelo, como puede verse en la figura, cada procesador
dispone de su propia memoria privada. El espacio de direcciones no es
común: las direcciones son locales y hacen referencia a la memoria propia
del procesador. Por ello, la comunicación entre procesos no puede hacerse,
como en el caso anterior, mediante posiciones comunes de memoria.

Nodos:
Procesador (+ MC) + Memoria principal + E/S + Contr. comunic.

P0 Pp–1

E/S E/S
M M
K K

Red de comunicación
ARQUITECTURAS PARALELAS (conceptos básicos). VELOCIDAD DE CÁLCULO. ▪ 7 ▪

Así, la comunicación se realiza mediante paso de mensajes, utilizando


para ello la red de comunicación. Si Pi debe enviar datos a Pj, formará con
ellos un mensaje y lo enviará a la red; los controladores de la red se
encargarán de ir retransmitiendo el mensaje hasta que llegue a su destino.
El objetivo de este modelo es conseguir paralelismo “masivo”, es decir,
poder utilizar un número grande de procesadores. Por ello, no se utiliza un
bus como de red de comunicación, sino redes tales como mallas y toros de 2
y 3 dimensiones, hipercubos, árboles, etc., que analizaremos más adelante.
A este tipo de arquitectura se le conoce como multicomputador o MPP
(Massively Parallel Processors), sistema débilmente acoplado, etc.

0.3.3 Memoria lógicamente compartida pero


físicamente distribuida (distributed shared memory)

Existe una tercera alternativa, que corresponde a una mezcla de las dos
anteriores. Cuando el espacio de memoria es común, la programación de
aplicaciones suele resultar más sencilla, pero la memoria se convierte en un
cuello de botella: se producen grandes atascos de tráfico, provocados por los
procesadores, que tienen que acceder a la memoria común a través de una
red tipo bus. Cuando la memoria es privada en cada procesador, ese
problema desaparece, pero la comunicación entre procesadores es más
compleja, y también lo son los modelos de programación.
Un análisis sencillo de los programas muestra que los procesadores no
hacen un uso homogéneo de la memoria, es decir, no acceden con la misma
probabilidad a cualquier posición de memoria; ello permite pensar en una
alternativa mixta: compartir el espacio de memoria, pero distribuirla
físicamente entre los procesadores. La estructura que corresponde a este
modelo mixto es la de la figura anterior, pero todos los procesadores tienen
acceso a todos los bloques de memoria. Estamos organizando la memoria
principal de manera jerárquica: los accesos locales serán rápidos, pero los
externos serán mucho más lentos, puesto que hay que salir a la red de
comunicación. Esperamos, en todo caso, que el acceso a la memoria local
sea mucho más frecuente que a la memoria “remota”, y que la red de
comunicación se utilice principalmente para la comunicación entre procesos.
Esta última estructura es la que está obteniendo el mayor éxito y
desarrollo en la actualidad, y habitualmente se conoce como NUMA (Non
Uniform Memory Access) o también como MPP.
▪ 8 ▪ ARQUITECTURAS PARALELAS: CONCEPTOS BÁSICOS.

0.3.4 Clusters, constellations... y otros

Las arquitecturas que hemos citado son las principales, y hacen referencia al
uso de memoria por parte de los procesadores. Es muy habitual que
encontremos todo tipo de mezclas entre ellas. Por ejemplo, en la mayoría de
los supercomputadores actuales los nodos que forman el sistema, y que se
conectan mediante una red de comunicación, no son simples procesadores,
sino pequeños sistemas paralelos SMP con 4-8 procesadores conectados en
un bus (el propio procesador es multicore). Así, dentro de cada nodo la
memoria es compartida, pero la de otros nodos es privada.
Por otra parte, y tratando de reducir el elevado coste de los
supercomputadores de diseño específico, han aparecido en el mercado con
fuerza los sistemas formados por hardware sencillo y barato: computadores
de propósito general conectados entre sí mediante redes más o menos
sencillas derivadas de las tecnologías de las redes de computadores. En
general, a este tipo de sistemas se les denomina clusters. Así pues, para
formar un cluster se necesita un conjunto de nodos de cómputo y una red de
comunicación (junto con el software de gestión y programación adecuado).
La eficiencia del cluster ejecutando código paralelo será función de ambos,
nodos y red. En el caso más simple, los nodos son simples PCs y la red de
comunicación es (Gigabit) Ethernet. Ese tipo de sistema se conoce como
Beowulf; es la opción más barata, pero también la de menores prestaciones,
aunque ofrece buenos resultados en aquellos casos en los que la
comunicación entre procesos no es relevante.
Para conseguir clusters más eficientes, pueden usarse pequeños sistemas
SMP como nodos de cálculo y redes de comunicación más sofisticadas
(Myrinet, Infiniband, Quadrics…); cuando el número de procesadores de
cada nodo del cluster es mucho mayor que el número de nodos, el sistema se
conoce también con el nombre de constellation.
Todos los fabricantes ofrecen hoy en día diversos tipos de clusters en sus
catálogos (custom clusters) como una alternativa interesante para conseguir
máquinas de alto rendimiento a un coste “razonable”. Además, es
relativamente sencillo montar un cluster de no muy alto rendimiento
conectando unos cuantos PC entre sí (commodity clusters).
Sea cual sea la arquitectura del sistema paralelo, en todos ellos es
necesario resolver una serie de problemas comunes para poder lograr un
buen rendimiento. Analicemos brevemente los principales problemas a los
que hay que hacer frente.
ARQUITECTURAS PARALELAS (conceptos básicos). VELOCIDAD DE CÁLCULO. ▪ 9 ▪

0.4 ALGUNOS PROBLEMAS

En cualquiera de sus estructuras, un computador MIMD presenta numerosos


problemas nuevos para resolver. Por ejemplo:
▪ Gestión del sistema: la máquina construida a partir de múltiples
procesadores o, incluso, computadores autónomos, debe aparecer al
usuario como un único sistema integrado. Van a ser necesarios para
ello nuevos sistemas operativos específicos, mecanismos adecuados
para la gestión distribuida de las tareas, nuevas herramientas de
monitorización, controles de seguridad avanzados, etc. Son todas ellas
cuestiones muy importantes, pero no las trataremos en este texto.
▪ Reparto de tareas. ¿Sabemos cómo repartir un programa secuencial
entre P procesadores? En algunos casos será muy sencillo; por
ejemplo, es muy fácil repartir entre N procesadores la ejecución del
bucle do i = 1,N {A(i) = A(i) + 1}; cada uno ejecuta una
iteración del bucle, cualquiera de ellas, ya que todas las iteraciones
son independientes y por tanto da igual cómo se haga. Pero en los
casos más generales puede que no sea sencillo sacar a la luz el
paralelismo inherente a un determinado algoritmo. De hecho, en
muchos casos va a ser necesario desarrollar nuevos algoritmos para
resolver viejos problemas, que saquen partido de las posibilidades de
la máquina paralela. En general, la programación paralela es más
compleja que la programación secuencial o serie.
Junto a ello, es necesario mantener cierto equilibrio en el reparto de
carga de trabajo a los procesadores (load balancing). Si repartimos la
carga 80% - 20% entre dos procesadores, el sistema global no será en
modo alguno dos veces más rápido, ya que la tarea más larga será la
que marque el tiempo final de ejecución. El reparto de carga puede ser
estático —en tiempo de compilación— o dinámico —en tiempo de
ejecución—. El primero es más sencillo y no añade sobrecargas a la
ejecución del programa, pero es más difícil mantener el equilibrio de
la carga de trabajo. El segundo es más costoso en tiempo de ejecución,
pero permite repartos más equilibrados.
▪ Coherencia de los datos. Cuando se utilizan variables compartidas se
cargan copias de dichas variables en las caches de los procesadores.
Cuando se modifica una de dichas copias, ¿cómo se enteran del nuevo
valor de la variable el resto de procesos? es decir, ¿cómo se mantienen
▪ 10 ▪ ARQUITECTURAS PARALELAS: CONCEPTOS BÁSICOS.

"coherentes" los datos compartidos? Como veremos en los próximos


capítulos, la solución depende de la arquitectura del sistema.
▪ Comunicación. Cuando hablamos de paralelismo, la comunicación
entre procesos es una de las cuestiones principales a tratar. Y junto a
ello, la red de comunicación (sobre todo en los sistemas DSM o MPP).
En un sistema paralelo, el tiempo de ejecución de un programa puede
modelarse como:
Tp = Tej + Tcom
donde Tej representa el tiempo de ejecución real y Tcom el de
comunicación. El tiempo de ejecución se reduce (en teoría) con el
número de procesadores, pero el de comunicación, en cambio, crece.
La siguiente figura muestra una simplificación de ese compartimiento.

Tp

Tcom
Tej

Núm. procesadores

Como se observa en la figura, no siempre es una buena solución


utilizar un número elevado de procesadores, ya que las necesidades de
comunicación pueden echar por tierra cualquier otra ventaja. Es
necesario por ello encontrar un punto de equilibrio.
Un tipo especial de comunicación es la sincronización. Un grupo de
procesadores se sincroniza, por ejemplo, para esperar a que todos
terminen una tarea antes de comenzar con la siguiente. Los procesos
de sincronización pueden generar mucho tráfico en la red y momentos
de gran congestión en el acceso a variables comunes. Analizaremos
este problema un poco más adelante.
Considerando el reparto de tareas y la comunicación, suelen
distinguirse diferentes tipos o niveles de paralelismo:
• Paralelismo de grano fino (fine grain): las tareas que se reparten
entre los procesadores son "pequeñas", y la comunicación entre
ellas es muy frecuente, aunque no se intercambian mucha
información.
ARQUITECTURAS PARALELAS (conceptos básicos). VELOCIDAD DE CÁLCULO. ▪ 11 ▪

• Paralelismo de grano grueso (coarse grain): las tareas que se


reparten entre los procesadores son "grandes", y solo se comunican
entre ellas de vez en cuando, aunque en esos casos se intercambia
gran cantidad de información.

0.5 RENDIMIENTO DEL SISTEMA


PARALELO (leyes de Amdahl y Gustafson)

El coste de los sistemas paralelos es elevado, y por ello nuestro objetivo


debe ser conseguir ir P veces más rápido cuando se utilizan P procesadores.
Para comparar sistemas de un solo procesador y de P procesadores suelen
utilizarse dos parámetros: el factor de aceleración (speed-up) y la eficiencia
(efficiency).
El factor de aceleración mide cuántas veces más rápido se ha ejecutado un
determinado programa, es decir:

fa = Ts / Tp

donde Ts es el tiempo de ejecución en serie y Tp en paralelo.


Por su parte, la eficiencia se define como:

efic = fa / P (habitualmente en %)

es decir, el tanto por ciento que se consigue del máximo factor de


aceleración posible.
En el mejor de los casos, tendremos que Tp = Ts / P; es decir, que el
programa se ejecuta P veces más rápido usando P procesadores:

fa = Ts / (Ts / P) = P
efic = fa / P = 1

Se trata, en todo caso, de la situación ideal que, debido a múltiples


problemas —reparto no equilibrado de la carga, comunicación,
sincronización...— es difícil de lograr1. En todo caso, aunque no logremos

1
En algunos casos, pueden conseguirse factores de aceleración superlineales, es decir, mayores que P.
En general, son debidos a otros factores, ya que, además de P procesadores, el sistema paralelo
dispone de más memoria, más capacidad de entrada/salida, etc. Tal vez los datos/programas que no
cabían en la memoria de un procesador, sí quepan ahora en todo el sistema, con lo que, como
sabemos, se ahorrará tiempo.
▪ 12 ▪ ARQUITECTURAS PARALELAS: CONCEPTOS BÁSICOS.

que el factor de aceleración sea P, deberíamos conseguir que creciera


linealmente con el número de procesadores (o, lo que es equivalente, que la
eficiencia fuera constante, independiente de P): si se duplica el número de
procesadores, que se duplique también el factor de aceleración.
No todos los programas presentan esas características, ya que no podemos
olvidarnos de la ley de Amdahl. Tal como hemos visto en el caso de los
computadores vectoriales, los programas más habituales no pueden
ejecutarse completamente en paralelo: siempre queda una parte del código
que hay que ejecutar en serie (o en un número reducido de procesadores).
Por ejemplo, supongamos que una fracción del código, f, puede ejecutarse
en P procesadores, mientras que el resto, 1–f, debe ejecutarse en un único
procesador. En ese caso, el tiempo de ejecución debe escribirse así:
P Ts
T sp =∑ f i
Tsp = f  Tp + (1–f)  Ts (en general, i=1 i )
Si no consideramos el tiempo de comunicación, y tomamos el mejor caso,
Tp = Ts / P, entonces el speed-up o factor de aceleración será:

fa = Ts / Tp = P / [ P (1–f) + f ]

Por ejemplo, si P = 1024 y f = 0,98, entonces fa = 47,7, muy lejos del


hipotético 1024. Como se muestra en la siguiente figura, el factor de
aceleración se satura, con una asíntota de valor 1 / (1–f), y queda muy lejos
del comportamiento lineal.
ARQUITECTURAS PARALELAS (conceptos básicos). VELOCIDAD DE CÁLCULO. ▪ 13 ▪

De acuerdo a la ley de Amdahl, el efecto de la parte de código que haya


de ejecutarse en serie es muy grande cuando el número de procesadores es
grande. Si se cumple en la realidad lo que pronostica dicha ley, va a ser muy
difícil conseguir factores de aceleración (speed-up) altos. Como acabamos
de ver en el ejemplo anterior, basta que un 2% del código tenga que
ejecutarse en serie para que el factor de aceleración se reduzca de 1024 a 47
(a menos del 5%).
Sin embargo, se comprueba que en muchos casos se consiguen
aceleraciones reales mucho mayores que las pronosticadas. ¿Dónde está el
error? Cuando hemos planteado la ley de Amdahl hemos considerado la
siguiente hipótesis: se utilizan P procesadores para hacer que un
determinado algoritmo se ejecute más rápido. Pero en realidad, muchas
veces lo que ocurre es que se utiliza el sistema paralelo para ejecutar un
problema de tamaño más grande en el mismo tiempo que el problema
pequeño. Por ejemplo, se ejecutan más ciclos de simulación o se hacen
análisis considerando una red de más puntos, etc. En resumen, se mantiene el
tiempo de ejecución, no las dimensiones del problema.
Se ha podido comprobar experimentalmente que cuando se hace crecer el
tamaño del problema (por ejemplo, se usan matrices más grandes) no suele
crecer el tamaño del código que se debe ejecutar en serie (al menos no en la
misma proporción). Esto es equivalente a decir que al crecer el tamaño del
problema crece también f (no es un valor constante). Si es así, para calcular
el factor de aceleración deberíamos comparar estas dos situaciones:

trozo que hay que ejecutar en serie trozo que se puede ejecutar en paralelo

(1–f) Ts f Ts
1 procesador

problema de mayor tamaño

(1–f) Ts f Ts P

en paralelo en paralelo

(1–f) Ts f Ts / P (1–f) Ts f Ts
P procesadores

tamaño del problema constante tiempo de ejecución constante


▪ 14 ▪ ARQUITECTURAS PARALELAS: CONCEPTOS BÁSICOS.

Por tanto, cuando el tiempo de ejecución se mantiene constante:

Ts = (1–f) Ts + f Ts P
Tp = (1–f) Ts + f Ts = Ts  fa = Ts / Tp = (1–f) + f P

La expresión que acabamos de obtener para el factor de aceleración se


conoce como ley de Gustafson, y es lineal con P, lo que asegura que se
pueden conseguir factores de aceleración elevados. Por ejemplo, como en el
caso anterior, si P = 1024 y f = 0,98, el factor de aceleración que se consigue
resulta ser fa = 1003,5.
Como comparación, la siguiente figura muestra la evolución con P del
factor de aceleración en su doble versión, para el caso f = 0,9.

40

ideal
Factor de aceleración

30

t constante

20

10

f constante
0
0 10 20 30 40

Número de procesadores

En la realidad, y para un programa dado, el factor de aceleración concreto


estará en algún punto entre esos dos extremos.

También podría gustarte