aln- matrices y máquinas

69
ALN- Matrices y Máquinas In. Co. Facultad de Ingeniería Universidad de la República

Upload: others

Post on 07-Jul-2022

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ALN- Matrices y Máquinas

ALN- Matrices y Máquinas

In. Co.Facultad de IngenieríaUniversidad de la República

Page 2: ALN- Matrices y Máquinas

Versión 1.0 2

Evaluación de desempeño Máquina de Von Neumann (simplificada) Pipeline Computadores vectoriales Encadenamiento Jerarquías de memorias

Page 3: ALN- Matrices y Máquinas

Versión 1.0 3

Evaluación de desempeño

CPU time

CPU = NI * CPI * CCT

NI: número de instrucciones

CPI: número de ciclos de reloj por instrucción

CCT: tiempo del ciclo de reloj

Page 4: ALN- Matrices y Máquinas

Versión 1.0 4

Evaluación de desempeño

MIPS (Millons of Instructions Per Seconds)

Depende del conjunto de instrucciones del equipo. En un equipo depende del problema a resolver.

610*CPI

reloj del frecuenciaMIPS

Page 5: ALN- Matrices y Máquinas

Versión 1.0 5

Evaluación de desempeño

FLOPS (Floating Point Operations per Second)

FLOPS = NFPU * FPC * CPS

NFPU: número de unidades de PF

FPC: flops por ciclo

CPS: frecuencia del reloj (ciclos por seg Hz)

Page 6: ALN- Matrices y Máquinas

Versión 1.0 6

Evaluación de desempeño

El tiempo del proceso se divide en: tiempo de usuario: Tiempo que se dedica

a operaciones a nivel de usuario. tiempo del sistema: Llamadas a sistema

(ej: operaciones de E/S)

Page 7: ALN- Matrices y Máquinas

Versión 1.0 7

Evaluación de desempeño Tiempo de CPU: tiempo en que la cpu está

ocupada en ejecutar instrucciones del proceso.

Walltime: es el tiempo real que transcurre entre un evento y otro.

Ej: Comando time (linux) Real: tiempo “reloj” entre el inicio y el fin del programa. User: tiempo de cpu en el espacio de usuario System: tiempo de cpu en el espacio de sistema Real <= User + System

Page 8: ALN- Matrices y Máquinas

Versión 1.0 8

Evaluación de desempeño

Costo por cómputoSon necesarias soluciones ingenieriles.No necesariamente la más rápida, sino un

compromiso con los costos.

Comparar desempeño no es sencilloBenchmark: Ejecución de un programa (o un

conjunto de ellos) para evaluar el desempeño relativo de algo (cpu, memoria, so, software, etc.)

Page 9: ALN- Matrices y Máquinas

Versión 1.0 9

Benchmarks Micro benchmarks

Diseñados para medir el desempeño de un código pequeño y específico o cierta feature del hardware.

Velocidad del procesador Acceso a memoria

Kernel benchmarks Conjuntos de rutinas simples Evalúan el desempeño de hardware y compiladores Ej: Livermore Loops, LINPACK…

Aplicaciones completas Ej: procesadores de textos, aplicaciones de usuario

Page 10: ALN- Matrices y Máquinas

Versión 1.0 10

Evaluación de desempeño

Resumen

No evaluar desde un solo punto de vista (velocidad del procesador, conjunto de instrucciones, cantidad de ciclos de reloj por instrucción, otros).

Page 11: ALN- Matrices y Máquinas

Versión 1.0 11

Máquina de Von Neumann

Page 12: ALN- Matrices y Máquinas

Versión 1.0 12

Máquina de Von Neumann

Obtiene la siguiente instrucción desde la

memoria según el contador de programa.

Aumenta el contador de programa.

Decodifica la instrucción mediante la

unidad de control.

Se ejecuta la instrucción.

Page 13: ALN- Matrices y Máquinas

Versión 1.0 13

Pipeline (paralelismo fino)

Una tarea se divide en sub-tareas, la

unidad funcional se divide en sub-

segmentos.

