Tema 3 clase 4.pptx

Anuncio
F
A
C
U
L
T
A
D
D
E
U
C
V
C
I
E
N
C
I
A
S
OPTIMIZACIÓN
DEL
RENDIMIENTO
DE
LOS PROGRAMAS
Tema 3 – Clases 4
PROCESADOR SUPERESCALAR
¢  Un
procesador superescalar puede emitir y
ejecutar múltiples instrucciones en un ciclo.
¢  Las
instrucciones se extraen de un flujo
secuencial de instrucciones y son
generalmente programadas dinámicamente.
2
LA
MEJORA DEL
PARALELISMO
Si las cosas no se pueden hacer más deprisa,
entonces hacer más cosas a la vez
¢ 
Paralelismo:
Conjunto de tareas independientes entre sí
que son susceptibles de ser llevadas a cabo
de forma simultánea.
3
LA
MEJORA DEL
PARALELISMO
Paralelismo implicito:
¢  Se usa un lenguaje de programación secuencial
y el compilador inserta las instrucciones
necesarias para ejecutar el programa en un
computador paralelo
¢  El compilador tiene que realizar y comprender
las dependencias para asegurar un mapeo
eficiente en el computador paralelo
¢  Pequeño aprovechamiento (depende de la
eficacia del computador)
¢  El trabajo del programador es fácil
¢  Aprovecha todo el código secuencial existente
4
LA
MEJORA DEL
PARALELISMO
Paralelismo explícito:
¢  El algoritmo paralelo dede especificar
explíctamente cómo cooperan los
procesadores para resolver un problema
especifico
¢  La tarea del compilador es sencilla, en cambio
la del programador es bastante difícial
¢  Mejor aprovechamiento de las posibilidades
paralelas de la máquina
¢  Más trabajo para el programador
5
MULTIPLES
ACUMULADORES
¢  No
podemos calcular el nuevo valor de una
variable que estamos usando como
acumulador si todavia no hemos realizado el
calculo
— 
Ej. En un bucle tenemos un una variable i++
¢  En
una combinación de operaciones que son
asociativas y commutativas tal como la suma o
multiplicación de enteros. Podemos mejorar el
desempeño dividiendo la operación es dos
más partes.
6
MULTIPLES ACUMULADORES
Ejemplo:
¢  Pn es el resultado de la multiplicaión de los
elementos a0, a1, …, an
¢  ¿Qué
podemos hacer para mejorar esta
operación?
¢  Si
n es par podemos Pn = PE x PO
¢  Si
n es impar podemos
7
OPTIMIZACIÓN (REVISANDO
{
}
EL EJEMPLO)
/* Implementation with maximum use of data abstraction */
void combine1(vec_ptr v, data_t *dest)
long int I;
*dest = IDENT;
for (i = 0; i < vec_length(v); i++) {
data_t val;
get_vec_element(v, i, &val);
*dest = *dest OP val;
}
¢ 
Ejemplo de programa a optimizar, dentro del programa se definen las
siguientes constantes
¢ 
Para la suma
— 
— 
¢ 
#define IDENT 0
#define OP +
Para la multiplicaión
— 
— 
#define IDENT 1
#define OP *
8
DESENROLLADO
DE BUCLE
PARALELO
¢  En este caso
/* Unroll loop by 2 */ "
void combine5(vec_ptr v, data_t *dest) " tenemos solo el
{ "
long int i; "
desenrollado de
long int length = vec_length(v); "
bucle usando un
long int limit = length-1; "
data_t *data = get_vec_start(v); "
“acc”
data_t acc = IDENT; "
"
/* Combine 2 elements at a time */ "
for(i=0;i<limit;i+=2){ "
"acc = (acc OP data[i]) OP data[i+1]; "
} "
"
/* Finish any remaining elements */ "
for (; i < length; i++) { "
"acc = acc OP data[i]; "
} "
*dest = acc; "
} "
9
DESENROLLADO
DE BUCLE
PARALELO
¢ 
/* Unroll loop by 2, 2-way parallelism
*/ "
void combine6(vec_ptr v, data_t *dest) "
{ "
long int i; "
long int length = vec_length(v); "
long int limit = length-1; "
data_t *data = get_vec_start(v); "
data_t acc0 = IDENT; "
data_t acc1 = IDENT; "
"
/* Combine 2 elements at a time */ "
for(i=0;i<limit;i+=2){ "
"acc0 = acc0 OP data[i]; "
"acc1 = acc1 OP data[i+1]; "
} "
"
/* Finish any remaining elements */ "
for (; i < length; i++) { "
"acc0 = acc0 OP data[i]; "
} "
*dest = acc0 OP acc1; "
} "
En este caso
tenemos el
desenrollado de
bucle y estamos
usando dos
“acc”
10
REASOCIACIÓN
acc = (acc OP data[i]) OP data[i+1]; "
acc = acc OP (data[i] OP data[i+1]); "
¢  Podemos
con solo cambiar el orden de los
parentesis mejorar el desempeño.
11
REASOCIACIÓN
/* Change associativity of combining
operation */ "
void combine7(vec_ptr v, data_t *dest) "
{ "
long int i; "
long int length = vec_length(v); "
long int limit = length-1; "
data_t *data = get_vec_start(v); "
data_t acc = IDENT; "
"
/* Combine 2 elements at a time */ "
for(i=0;i<limit;i+=2){ "
"acc = acc OP (data[i] OP data[i+1]); "
} "
"
/* Finish any remaining elements */ "
for (; i < length; i++) { "
"acc = acc OP data[i]; "
} "
*dest = acc; "
} "
¢  En
este caso
desplazamos los
parentesis
dentro del bucle
y asi
combinamos los
vectores y el
resultado
12
RESUMEN
Funcion
Pag. Metodo
Int +
Int *
F+
F* sp F* dp
combine1 485
-01
12,00 12,00 12,00 12,01 13,00
combine2 486
Move vec_length
8,03
8,09
10,09 11,09 12,08
combine3 491
Direct data access 6,01
8,01
10,01 11,01 12,02
combine4 493
Accumulate in
temporary
2,00
3,00
3,00
4,00
5,00
combine5 510
Unroll by x2
2,00
1,50
3,00
4,00
5,00
combine6 515
Unroll by x2,
parallelism x2
1,50
1,50
1,50
2,00
2,50
13
TAXONOMÍA
DE
FLYNN
¢  Es
una clasificación de arquitecturas de
computadoras propuesta por Michael J. Flynn
en 1972.
¢  Las cuatro clasificaciones definidas por Flynn
se basan en el número de instrucciones
concurrentes (control) y en los flujos de datos
disponibles en la arquitectura.
14
TAXONOMÍA
DE
FLYNN
¢  SISD
(Single Instruction, Single Data):
Un flujo de instrucciones único trabaja sobre
flujo de datos único. Computador secuencial
que no explota el paralelismo en las
instrucciones ni en flujos de datos. Ejemplos
de arquitecturas SISD son las máquinas con
una arquitectura clásica monoprocesador,
como el PC o los antiguos mainframe.
15
TAXONOMÍA
DE
FLYNN
¢  SIMD
(Single Instruction, Multiple Data):
Un flujo de instrucciones único trabaja sobre
un flujo de datos múltiple. 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.
16
TAXONOMÍA
DE
FLYNN
¢  MISD
(Multiple Instruction, Single Data):
Un flujo de instrucciones múltiple trabaja
sobre un flujo de datos único. Es 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.
17
TAXONOMÍA
DE
FLYNN
¢  MIMD
(Multiple Instruction, Multiple Data):
Un flujo de instrucciones múltiple trabaja
sobre un flujo de datos múltiple
(multiprocesadores). Es decir, varios
procesadores autónomos que ejecutan
simultáneamente instrucciones diferentes
sobre datos diferentes.
18
PARALELISMO
DE
DATOS
¢  Aplicaciones
en las que los datos están sujetos
a idéntico procesamiento
¢  Es más apropiado para ejecutar en máquinas
SIMD
¢  También se pueden ejecutar en computadores
MIMD. Se requiere sincronización global
después de cada instrucción, lo que resulta en
un código ineficiente.
¢  Los lenguajes de paralelismo de datos ofrecen
contrucciones de alto nivel para compartir
infromación y manejar concurrencia.
Programas más fáciles de escribir y
comprender. Aunque el código generado por
estas construcciones no es tan eficiente como
el obtenido usando primitivas debajo nivel.
19
PARALELISMO
DE INSTRUCCIONES
¢  Ejecución
simultánea de cadenas de
instrucciones diferentes. Las instrucciones se
pueden aplicar sobre la misma cadena de
datos aunque normalmente se aplican a
cadenas de datos diferentes.
¢  Adecuados para mapear en MIMD ya que el
paralelismo de instrucciones requiere
múltiples cadenas de instrucciones
20
FACTORES
LIMITANTES
¢  Los
beneficios que obtenemos al usar
paralelismo de bucles son limitados por la
cantidad de registros que tenemos.
¢  Si
se excede la cantidad de registros a utilizar,
el compilador recurre temporalmente a la pila.
Esto puede bajar significativamente el
desempeño.
21
SALTOS
¢  La
predicción de saltos trae riegos.
¢  Las
instrucciones se ejecutan siguiendo una
simple secuencia cuando se encuntra un salto
el procesador debera adivinar que camino
debe escoger.
22
RECOMENDACIÓN
¢  Revisar
la Bibliografía “Computer Systems A
Programmer’s Perspective” de “Bryant - O’Hallaron ”
¢  Revisar
el sitio web de la materia para ver las
actualizaciones publicadas, clases y la planificación
establecida.
http://oeci.servehttp.com/
¢  Repasar
la información suministrada en clase antes
de asistir a la clase de práctica.
23
Descargar