La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

ARQUITECTURA DE ORDENADORES 1 Procesadores Vectoriales Orientados a ejecutar eficientemente algoritmos numéricos sobre estructuras regulares de un gran.

Presentaciones similares


Presentación del tema: "ARQUITECTURA DE ORDENADORES 1 Procesadores Vectoriales Orientados a ejecutar eficientemente algoritmos numéricos sobre estructuras regulares de un gran."— Transcripción de la presentación:

1 ARQUITECTURA DE ORDENADORES 1 Procesadores Vectoriales Orientados a ejecutar eficientemente algoritmos numéricos sobre estructuras regulares de un gran número de elementos. Incluyen en su repertorio de instruciones, instrucciones capaces de procesar vectores aparece un nuevo tipo de datos Vector. Cada vez que una instrucción es ejecutada, se ejecuta idealmente sobre todos los componentes del Vector. Las operaciones sobre vectores pueden realizarse más rápido que una secuencia de operaciones escalares sobre el mismo número de elementos Es necesario realizar una selección de aplicaciones, datos y compiladores

2 ARQUITECTURA DE ORDENADORES 2 Introducción: características de las operaciones vectoriales El enfoque tradicional = explotar el paralelismo a nivel de instrucciones (ILP). (Ejecución segmentada, superescalar, …) Límites al ILP: –Rendimiento (puede mejorarse aumentando la profundidad de los pipes. Problema: mayor número de etapas = más dependencias. –Se emplea tiempo en adquirir y decodificar las instrucciones

3 ARQUITECTURA DE ORDENADORES 3 Introducción: características de las operaciones vectoriales Secuencia de cálculos independientes: –Ausencia de dependencias (determinado en tiempo de compilación o por el programador) Alto contenido semánticos. (Se entiende mejor el programa) Patrón de acceso a memoria conocido. –Elementos adyacentes en memoria = bancos entrelazados –Se puede ocultar la alta latencia de acceder a memoria versus caché.

4 ARQUITECTURA DE ORDENADORES 4 Introducción: características de las operaciones vectoriales

5 ARQUITECTURA DE ORDENADORES 5

6 6

7 7 Introducción: características de las operaciones vectoriales Idea básica: introducir operaciones vectoriales en el lenguaje máquina Objetivo: sintonizar la arquitectura con: –La estructura de los cálculos –La estructura de los accesos a memoria

8 ARQUITECTURA DE ORDENADORES 8 Tipos de Proc. Vectoriales Segmentados: –CDC STAR 100 y TI ASC (1972) –Cray-1 (1976) En array (procesamiento simultáneo de varias componentes mediante la replicación de unidades de procesamiento) –Unger (1958) –Illiac IV

9 ARQUITECTURA DE ORDENADORES 9 Tipos de Proc. Vectoriales Extensiones multimedia de procesadores de propósito general (procesamiento de varios datos pequeños, empaquetados en un registro, mediante la división de las unidades funcionales en sub-unidades independientes). –Tipos de datos pequeños: pixeles (8 bits), audio (16 bits), … –Se empaquetan datos y se opera con ellos formando estructuras de tipo vectorial –Cómputo intensivo 3D –Streaming –INTEL (MMX),MOTOROLA(AltiVec),AMD(32Now),Sun UltraSparc (VIS), …

10 ARQUITECTURA DE ORDENADORES 10 Arquitectura Básica Típicamente consta de una unidad escalar de proceso y una unidad vectorial. Dos tipos fundamentales: Memoria - Memoria. Todas las operaciones vectoriales son entre memoria. Gama CDC: Cyber205, ETA10... Vector - Registro. Todas las operaciones vectoriales – excepto load y store – se realizan entre registros de vectores. Es el modelo utilizado actualmente. Gama Cray: 1, X-MP, Y-MP, C90, J90, T90, SV1, SV2. Supercomputadores japoneses: Hitachi, NEC, Fujitsu VPP

11 ARQUITECTURA DE ORDENADORES 11 ESQUEMA GENERAL DE UN PROCESADOR VECTORIAL Controlador de memoria y generador de direcciones Unidades Aritméticas Segmentadas Memoria Local (Registros) Procesador Escalar Controlador Vectorial Datos Programa Parámetros de Direccionamiento Parámetros y estado Control y estado Datos

12 ARQUITECTURA DE ORDENADORES 12

13 ARQUITECTURA DE ORDENADORES 13

14 ARQUITECTURA DE ORDENADORES 14

15 ARQUITECTURA DE ORDENADORES 15

16 ARQUITECTURA DE ORDENADORES 16

17 ARQUITECTURA DE ORDENADORES 17

18 ARQUITECTURA DE ORDENADORES 18

19 ARQUITECTURA DE ORDENADORES 19 Rendimiento

20 ARQUITECTURA DE ORDENADORES 20 Rendimiento

21 ARQUITECTURA DE ORDENADORES 21 Propiedades de los Procesadores Vectoriales La computación de cada resultado es independiente de la computación de los resultados previos. Una simple instrucción vectorial especifica una gran cantidad de trabajo. Las instrucciones vectoriales que acceden a memoria tienen un patrón de acceso a memoria conocido. Al sustituir un bucle entero por una única operación vectorial, desaparecen las dependencias de control.

22 ARQUITECTURA DE ORDENADORES 22 Funcionamiento Segmentado

23 ARQUITECTURA DE ORDENADORES 23 Funcionamiento Segmentado

24 ARQUITECTURA DE ORDENADORES 24 Funcionamiento Segmentado Algunas arquitecturas vectoriales proporcionan mayor eficiencia al permitir que la salida de un pipeline se pueda encadenar con la entrada de otro pipeline Encadenamiento elimina la necesidad de almacenar el resultado del primer pipeline antes de enviarlo al segundo

25 ARQUITECTURA DE ORDENADORES 25 OPERACIONES BÁSICAS Hay más tipos de datos (vectores) aparecen más operaciones. Las operaciones se pueden clasificar en: –V V –V S –V op V V –V op S V –V op V S

26 ARQUITECTURA DE ORDENADORES 26 EJEMPLOS DE OPERACIONES SOBRE VECTORES Suma VectorialA = B + C Suma Escalar Producto VectorialA = B C Producto Escalar Mover Vectores Máximo de un Vectora = max(B(i))i = 1, 2,..., n Operaciones LógicasA(i) = B(i) and C(i)i = 1, 2,..., n Comparar VectoresA(i) = 1 si B(i) > C(i) i = 1, 2,..., n Producto de un Escalar por un VectorA = k ·B

27 ARQUITECTURA DE ORDENADORES 27 Repertorio de instrucciones DLXV

28 ARQUITECTURA DE ORDENADORES 28 Repertorio de instrucciones DLXV

29 ARQUITECTURA DE ORDENADORES 29 REQUERIMIENTO BÁSICO DE LA EJECUCIÓN VECTORIAL El resultado debe ser idéntico que si el cálculo se resolviera en un computador escalar. Ejemplo:A[i] = B[i] + C[i]; B[i] =2 * A[i+1]; i A B C

30 ARQUITECTURA DE ORDENADORES 30 Ejecución Secuencial A(1) = B(1) + C(1) = = 30 B(1) = 2 * A(2) = 2 * 6 = 12 A(2) = B(2) + C(2) = = 32 B(2) = 2 * A(3) = 2 * 7 = Ejecución Vectorial A(1:N) = B(1:N) + C(1:N) B(1:N) = 2 * A(2:N+1) A(1) = B(1) + C(1) = = 30 A(2) = B(2) + C(2) = = B(1) = 2 * A(2) = 2 * 32 = 64 B(2) = 2 * A(3) = 2 * 34 = 68 Diferentes

31 ARQUITECTURA DE ORDENADORES 31 Memoria Entrelazada Se organizan los chips en bancos Se intenta aprovechar el ancho de banda de todos, enviando a todos la misma dirección de memoria (para acceder en paralelo) Cada banco tiene líneas de dirección y de datos independientes para realizar accesos independientes Normalmente no son líneas dedicadas sino una red de conmutación multietapa

32 ARQUITECTURA DE ORDENADORES 32 MEMORIA ENTRELAZADA Dividir la Mp en módulos independientes de acceso en paralelo al objeto de: –Reducir el tiempo de acceso efectivo a Mp. –Aminorar el efecto de cuello de botella que se produce en el acceso a Mp por parte de los elementos que la comporten. ¿Cómo se distribuyen las direcciones entre los módulos? –Entrelazamiento de orden alto. Cada módulo contiene un conjunto de direcciones consecutivas. –Entrelazamiento de orden bajo. Direcciones consecutivas en módulos consecutivos.

33 ARQUITECTURA DE ORDENADORES 33 ENTRELAZAMIENTO DE ORDEN ALTO Sea Mp de 2 n palabras. Se divide en 2 m módulos de 2 n-m palabras cada uno. Cada módulo alberga 2 n-m palabras consecutivas. El módulo i contiene las direcciones [i*2 n-m,..., (i+1) * 2 n-m - 1]

34 ARQUITECTURA DE ORDENADORES 34 Direccionamiento: –Los m bits más significativos se usan para seleccionar el módulo. –Los n-m bits menos significativos se usan para direccionar el módulo. n-m MóduloDirección dentro del módulo n –m bitsm bits Módulo 0 RDiRDa Módulo i RDiRDa Módulo 2 m -1 RDiRDa Decodificador 2 m-1... i... 0 m RDi: Registro de Dirección RDa: Registro de Datos

35 ARQUITECTURA DE ORDENADORES 35 Ventajas: –Fácil expansión de la memoria (más M más módulos). –Fiabilidad. Un error en un módulo no provoca un gran fraccionamiento de la memoria. Inconveniente: –Localidad Espacial. Conflictos de acceso a un mismo módulo.

36 ARQUITECTURA DE ORDENADORES 36 ENTRELAZAMIENTO DE ORDEN BAJO Sea Mp de 2 n palabras. Se divide en 2 m módulos de 2 n–m palabras cada uno. El módulo i contiene las direcciones: i + K * 2 m, K = 0, 1, 2,..., 2 n-m - 1

37 ARQUITECTURA DE ORDENADORES 37 Direccionamiento: MóduloDirección dentro del módulo n –m bitsm bits Módulo 0 RDiRDa Módulo i RDiRDa Módulo 2 m -1 RDiRDa Decodificador 2 m-1... i... 0 m RDi: Registro de Dirección RDa: Registro de Datos n-m –Los m bits menos significativos se usan para seleccionar el módulo. –Los n-m bits más significativos se usan para direccionar el módulo. –Direcciones consecutivas están en módulos consecutivos.

38 ARQUITECTURA DE ORDENADORES 38 Ventajas e Inconvenientes: –Los contrarios del enfoque anterior. Se podría adoptar una política mixta: –Se puede acceder a palabras consecutivas tanto en la parte alta como en la baja. –Combina las ventajas e inconvenientes de ambos modos de direccionamiento (alto y bajo).

39 ARQUITECTURA DE ORDENADORES 39 Ejemplo Nº de bits de dirección en módulo (n-m) = 3 Nº de bits de selección del módulo (m) = 2 AOrden Alto Mod Mod Mod Mod BOrden Bajo Mod Mod Mod Mod X X X X mn - m X X X X mn - m

40 ARQUITECTURA DE ORDENADORES 40 CMixto Mod Mod Mod Mod XX X XX n - m m

41 ARQUITECTURA DE ORDENADORES 41 TIEMPO DE EJECUCIÓN El tiempo de ejecución de una secuencia de operaciones vectoriales depende principalmente de tres factores: La longitud de los vectores sobre los que se opera. Dependencias Estructurales entre las operaciones. Dependencias de datos. Con unidades segmentadas, se produce un resultado por ciclo de reloj; el tiempo que se tarda en ejecutar una instrucción sobre un vector es aproximadamente igual a la longitud del vector.

42 ARQUITECTURA DE ORDENADORES 42 Convoy. Conjunto de instrucciones vectoriales que podrían potencialmente empezar su ejecución, juntas en un período de reloj. Las instrucciones en un convoy no deben contener ninguna dependencia estructural o de datos. Chime. Medida aproximada del tiempo de ejecución para una secuencia vectorial. Es independiente de la longitud del vector. Se ignoran todas las cargas adicionales (overheads)

43 ARQUITECTURA DE ORDENADORES 43 Tiempo de Arranque. Tiempo transcurrido hasta que se llenan las unidades funcionales segmentadas. Depende de la profundidad del pipeline. Introduce un retardo entre los convoys, ya que estos no se pueden solapar. El tiempo para completar un convoy está determinado por la longitud del vector y el tiempo de arranque. T. de ej. de un convoy = long. Vector + tiempo de arranque La sobrecarga debida al tiempo de arranque de un vector no es muy significativa cuando se trabaja con vectores largos.

44 ARQUITECTURA DE ORDENADORES 44 LONGITUD DEL VECTOR Una máquina con registros vectoriales tiene una longitud natural determinada por el número de elementos de cada registro vectorial. La longitud de una operación vectorial particular, es con frecuencia desconocida en tiempo de compilación e incluso en tiempo de ejecución. La solución es crear un registro de longitud vectorial (VLR), el cual controla la longitud de cualquier operación vectorial. Determina el número de componentes sobre las que actúa la operación vectorial. MVL = Valor Máximo. ¿Si n < MVL? Cargar registro VLR = mtc1 VLR,r1 y ejecutar el resto de operaciones vectoriales. ¿Qué sucede si n > MVL? seccionamiento (strip mining).

45 ARQUITECTURA DE ORDENADORES 45 STRIP MINING Seccionamiento. Generación de código tal que cada operación vectorial se realiza para un tamaño MVL Al coste de arranque hay que añadir los costes de seccionamiento. n / MVL operaciones de longitud MVL. Primer bucle realiza la parte corta n mod MVL y el resto VL = MVL

46 ARQUITECTURA DE ORDENADORES 46 STRIP MINING

47 ARQUITECTURA DE ORDENADORES 47 STRIP MINING LDF0,a ADDIR4,Rx,#512; última dirección a cargar LDF2,0(Rx); carga X(i) MULTDF2,F0, F2; a· X(i) LDF4, 0(Ry); carga Y(i) ADDDF4,F2,F4; a· X(i) + Y(i) SDF4, 0(Ry); almacena en Y(i) ADDIRx,Rx,#8; incrementa índice a X ADDI Ry,Ry,#8; incrementa índice a Y SUB R20,R4,Rx; calcula límite BNZR20, loop; comprobación si se ha terminado LDF0,a; carga escalar a LVV1,Rx; carga vectorX MULTSVV2,F0,V1; multiplicación vector-escalar LVV3,Ry; carga vector Y ADDVV4,V2,V3; suma SVRy,V4; almacena el resultado

48 ARQUITECTURA DE ORDENADORES 48 STRIP MINING

49 ARQUITECTURA DE ORDENADORES 49 RENDIMIENTO DE UN BUCLE VECTORIZADO Depende de 3 factores: –El tiempo de cada operación vectorial en el bucle para procesar un elemento, ignorando los costes de arranque: T elemento. –El coste adicional de las instrucciones vectoriales para cada bloque seccionado: T bucle + T arranque. –Los costes adicionales del cálculo de las direcciones de comienzo y escritura del vector de control: T base. El tiempo total de ejecución para una secuencia vectorial operando sobre un vector de longitud n es:

50 ARQUITECTURA DE ORDENADORES 50 SEPARACIÓN ENTRE ELEMENTOS DE UN VECTOR La posición en memoria de los elementos adyacentes de un vector puede no estar localizada secuencialmente en memoria. Ej:A(i,j) = A(i,j) + B(i,k) · C(k,j) La distancia entre elementos consecutivos que van a formar un vector se denomina separación (stride). Los procesadores vectoriales tienen la capacidad de acceder a elementos cuyo acceso en memoria no es secuencial y reconfigurarlos en una estructura de datos densa (compacta). La distancia entre elementos depende del tamaño de los elementos y de la longitud de los vectores; se calcula de forma dinámica, ya que el tamaño de los vectores puede no saberse en tiempo de compilación o puede variar a lo largo de la ejecución.

51 ARQUITECTURA DE ORDENADORES 51 La dirección de comienzo del vector y la separación se pueden guardar en un registro de propósito general. Al introducir separaciones no unitarias es posible que se realicen accesos a un mismo banco a una frecuencia mayor que el tiempo de acceso a memoria conflicto del banco de memoria. Los conflictos de bancos de memoria suponen que cada carga necesita un mayor tiempo de acceso a memoria. Los conflictos del banco de memoria se presentarán si:

52 ARQUITECTURA DE ORDENADORES 52 TÉCNICAS DE VECTORIZACIÓN Objetivo: Aprovechar el hardware vectorial disponible con el fin de acelerar (optimizar) la ejecución de secuencias vectorizables. Dos Aproximaciones: –Desarrollo de lenguajes (o extensiones a los lenguajes existentes) que pueden expresar el paralelismo inherente en el algoritmo. –Desarrollo de compiladores que reconozcan las porciones de código secuencial y las vectoricen. Vectorizar: Indentificar las construcciones vectorizables y sustituirlas por el conjunto de instrucciones vectoriales equivalentes determinar las dependencias entre operandos del bucle.

53 ARQUITECTURA DE ORDENADORES 53 El compilador debe poder reconocer que un bucle (o parte) es vectorizable y generar el código apropiado. Ejemplo: for (i = 0; i < 100; i++) { A[i+1] = A[i] + B[i]; // S1 B[i+1] = B[i] + A[i+1];// S2 } Posibles tipos de Dependencias: –S1 utiliza un valor calculado por S1 en una iteración anterior. –S1 utiliza un valor calculado por S2 en una iteración anterior. –S2 utiliza un valor calculado por S1 en la misma iteración.

54 ARQUITECTURA DE ORDENADORES 54 Si las operaciones están segmentadas (latencia grande) puede ocurrir que una iteración anterior no se complete antes de que empiece la iteración posterior (dependencias para los dos primeros casos) la vectorización del bucle introduce un riesgo LDE (lectura después de escritura). Riesgo LDE bucle no vectorizable el compilador no genera instrucciones vectoriales para este código. El tercer caso puede ser detectado por el Hw normal de detección de riesgos puede vectorizarse. Las dependencias de las dos primeras situaciones se denominan dependencias entre iteraciones del bucle (loop-carried dependences).

55 ARQUITECTURA DE ORDENADORES 55 La primera tarea del compilador es determinar si en el cuerpo del bucle hay dependencias de iteración (algoritmo de análisis de dependencias). Es un análisis complejo. Ejemplo: for (0 = 1; i < 100; i++) { A[i] = B[i] + C[i]; D[i] = A[i] + E[i]; } Si los arrays A, B, C, D y E son diferentes entonces no pueden existir dependencias entre iteraciones del bucle. Existen dependencias entre las dos sentencias para el vector A.

56 ARQUITECTURA DE ORDENADORES 56 Si el mismo vector es fuente y destino, puede haber dependencias arrastradas si el valor de dicho vector depende del valor calculado en una iteración anterior recurrencia. Ejemplo: for (i = 0; i < 100; i++) { Y[i] = a ·X[i] + Y[i]; } for (i =1; i < 100; i++) { Y[i] = Y[i-1] + Y[i]; } Sin dependencias arrastradas Con dependencias arrastradas: recurrencia

57 ARQUITECTURA DE ORDENADORES 57 DETECCIÓN DE DEPENDENCIAS Sea i el índice de la iteración (de m a n); a · i + b elemento del array escrito. Existe dependencia al acceder al elemento c · i + d si se mantienen dos condiciones: –Hay dos índices de iteración, j y k dentro de los límites del bucle. –El bucle almacena un elemento del array indexado por a · j + b; posteriormente busca ese mismo elemento del array indexado por c · k + d. Esto es a · j + b = c · k + d. Un test sencillo para detectar dependencias es el máximo común divisor (GCD). Si existe una dependencia entre iteraciones del bucle, entonces GCD(c,a) debe dividir a (d-b). Puede detectar dependencias falsas (no existentes).

58 ARQUITECTURA DE ORDENADORES 58 Una dependencia verdadera de datos surge de un riesgo LDE. También hay dependencias correspondientes a riesgos EDL (escrituras después de lectura), antidependencias; y a riesgos EDE (escritura después de escritura), dependencias de salida. Antidependencias y dependencias de salida, no son verdaderas dependencias de datos. Se pueden eliminar renombrando los registros. El compilador debe generar código de seccionamiento y asignara los registros vectoriales. La asignación eficiente de los registros vectoriales es una tarea muy importante y difícil.

59 ARQUITECTURA DE ORDENADORES 59 Ejemplo: for (i = 0; i < 100; i++) { Y[i] = X [i] / s; X [i] = X [i] + s; Z [i] = Y [i] + s; Y [i] = s - Y [i]; } for (i = 0; i < 100; i++) { Y renombrado a TT [i] = X [i] / s; X renombrado a X1X1[i] = X [i] + s; Z [i] = T [i] + s; Y [i] = s - T [i]; } antidependencia Dependencia de salida

60 ARQUITECTURA DE ORDENADORES 60 TÉCNICAS DE MEJORA DEL RENDIMIENTO VECTORIAL ENCADENAMIENTO (chaining) Ejemplo: MULTVV1, V2, V3 ADDVV4, V1, V5 Debido a las dependencias, MULTV debe finalizar antes de que ADDV pueda comenzar. El tiempo en el cual estas instrucciones se ejecutan es, por tanto: T elemento · Longitud del vector + T arranqueADDV + T detención + T arranqueMULTV = 2 ·Longitud del vector = 2 ·Longitud del vector + 17

61 ARQUITECTURA DE ORDENADORES 61 Para evitar que ADDV tenga que esperar encadenamiento (chaining). Es un forwarding (adelantamiento) sobre los elementos de los vectores entre los que existe dependencia, hacia la siguiente unidad funcional que tiene que operar con ellos. Las operaciones vectoriales no se tratan como una única entidad, sino como un conjunto de resultados individuales (componentes del vector). El encadenamiento permite que una operación vectorial comience tan pronto como los elementos individuales estén disponibles. El encadenamiento permite que las operaciones se ejecuten en paralelo sobre diferentes elementos del vector (aun existiendo dependencias).

62 ARQUITECTURA DE ORDENADORES 62 Ejemplo: El tiempo total de ejecución para la secuencia anterior se convierte en: Longitud del vector + T arranqueADDV + T arranqueMULTV Para vectores de longitud 64, el tiempo de ejecución de la versión encadenada y de la no encadenada son por tanto: T no encadenada 7464 (MULTV)664 (ADDV) = 145 T encadenada 764 (MULTV) 664 (ADDV) = 77

63 ARQUITECTURA DE ORDENADORES 63 SENTENCIAS CONDICIONALES La aparición de una sentencia condicional en un bucle impide la paralelización de éste (introduce dependencias de control en el bucle). Ejemplo: for (i = 0; i < 64; i++) { if ( A[i] != 0 ) { A[i] = A[i] - B[i]; } El bucle interior se ejecuta para las iteraciones donde A[i] 0.

64 ARQUITECTURA DE ORDENADORES 64 Para solucionarlo: Control de máscara vectorial. Se crea un registro de máscara vectorial donde se indica (con 1) los componentes del vector sobre los cuales hay que realizar la próxima operación. En la siguiente operación se limpia la máscara del vector (todos sus componentes a 1), así se efectúa sobre todas las componentes del vector. Desventajas: –Las operaciones vectoriales con máscara necesitan más tiempo para ejecutarse (comprobar la máscara y marcar los elementos que la satisfacen) aunque no se satisfaga la condición. –En algunas máquinas la máscara sólo desactiva el almacenamiento, pero la operación se sigue realizando pueden aparecen excepciones de punto flotante falsas.

65 ARQUITECTURA DE ORDENADORES 65 Incluso con un número significativo de 0s en la máscara es más rentable utilizar la vectorización. MATRICES DISPERSAS (ESPARCIDAS) Sus componentes están dispersos por la memoria. Ejemplo: for (i = 0; i < 100; i++) { A[K [i]] = A[K[i]] + C[M[i]]; } Los vectores índice K y M (punteros a los elementos) designan el desplazamiento de los elementos de A y C por la memoria.

66 ARQUITECTURA DE ORDENADORES 66 El código anterior nunca se vectorizaría automáticamente, ya que un compilador no puede saber si los valores de K son diferentes, y por ello, que no existen dependencias. Para tratar con matrices dispersas utilizamos las operaciones de dispersar y agrupar usando vectores de índices. Una instrucción de agrupar (gather) usa un vector de índices, y busca en memoria el vector cuyos elementos están en las direcciones obtenidas al sumar a la dirección base los desplazamientos indicados por el vector de índices. Las operaciones de agrupar reúnen los componentes dispersos por la memoria y los depositan de forma compacta en un registro vectorial. Estas operaciones raramente se ejecutan a un elemento por ciclo de reloj, pero son todavía mejor que la alternativa escalar.

67 ARQUITECTURA DE ORDENADORES 67 El ejemplo anterior de puede codificar como: LVV k, Rk; carga K LVIV a, (R a + V k ); carga A(K(I)) LVV m, R m ; carga M LVIV c, (R c + V m ); carga C(M(I)) ADDVV a, V a, V c ; los suma SVI(R a + V k ), V a ; almacena A(K(I)) Las cargas / almacenamientos indexados y los vectores de índices proporcionan un método alternativo para soportar la ejecución condicional.

68 ARQUITECTURA DE ORDENADORES 68 REDUCCIÓN VECTORIAL Reducción: un bucle que reduce un array a un único valor (escalar) por aplicación repetida de una operación. Ejemplo: producto escalar de dos vectores producto = 0.0; for (i = 0; i < 64; i++) { producto = producto + A[i] B[i]; } Existe una dependencia entre iteraciones del bucle dividimos el bucle para separar la parte vectorizable y la recurrencia.

69 ARQUITECTURA DE ORDENADORES 69 for (i = 0; i < 64; i++) { producto[i] = A[i] B[i]; } for (i = 1; i < 64; i++) { producto[1] = producto[1] + producto[i]; } La variable producto se ha expandido en un vector (expansión escalar). Para compilar el bucle con recurrencia añadimos secuencias de vectores progresivamente más cortos (doblamiento recursivo).

70 ARQUITECTURA DE ORDENADORES 70 El segundo bucle quedaría como: longitud = 32; for (j = 0; j < 6; j++) { for (i = 0; i < longitud; i++) { producto[i] = producto[i] + producto[i+longitud]; } longitud = longitud / 2; }


Descargar ppt "ARQUITECTURA DE ORDENADORES 1 Procesadores Vectoriales Orientados a ejecutar eficientemente algoritmos numéricos sobre estructuras regulares de un gran."

Presentaciones similares


Anuncios Google