Page 14: ALN- Matrices y Máquinas

Versión 1.0 14

Pipeline

Motivación se encuentra en varias

realidades

Línea de montaje

Lavandería (Ver ppts Arquitectura 2)

Desarrollo de software

Page 15: ALN- Matrices y Máquinas

Versión 1.0 15

Pipeline básico (prefetch): Ejecución de una instrucción dividida en dos etapas:

Fetch: traer la siguiente instrucción desde la memoria Execute: ejecutar la instrucción

Cada etapa es realizada por una unidad funcional independiente

Pipeline

Page 16: ALN- Matrices y Máquinas

Versión 1.0 16

Pipeline

Fetch de una instrucción. (FI)

Decodificar instrucción. (DI)

Calcular los operandos. (CO)

Fetch de los datos. (FO)

Ejecutar instrucciones. (EI)

Escribir en la memoria. (WO)

Page 17: ALN- Matrices y Máquinas

Versión 1.0 17

Pipeline

Page 18: ALN- Matrices y Máquinas

Versión 1.0 18

Pipeline Problemas:

Llenar el pipeline

Hazards (obstáculos) Pueden impedir que la próxima instrucción se ejecute en el

ciclo correspondiente Ej:

Bifurcaciones en el código Dependencias de datos Conflictos de hardware

Es necesario detener el pipeline y a veces vaciarlo (saltos) Existen estrategias para minimizar las penalizaciones: (Ej:

estrategias predictivas)

Page 19: ALN- Matrices y Máquinas

Versión 1.0 19

Pipeline

Latencia Tiempo en procesar una tarea

ThroughputRendimiento medido, en unidades producidas

por tiempo

Page 20: ALN- Matrices y Máquinas

Versión 1.0 20

Pipeline

Pipelining no mejora la latencia de cada tarea, sino el throughput de toda la carga de trabajo

Limitado por el estado más lento Largo desbalanceado de los pasos del

pipeline reduce la aceleración Aumentar la aceleración, aumentando la

cantidad de pasos del pipeline

Page 21: ALN- Matrices y Máquinas

Versión 1.0 21

Evaluación de desempeño

Velocidad asintótica: Velocidad necesaria para procesar vectores “largos” (n-->inf).

Largo de eficiencia media: Es el largo de vector que se procesa a un medio de la velocidad asintótica.

Page 22: ALN- Matrices y Máquinas

Versión 1.0 22

Evaluación de desempeño

t1 tiempo para ejecutar un ciclo de loop ns cantidad de estados (largo del pipeline) t0 tiempo de inicialización n largo del vector a procesar

nn

ttt

s

10

Page 23: ALN- Matrices y Máquinas

Versión 1.0 23

Evaluación de desempeño

nn

tt

n

t

nr

s

10

1t

nr s

r

ntt 0

02/1 trn t

nr 2/121

Page 24: ALN- Matrices y Máquinas

Versión 1.0 24

Otras ideas

Pueden trabajar en forma paralela varias sub-unidades de proceso

Unidad de suma de PF

Unidad de multiplicación de PF

Unidad lógica

Page 25: ALN- Matrices y Máquinas

Versión 1.0 25

Instrucciones Vectoriales

Máquinas que tienen registros vectoriales. Se carga los datos en forma vectorial

Se realizan las operaciones en forma vectorial

Equipos famosos Cray (Cray 1, Cray X-MP)

Fujitsu

NEC

Page 26: ALN- Matrices y Máquinas

Versión 1.0 26

Instrucciones Vectoriales

Generalmente los equipos disponen de

compiladores que transforman

automáticamente el código.

Utilizar notación matricial al programar (por ej.

en FORTRAN).

Page 27: ALN- Matrices y Máquinas

Versión 1.0 27

Instrucciones Vectoriales

Caído en desuso, máquinas generalmente

muy caras.

Idea utilizada en otro tipo de hardware

(tarjetas de video).

Page 28: ALN- Matrices y Máquinas

Versión 1.0 28

Encadenamiento

Combinar pipelines para que el resultado de

un proceso sea directamente la entrada de

otro.

Ejemplo típico: a+bc

Page 29: ALN- Matrices y Máquinas

Versión 1.0 29

Ordenes Evaluación de desempeño Máquina de Von Neumann (simplificada) Pipeline Computadores vectoriales Jerarquías de memorias Optimización al compilar Multiplicación de matrices

Page 30: ALN- Matrices y Máquinas

Versión 1.0 30

Ordenes Tiempo de ejecución de un programa en

función de N, lo que denominaremos T(N) for (int i= 0; i < N; i++)

a = a + t[i]*v[i];

Requiere T(N)= N (suma-multiplicación)

Page 31: ALN- Matrices y Máquinas

Versión 1.0 31

Ordenes

for (int i= 0; i < N; i++)

for (int j= 0; j < N; j++)

a = a + t[i]*v[j];

Requiere T(N)= 2N

Page 32: ALN- Matrices y Máquinas

Versión 1.0 32

Ordenes for (int i= 0; i < N; i++)

for (int j= 0; j < N; j++) {

a = a + t[i]*v[j];

b = b + a*b;

}

Requiere T(N)= 22N

Page 33: ALN- Matrices y Máquinas

Versión 1.0 33

Ordenes

Si definimos (nada formal) el Orden (O()) de un algoritmo como una función tal que c*f(N) > T(N) para una constante.

En los casos anteriores:

T(N) O(N)

N N

N N22N 2N

Page 34: ALN- Matrices y Máquinas

Versión 1.0 34

Ordenes ¿Cuán útil es medir el Orden de un

algoritmo ?

Solo mide operaciones a realizar !!!!

No tiene en cuenta otros aspectos …

Patrones de acceso a memoria

Localidad espacial / temporal

Etc…

Page 35: ALN- Matrices y Máquinas

Versión 1.0 35

Ordenes Evaluación de desempeño Máquina de Von Neumann (simplificada) Pipeline Computadores vectoriales Jerarquías de memorias Optimización al compilar Multiplicación de matrices

Page 36: ALN- Matrices y Máquinas

Versión 1.0 36

Estrategias de compilación

Cada compilador dispone de diversas opciones.

Algunas opciones del Intel Fortran para Linux...

Page 37: ALN- Matrices y Máquinas

Versión 1.0 37

Estrategias de compilación

Optimización:-O1,-O2,-O3

Generación de código:−x{code}: permite generar código específico

para ejecutar en los procesadores indicados por “code”

SSE2, SSE3, SSSE3,SSE4.2,…,AVX, etc.

-xHost: generar código con el set de instrucciones más alto disponible en el host

Page 38: ALN- Matrices y Máquinas

Versión 1.0 38

Estrategias de compilación

Generación de código:−mtune=cpu: Optimizar para una cpu

específica Pentium3,pentium4,pentium-m,core2,atom,corei7 Core-avx2: procesadores que soportan Advanced

Vector Extensions 2 Otras…

Page 39: ALN- Matrices y Máquinas

Versión 1.0 39

Estrategias de compilación

Optimización Interprocedural: −ip o −ipo: −ip busca en funciones del mismo

archivo, con −ipo se realiza la búsqueda en todos los archivos del sistema.

Expansión de funciones inline. Propagación de constantes. Eliminación de código muerto. Pasaje de argumentos por registros. Sacar los códigos invariantes de los loops.

Page 40: ALN- Matrices y Máquinas

Versión 1.0 40

Estrategias de compilación

Punto Flotante:-fp-model {nombre}:

Fast, Precise, Source, Strict

-pc{32|64|80(default)} Precisión interna de la unidad de punto flotante

(FPU).

-rcd y –fp-port Controlan la utilización de redondeos y

truncamientos.

Page 41: ALN- Matrices y Máquinas

Versión 1.0 41

Estrategias de compilación

Otras -openmp: API (Application Program Interface)

OpenMP para programar “paralelismo” de

memoria compartida.

Page 42: ALN- Matrices y Máquinas

Versión 1.0 42

Estrategias de compilación

Algunas prácticas que pueden permitir al optimizador realizar su tarea de una mejor forma:

Minimizar la utilización de variables globales.

Evitar el uso de controles de flujo complejos.

No usar la instrucción cast.

Evitar las referencias indirectas.

Page 43: ALN- Matrices y Máquinas

Versión 1.0 43

Estrategias de compilación

Algunas prácticas que pueden permitir al optimizador realizar su tarea de una mejor forma:

Fetch Scheduling – Software Pipelining

for (i=4; i < N; i += 4){dot0 += x0 * y0; x0 = x[0]; y0 = y[0];dot1 += x1 * y1; x1 = x[1]; y1 = y[1];dot2 += x2 * y2; x2 = x[2]; y2 = y[2];dot3 += y3 * y3; x3 = x[3]; y3 = y[3];

}

Page 44: ALN- Matrices y Máquinas

Versión 1.0 44

Estrategias de compilación

Loop unrolling

for (i=0; i < N; i++)dot += X[i] * Y[i];

for (i=0; i < N; i += 4) {dot += X[i] * Y[i];dot += X[i+1] * Y[i+1];dot += X[i+2] * Y[i+2];dot += X[i+3] * Y[i+3];

}

Page 45: ALN- Matrices y Máquinas

Versión 1.0 45

Estrategias de compilación

Scalar expansion

sum = 0.0;Do {sum += *X;sum += X[1];sum += X[2];sum += X[3];X += 4;

}while (X != stX);

sum1 = sum2 = 0.0; sum3 = sum = 0.0;do{

sum += *X;sum1 += X[1];sum2 += X[2];sum3 += X[3];X += 4;

}while (X != stX);sum += sum1 + sum2 + sum3;

Page 46: ALN- Matrices y Máquinas

Versión 1.0 46

Ordenes Evaluación de desempeño Máquina de Von Neumann (simplificada) Pipeline Computadores vectoriales Jerarquías de memorias Optimización al compilar Multiplicación de matrices

Page 47: ALN- Matrices y Máquinas

Versión 1.0 47

Sistema

Page 48: ALN- Matrices y Máquinas

Versión 1.0 48

Memoria La velocidad de acceso a memoria aumenta menos

que la velocidad de cómputo de la CPU !!!

Page 49: ALN- Matrices y Máquinas

Versión 1.0 49

Memoria Hay distintos tipos de memorias:

Diferentes costos, tamaño y velocidad

Cuanto más grande y más lejana al procesador:

más lenta

Por qué? – Física… c = 3.0x10^8 m/s, clock = 3GHz

c/clock = 10cm/ciclo

Otros: Propiedades como capacitancia

dependen de la longitud de los cables

Page 50: ALN- Matrices y Máquinas

Versión 1.0 50

Memoria Existe una jerarquía de memorias

Page 51: ALN- Matrices y Máquinas

Versión 1.0 51

Memoria

Registros

Cache (2 niveles)

RAM

Disco

Almacenamiento

remoto

Page 52: ALN- Matrices y Máquinas

Versión 1.0 52

Memoria

Page 53: ALN- Matrices y Máquinas

Versión 1.0 53

Memoria Principio de Localidad: Los programas

tienden a acceder a datos e instrucciones cercanas a las accedidas recientemente.

Localidad temporal Si un ítem es referenciado, tenderá a ser referenciado

nuevamente a la brevedad

Localidad espacial Si un ítem es referenciado, los items con direcciones

“cercanas” tenderán a ser referenciados a la brevedad

Page 54: ALN- Matrices y Máquinas

Versión 1.0 54

Caché Memoria pequeña y rápida, entre el

procesador y la memoria principal, diseñada para aprovechar el principio de localidad.

Page 55: ALN- Matrices y Máquinas

Versión 1.0 55

Caché – Cómo funciona? CPU requiere el contenido de una posición de

memoria:Se busca en el cache

Si está (caché hit), se lee del cache (rápido) Si no está (caché miss), se copia el bloque

requerido desde la memoria principal al cache

Luego se entrega desde el cache a la CPU El cache incluye “tags” (etiquetas) para

identificar que bloque de memoria principal está en cada línea

Page 56: ALN- Matrices y Máquinas

Versión 1.0 56

Caché – Por qué puede ocurrir un caché miss?

Compulsivo ( Obligatorio ) (arranque, primera referencia): primer acceso a un bloque Es un “hecho de la vida”: no se puede hacer nada para evitarlo Nota: Si se van a ejecutar “millones” de instrucciones, los Compulsory

Misses son insignificantes. Conflicto (colisión):

Múltiples zonas de memoria mapeadas a la misma ubicación del cache. Solución 1: incrementar tamaño del cache Solución 2: incrementar la asociatividad

Capacidad: El cache no puede contener todos los bloques accedidos por el

programa Solución: incrementar el tamaño del cache

Coherencia (Invalidez): otros procesos (ej. E/S) actualizan la memoria

Page 57: ALN- Matrices y Máquinas

Versión 1.0 57

Estrategias para aprovechar la caché:Mantener los datos más recientemente

accedidos “cercanos” al procesador

(Localidad Temporal)

Mover bloques de palabras contiguas al nivel

superior (Localidad Espacial)

Al trabajar con matrices es Importante la

localidad de espacial!!!

Caché

Page 58: ALN- Matrices y Máquinas

Versión 1.0 58

Organización de la memoria

Memoria Caché - Mejorar desempeño

Reducir el miss rate

Reducir la penalización por miss

Reducir el tiempo de hit en la caché

Page 59: ALN- Matrices y Máquinas

Versión 1.0 59

Organización de la memoria

Memoria virtualLa memoria física es limitada, se utiliza el

disco para tener un espacio de memoria mayor.

Page Fault – acceso a un dato (página) que

no está cargado en memoria física.

Page 60: ALN- Matrices y Máquinas

Versión 1.0 60

Memoria

Algunos aspectos a tener en cuenta al efectuar cálculos matriciales

Matrices completas vs dispersas

Lenguaje de programación en el que se está

trabajando En C se almacena por filas.

En Fortran se almacena por columnas.

Page 61: ALN- Matrices y Máquinas

Versión 1.0 61

Recorrida de matrices

for (int i= 0; i < N; i++) for (int j= 0; j < N; j++) a = a + A(i,j);

for (int j= 0; i < N; i++) for (int i= 0; j < N; j++) a = a + A(i,j);

Page 62: ALN- Matrices y Máquinas

Versión 1.0 62

Caso de estudio 1

Evaluar el problema anterior en Fortran o C (sin optimizador de código) para matrices de 512 y 1024

Page 63: ALN- Matrices y Máquinas

Versión 1.0 63

Caso de estudio 2

Multiplicación de matrices…..

Estrategia estándar

Strassen

Coppersmith y Winograd

Page 64: ALN- Matrices y Máquinas

Versión 1.0 64

Multiplicación de matrices

Estrategia estándar

.

For i = 1:nFor j = 1: n

For k = 1:n C(i,j) = C(i,j) + A(i,k)*B(k,j)

3 nOrden

Page 65: ALN- Matrices y Máquinas

Versión 1.0 65

Cómo podemos mejorar?

Strassen

Page 66: ALN- Matrices y Máquinas

Versión 1.0 66

Multiplicación de matrices

Cada paso recursivo:

7 multiplicaciones

18 adiciones ó restas

807,27log Orden 2 nn

Page 67: ALN- Matrices y Máquinas

Versión 1.0 67

Multiplicación de matrices

Coppersmith

y Winograd

Page 68: ALN- Matrices y Máquinas

Versión 1.0 68

Multiplicación de matrices

Cada paso recursivo:

7 “multiplicaciones”

14 adiciones ó restas

376,2Orden n

Page 69: ALN- Matrices y Máquinas

Versión 1.0 69

Caso de estudio

Mejoramos el Orden ….

Como podemos mejorar otras características del algoritmo estándar ?!Reordenar loopsTrabajando por bloques(Reducir caché misses!!!)