Con registros vectoriales
Transcripción
Con registros vectoriales
U NIDAD T EM ÁTICA 2: C OMPUTADORES VECTORIALES . 13. Computadores vectoriales segmentados. 14. Computadores SIMD. 13-1 T EMA 13: C OMPUTADORES VECTORIALES SEGMENTADOS . 1. Caracterı́sticas del procesamiento vectorial. 2. Arquitectura vectorial segmentada. 3. Control de la longitud de los vectores. 4. Ejecución de instrucciones vectoriales. 5. Modos de acceso regular-no secuencial y disperso. 6. Sentencias de ejecución condicional. 7. Evaluación de las prestaciones de los computadores vectoriales. Bibliografı́a: S. Dasgupta, Computer Architecture: A Modern Synthesis, Volume 1: Foundations, John Wiley & Sons, 1989 . J.L. Hennessy & D. A. Patterson. Computer Architecture: A Quantitative Approach 2a y 3a ed., Morgan Kauffman Publishers, 1996 y 2002. Departamento de Informática de Sistemas y Computadores (DISCA) Facultad de Informática de Valencia 13-2 1 CARACTERÍSTICAS DEL PROCESAMIENTO VECTORIAL. 1. Caracterı́sticas del procesamiento vectorial. Procesamiento vectorial Muchos problemas que requieren altas potencias de cálculo acceden a grandes estructuras de datos: Repiten el mismo procesamiento a todas las componentes de la estructura. La localidad de acceso a memoria es distinta a la de los computadores convencionales: las antememorias no ocultan el tiempo de acceso a memoria. ⇒ Computadores vectoriales: máquinas que incluyen instrucciones máquina que operan sobre vectores (estructuras lineales de números) Una instrucción vectorial → sustituye un bucle de instrucciones escalares. ~ := X ~ +Y ~ , con vectores de 64 elementos. Ejemplo: Z ; Escalar ... DADD R4,Rx,#512 loop: L.D F2,0(Rx) L.D F4,0(Ry) ADD.D F6,F2,F4 ; Dep. datos S.D F6,0(Rz) ; Dep. datos DADD Rx,Rx,#8 ; Sobrecarga DADD Ry,Ry,#8 ; Sobrecarga DADD Rz,Rz,#8 ; Sobrecarga DSUB R20,R4,Rx ; Sobrecarga BNEZ R20,loop ; Sobrecarga y dep. Control ⇓ ; Vectorial LV V1,Rx LV V2,Ry ADDV V3,V1,V2 SV Rz,V3 13-3 1 CARACTERÍSTICAS DEL PROCESAMIENTO VECTORIAL. Caracterı́sticas del procesamiento vectorial: 1. En cada instrucción vectorial, el cálculo de cada componente del vector resultado es independiente del resto de componentes → reducci ón del número de dependencias de datos. Escalar Vectorial 1 componente → 2 dependencias 1 programa → 2 dependencias 2. Una instrucción vectorial supone gran cantidad de trabajo → reducci ón del cuello de botella de Flynn (1 instrucción → 1 operación, con lo que se limita el número máximo de instrucciones que se pueden lanzar en el mismo ciclo de reloj). Escalar Vectorial 1 instrucción → 1 resultado 1 instrucción → 64 resultados 3. Una instrucción vectorial equivale a un bucle de instrucciones escalares, sin la sobrecarga de las instrucciones de control de bucle, ni de los riesgos de control. Escalar Vectorial 5*64 ciclos de sobrecarga 0 ciclos de sobrecarga 4. Una instrucción vectorial que accede a memoria tiene un patr ón de acceso conocido a priori → las organizaciones de memoria de m últiples módulos funcionan muy bien, sin intervención de una antememoria. Módulo 0 R Módulo 1 R DATOS DIRECCIONES Dirección 0 MSB MUX n–m Módulo M–1 R m DIRECCIONES Dirección 2 Módulo M-1 ... Lectura 0 Lectura 1 ... Lectura 2 Módulo 1 Lectura 0 Lectura 1 Lectura 2 Módulo 0 Lectura 0 Lectura 1 Lectura 2 DATOS R/W Dirección 1 tacc 2 ... M–1 Lectura 0 0 1 0 1 2 ... M–1 Lectura 1 0 1 2 ... M–1 Lectura 1 13-4 t 2 ARQUITECTURA VECTORIAL SEGMENTADA. 2. Arquitectura vectorial segmentada. Hay dos tipos de máquinas con arquitectura del juego de instrucciones vectorial: Computadores vectoriales segmentados → UAL segmentada en muchas etapas. Computadores SIMD → múltiples UAL. Tipos de computadores vectoriales segmentados Criterio: ¿dónde están los operandos vectoriales de las instrucciones aritméticas? 1. Con registros vectoriales. En los registros vectoriales, con instrucciones para cargarlos/almacenarlos desde/en memoria. Ventajas: Si se reutilizan los operandos vectoriales, s ólo se sufre una vez el acceso a memoria. Los resultados vectoriales temporales no sufren el acceso a memoria. Inconvenientes: El tamaño de los registros vectoriales limita el tamaño de los operandos vectoriales. 2. Memoria-memoria. En la memoria principal. Ventajas: Tamaño de los operandos vectoriales ilimitado. Inconvenientes: Todas las instrucciones sufren el acceso a memoria. ⇒ la mayorı́a de máquinas son con registros vectoriales. Estructura de un computador vectorial segmentado con registros vectoriales Memoria principal Control de memoria vectorial Procesador escalar Registros vectoriales U.A.L. segmentada Controlador vectorial 13-5 2 ARQUITECTURA VECTORIAL SEGMENTADA. Tiempo de ejecución de una instrucción vectorial Idealmente: t ≈ nTe , siendo Te el no de ciclos de reloj por resultado. Realmente: t = Tarranque + nTe , siendo: Tarranque : No de ciclos de reloj necesarios para obtener el primer resultado en la salida del operador. • Instrucción de carga/almacenamiento: Tarranque = Tiempo de acceso a un módulo. • Instrucción aritmética: Tarranque = Latencia del operador (no de etapas de segmentación). Te : No de ciclos de reloj por resultado, a partir del primero. • Instrucción de carga/almacenamiento: Te = Ciclos de reloj por acceso (inversa del ancho de banda de la memoria o bus) ≈ 1 ciclo de reloj. • Instrucción aritmética: Te = Ciclos de reloj por componente (inversa de la tasa de iniciación) ≈ 1 ciclo de reloj. Para maximizar la productividad, Tarranque debe ser despreciable frente al otro sumando → n ↑. Formato de las instrucciones vectoriales Código de operación. Tipos de operaciones vectoriales: • V ←V ×V • V ←V ×S • S ← V × V (reducción vectorial) • S ← V (reducción vectorial) • Carga y almacenamiento. Operandos. 3 direcciones: 2 fuentes y 1 destino. • Registros vectoriales: No de registro. • Carga y almacenamiento: Origen del vector en memoria y secuencia de acceso (ver página 12). 13-6 2 ARQUITECTURA VECTORIAL SEGMENTADA. Ejemplo de computador vectorial segmentado: DLXV Caracterı́sticas: 1. Procesador escalar: DLX, muy parecido al MIPS. 2. 8 registros vectoriales de 64 componentes (números en coma flotante de doble precisión). Cada registro vectorial tiene dos puertos de lectura y uno de escritura → 16 puertos de lectura y 8 de escritura en total. 3. 5 unidades funcionales vectoriales: Suma/resta flotante, multiplicaci ón flotante, división flotante, operaciones enteras y operaciones l ógicas. Todas las unidades están completamente segmentadas (Latencia media = 1). 4. 1 unidad de carga/almacenamiento vectorial. El subsistema de memoria est á compuesta por varios módulos. 5. Registros escalares: 32 registros enteros y 32 registros de coma flotante (los del DLX), y 2 registros especiales. Juego de instrucciones: 1. Instrucciones aritméticas: ADDV Vi,Vj,Vk V~i ADDSV Vi,Fj,Vk V~i SUBV Vi,Vj,Vk V~i SUBSV Vi,Fj,Vk V~i SUBVS Vi,Vj,Fk V~i MULTV Vi,Vj,Vk V~i MULTSV Vi,Fj,Vk V~i DIVV Vi,Vj,Vk V~i DIVSV Vi,Fj,Vk V~i DIVVS Vi,Vj,Fk V~i ← V~j + V~k ← Fj + V~k ← V~j − V~k ← Fj − V~k ← V~j − Fk ← V~j ∗ V~k ← Fj ∗ V~k ← V~j ÷ V~k ← Fj ÷ V~k ← V~j ÷ Fk 2. Carga/almacenamiento: LV Vi,Rj V~i ← M em[Rj ], M em[Rj + 8], . . . SV Ri,Vj M em[Ri ], M em[Ri + 8], . . . ← V~j 13-7 3 CONTROL DE LA LONGITUD DE LOS VECTORES. 3. Control de la longitud de los vectores. ¿Cuál es el tamaño máximo de los vectores? MVL (Maximum Vector Length): Tamaño de los registros vectoriales. En el DLXV, MVL=64. Procesamiento de pequeños vectores El registro VLR (Vector Length Register) indica el n úmero de componentes que realmente deben procesarse: 0 ≤ VLR ≤ MVL. Hay instrucciones para leer/escribir el VLR: VLR ← Ri: MOVI2S VLR,Ri Ri ← VLR: MOVS2I Ri,VLR Procesamiento de vectores de tamaño mayor que MVL Técnica del seccionamiento o strip-mining: Descomponer la operaci ón vectorial real de tamaño n > MVL en: Una sección de tamaño (n mod MVL) (n div MVL) secciones de tamaño MVL ~ +Y ~ Ejemplo. Bucle DAXPY: Y~ := aX El código: for i := 0 to n-1 do Y[i] := a*X[i] + Y[i] se transforma en: low := 0; VL := n mod MVL; for j := 0 to (n div MVL) do begin for i := low to low+VL-1 do Y[i] := a*X[i] + Y[i] low := low+VL; VL := MVL; end; Rango de i 0 Desde 0 Hasta m−1 (m = n mód M V L) Valores de j 1 2 m m + MV L m + M V L − 1 m + 2M V L ... ... ... n div M V L n − MV L n−1 13-8 4 EJECUCIÓN DE INSTRUCCIONES VECTORIALES. 4. Ejecución de instrucciones vectoriales. Los computadores vectoriales segmentados disponen de varios operadores → pueden haber en ejecución múltiples operaciones vectoriales. Ejemplo: 1 7 MULTV V0,V1,V2 64 D 16 ADDV V3,V1,V4 64 D 1 20 DIVV V5,V6,V7 64 D Riesgos estructurales entre operaciones vectoriales Dos instrucciones no pueden utilizar la misma unidad aritmética. Ejemplo: 1 7 MULTV V0,V1,V2 64 D 16 ADDV V3,V1,V4 64 D 7 1 MULTV V5,V6,V7 64 D El número de puertos de lectura y escritura de los registros vectoriales está limitado. Ejemplo: 1 7 MULTV V0,V1,V2 16 ADDV V3,V1,V4 64 D 1 DIVV V5,V1,V7 64 D 20 64 D 13-9 4 EJECUCIÓN DE INSTRUCCIONES VECTORIALES. Riesgos de datos entre operaciones vectoriales Si consideramos como objeto de almacenamiento el vector completo, en caso de riesgo hay que retrasar la operación vectorial hasta que haya finalizado completamente la operación precedente. RAW. Ejemplo: 1 7 MULTV V1,V2,V3 64 D 1 ADDV V4,V1,V5 6 64 D t =1+7+64+6+64=142 ciclos. WAW. Si sólo hay 1 puerto de escritura, el riesgo estructural impide la formación del riesgo WAW. Si hay mas de un puerto de escritura, el riesgo se resuelve retrasando la segunda operación vectorial (¿interesa tener más de 1 puerto de escritura?). Ejemplo: 1 20 DIVV V1,V2,V3 64 D 1 ADDV V1,V4,V5 6 64 D WAR. Si consideramos como objeto de almacenamiento cada una de las componentes del vector, no hay problema alguno. Ejemplo: R0 1 20 DIVV V0,V1,V2 D 1 6 ADDV V1,V4,V5 64 64 D W0 13-10 4 EJECUCIÓN DE INSTRUCCIONES VECTORIALES. Técnica del encadenamiento de operaciones vectoriales Si consideramos como objeto de almacenamiento cada una de las componentes del vector, en caso de riesgo hay que retrasar la operación vectorial hasta que la operación precedente haya completado el primer resultado → se “encadenan” las operaciones vectoriales con riesgos. RAW. Ejemplo: W0 1 7 MULTV V1,V2,V3 64 D 1 ADDV V4,V1,V5 6 64 D R0 t =1+7+6+64=78 ciclos. WAW. Ejemplo: W0 1 20 DIVV V1,V2,V3 64 D 1 ADDV V1,V4,V5 6 64 D W0 Generalización de la técnica del encadenamiento Dadas dos instrucciones vectoriales entre las que hay un riesgo RAW o WAW, la 2 a instrucción puede leer (caso RAW) o escribir (caso WAW) la componente j siempre que la 1a haya completado hasta la componente i, siendo i ≥ j. Ejemplo: W0 1 7 MULTV V1,V2,V3 ... ADDV V4,V1,V5 64 D 1 6 64 D R0 13-11 5 MODOS DE ACCESO REGULAR-NO SECUENCIAL Y DISPERSO. 5. Modos de acceso regular-no secuencial y disperso. Secuencial Regular No secuencial Modos de acceso = Bloques Irregular o disperso Modo de acceso regular-no secuencial MEMORIA B d REGISTRO VECTORIAL Parámetros: Dirección base B, distancia o stride entre accesos d Ejemplo: Acceso a la columna de una matriz almacenada por filas. El modo de acceso regular secuencial se obtiene haciendo d = 1 palabra. Instrucciones DLXV para el acceso regular-no secuencial LVWS Vi,Rj,Rk Vi [p] ← M em[Rj + (p ∗ Rk )], p = 0.,63 SVWS Ri,Rj,Vk M em[Ri + (p ∗ Rj )] ← Vk [p], p = 0.,63 Rk contiene el stride en bytes. 13-12 5 MODOS DE ACCESO REGULAR-NO SECUENCIAL Y DISPERSO. Modo de acceso por bloques MEMORIA B s b REGISTRO VECTORIAL Parámetros: Dirección base B, distancia entre accesos s, tamaño del bloque accedido b. El DLXV no incluye instrucciones para el modo regular por bloques. Modo de acceso disperso En este modo hay que indicar explı́citamente las componentes del vector que se desean acceder: 1. Asociando al operando vectorial un vector de bits. 2. Asociando al operando vectorial un vector de ı́ndices. 13-13 5 MODOS DE ACCESO REGULAR-NO SECUENCIAL Y DISPERSO. Modo de acceso disperso basado en vectores de bits Un operando vectorial V tiene asociado un vector de bits BV de igual n úmero de componentes, de tal forma que hay que acceder Vi si BVi = 1. OPERANDO VECTORIAL B 1 0 0 1 1 0 1 0 1 1 0 0 1 0 0 0 n El vector de bits tiene un tamaño igual al número total de componentes del vector (e independiente de las que se deseen acceder). VECTOR DE BITS m 1 Parámetros: Dirección base B, vector de bits BV Modo de acceso disperso basado en vectores de ı́ndices Un operando vectorial V tiene asociado un vector de ı́ndices IV , el cual contiene los ı́ndices de las componentes que hay que acceder. Por tanto, hay que acceder Vi si ∃j/IV [j] = i. OPERANDO VECTORIAL B 0 3 4 6 8 9 12 n El vector de ı́ndices tiene un tamaño igual al número de componentes que hay que acceder. VECTOR INDICES log2 n m Parámetros: Dirección base B, vector de ı́ndices IV 13-14 5 MODOS DE ACCESO REGULAR-NO SECUENCIAL Y DISPERSO. Instrucciones DLXV para el modo de acceso disperso Solamente basadas en la utilización de vectores de ı́ndices: Compresión (gather): Dado un operando vectorial en memoria y un vector de ı́ndices, carga en un registro vectorial sólo las componentes indicadas (como desplazamiento en bytes) por el vector de ı́ndices. LVI Vi,Rj,Vk Vi [p] ← M em[Rj + Vk [p]], p = 0.,63 MEMORIA VECTOR DE INDICES REGISTRO VECTORIAL 0 24 32 48 64 72 96 Expansión (scatter): Operación inversa de la compresión. SVI Ri,Vj,Vk M em[Ri + Vj [p]] ← Vk [p], p = 0.,63 REGISTRO VECTORIAL VECTOR DE INDICES MEMORIA 0 24 32 48 64 72 96 13-15 5 MODOS DE ACCESO REGULAR-NO SECUENCIAL Y DISPERSO. Ejemplo: Dado el código en alto nivel: for i := 0 to n-1 do A[K[i]] := A[K[i]]+C[M[i]] ⇓ LV Vk,Rk LVI Va,Ra,Vk LV Vm,Rm LVI Vc,Rc,Vm ADDV Va,Va,Vc SVI Ra,Vk,Va 13-16 6 SENTENCIAS DE EJECUCIÓN CONDICIONAL. 6. Sentencias de ejecución condicional. Problema: Consideremos el fragmento de código: ... for i := 0 to 63 do if A[i] <> 0 then A[i] := A[i] - B[i]; ... El bucle no puede “vectorizarse” debido a que contienen una sentencia condicional. Solución: 1. Añadir instrucciones de comparación vectorial al juego de instrucciones: Realizan una comparación componente a componente de los operandos vectoriales Generan como resultado un vector de bits de igual tama ño que los operandos vectoriales. La componente i del vector resultado es “1” si las componentes i de los operandos vectoriales cumplen la condición, y viceversa. 2. Utilizar el resultado de las instrucciones de comparaci ón para procesar sólo algunas componentes. a) Modificando la unidad aritmética para enmascarar el procesamiento. b) Generando un vector de ı́ndices con los ı́ndices de las componentes a procesar. 13-17 6 SENTENCIAS DE EJECUCIÓN CONDICIONAL. Instrucciones de comparación vectorial del DLXV: S V Vi,Vj y S SV Fi,Vj donde puede ser EQ,NE,GT,LT,GE,LE. El resultado lo escriben sobre un registro implı́cito: VM (Vector Mask) Instrucciones adicionales para la gestión de VM: CVM: VM ← “11. . . 1”. MOVF2S VM,Fi: VM ← Fi . MOVS2F Fi,VM: Fi ← VM. Implementación de condiciones compuestas: Generar el VM para cada condición. Guardar el VM. Combinar los vectores de bits obtenidos. Escribir el VM. ... for i := 0 to 63 do if ((A[i]>0)and(B[i]<5)) then ... ... ⇓ LV V1,Ra LD F0,cero(R0) SLTSV F0,V1 MOVS2F F10,VM LV V2,Rb LD F0,cinco(R0) SGTSV F0,V1 MOVS2F F12,VM ; Obtener F10 = MOVF2S VM,F10 ... ; cero contiene ‘‘0’’ ; VM[i]=1 si F0<V1[i] ; F10(F11)=VM ; cinco contiene ‘‘5’’ ; VM[i]=1 si F0>V1[i] ; F12(F13)=VM F10 and F12 ; VM=F10(F11) 13-18 6 SENTENCIAS DE EJECUCIÓN CONDICIONAL. Enmascaramiento del procesamiento: Aritmética enmascarada. Se efectua la operación real sobre las componentes cuyo bit en el vector de máscara es un “1”. VM ⇒ Hay que modificar la unidad aritmética. ... for i := 0 to 63 do if A[i] <> 0 then A[i] := A[i] - B[i]; ... ⇓ LV V1,Ra LV V2,Rb LD F0,cero(R0) ; cero contiene ‘‘0’’ SNESV F0,V1 ; VM := V1[i]<>0 SUBV V1,V1,V2 ; Sólo resta los i / V1[i]<>0 SV Ra,V1 Todas las componentes de los vectores operando se leen → no se reduce el tiempo de ejecución. El DLXV no tiene enmascaramiento del procesamiento. 13-19 6 SENTENCIAS DE EJECUCIÓN CONDICIONAL. Utilización de los vectores de ı́ndices para implementar las sentencias condicionales. CVI Vi, Rj: Crear vector de ı́ndices a partir del VM: Vi [p] := p ∗ Rj , p = 0.,63, sin incluir los p/V M [p] = 0 CVI V2,R1 POP Ri,VM: R1 8 ....48,40,32,24,16,8,0 V2 ...,48,24,16,0 VM ...01001101 Ri ← No “1” del VM ... for i := 0 to 63 do if A[i] <> 0 then A[i] := A[i] - B[i]; ... ⇓ LV V1,Ra LD F0,cero(R0) ; cero contiene ‘‘0’’ SNESV F0,V1 ; VM contiene las componentes ; a procesar ADD R1,R0,#8 ; 8 bytes por flotante CVI V2,R1 ; V2 contiene los ı́ndices de ; las componentes a procesar POP R1,VM ; R1= Num. de componentes a procesar MOVI2S VLR,R1 LVI V3,(Ra+V2) LVI V4,(Rb+V2) SUBV V3,V3,V4 SVI (Ra+V2),V3 Comparación entre las dos implementaciones (Sin considerar encadenamiento ni solapamiento entre instrucciones) Aritmética enmascarada (página 19): t ≈ 5n + C1 Vectores de ı́ndices: t ≈ 4n + 4f n + C2, siendo f la fracción de componentes que cumplen la condición. → si f < 25 % es mejor el método basado en vectores de ı́ndices. 13-20 7 EVALUACIÓN DE LAS PRESTACIONES VECTORIALES. 7. Evaluación de las prestaciones de los computadores vectoriales. Velocidad de pico Dado un computador vectorial segmentado con p operadores segmentados, que funcionan a una frecuencia de reloj f : pf Vpico = p op/ciclo =pf resultados/s= 10 6 MFLOPS. Problema: No es frecuente que todos los operadores estén en uso simultáneamente. Evaluación de las prestaciones a partir de un bucle vectorial Consideremos, por ejemplo, el bucle DAXPY: n := ...; low := 0; VL := n mod MVL; for j := 0 to (n div MVL) do begin for i := low to low+VL-1 do Y[i] := a*X[i] + Y[i] low := low+VL; VL := MVL; end; Instrucciones vectoriales: Tarranque + VL*Te Aplicacion del strip-mining: Tbucle Inicializacion: Tbase 13-21 7 EVALUACIÓN DE LAS PRESTACIONES VECTORIALES. El tiempo de ejecución depende de cuatro términos: 1. Código escalar de inicialización del bucle. Se ocupa del cálculo de direcciones iniciales, longitudes de los vectores, . . . . S ólo se ejecuta una vez. Valor tı́pico: Tbase = 10 ciclos. 2. Código escalar dedicado a aplicar la técnica del strip-mining. Se ocupa de descomponer el vector original en secciones de tama ño ≤ M V L. El número de secciones es d MnV L e. El código se ejecuta una vez por cada sección, originando una sobrecarga Tbucle . Valor tı́pico: Tbucle = 15 ciclos. 3. Tiempo necesario para obtener el primer resultado en cada secci ón del stripmining (Tarranque ). 4. Tiempo requerido para calcular cada componente del resultado (T e ). El tiempo total de ejecución del bucle es: n n T (n) = Tbase + d eTbucle + b c(Tarranque + MVL ∗ Te ) + MVL MV L Tarranque + (n mód MVL)Te Operando: T (n) = Tbase + d n e(Tbucle + Tarranque ) + nTe MVL 13-22 7 EVALUACIÓN DE LAS PRESTACIONES VECTORIALES. Ejemplo: Bucle DAXPY, en un DLXV @ 80MHz con las siguientes caracterı́sticas: Unidad de carga/almacenamiento: 11 ciclos. Sumador: 6 ciclos. Multiplicador: 7 ciclos. Encadenamiento de operaciones vectoriales. Código vectorial del bucle: LV V1,Rx MULTSV V2,F0,V1 LV V3,Ry ADDV V4,V2,V3 SV Rz,V4 Ignorando todas las sobrecargas, excepto la de arranque: 11 n LV V1,Rx n 7 MULTSV V2,F0,V1 11 n LV V3,Ry 6 n ADDV V4,V2,V3 11 n SV Rz,V4 T (n) = (11 + n) + (11 + n) + (11 + n) = 33 + 3n ⇒ Tarranque = 33 ciclos. Te = 3 ciclos. Sustituyendo: n T (n) = Tbase + d MnV L e(Tbucle + Tarranque) + nTe = 10 + d 64 e(15 + 33) + 3n n n e ≈ ( 64 + 1): Si n es elevado, podemos utilizar la aproximaci ón: d 64 T (n) = 10 + 48 n 64 + 48 + 3n = 58 + 3,75n ciclos 13-23 7 EVALUACIÓN DE LAS PRESTACIONES VECTORIALES. Medidas de prestaciones Velocidad sostenida R: Operaciones tiempo En nuestro ejemplo: R(n) = • Operaciones = 2n. • Tiempo = T (n) = 58 + 3,75n ciclos. Sustituyendo: R(n) = 2n 58+3,75n operaciones/ciclo Velocidad alcanzada procesando vectores de longitud infinita R ∞ . Es la velocidad máxima real que se puede obtener en el computador. R∞ = lı́mn→∞ R(n). En nuestro ejemplo: R∞ = lı́mn→∞ R(n) = lı́mn→∞ 42.7 MFLOPS. 2n 58+3,75n = 2 3,75 = 0.53 op./ciclo @80 MHz = Tamaño mı́nimo de los vectores a procesar N 1 para alcanzar una velocidad 2 1 sostenida igual o mayor que 2 de R∞ . Esta medida da una idea de la la sobrecarga del bucle vectorial. 1 R 2 ∞ = R(N 1 ) ⇒ N 1 2 2 En nuestro ejemplo: 1 0,53 2 = 2n 58+3,75n ⇒ N 1 = 15,5 ≈ 16 componentes. 2 13-24 7 EVALUACIÓN DE LAS PRESTACIONES VECTORIALES. Tamaño mı́nimo de los vectores a procesar Nv para que el modo vectorial sea más rápido que el escalar. Esta medida también da una idea de la sobrecarga del bucle vectorial. T (Nv ) = Tescalar ⇒ Nv . En nuestro ejemplo: • Supondremos que el código escalar se compone de un bucle, con 5 instrucciones que implementan el cuerpo del bucle más 10 instrucciones (de control y sobrecarga del bucle). • También supondremos que la máquina escalar está segmentada y que aplica gestión dinámica de instrucciones, obteniendo CPI ≈ 1. Tescalar = (10 + 5) instrucciones = 15 ciclos (1 componente). Igulando con la expresión de T (n): 15n = 58 + 3,75n ⇒ Nv = 4,71 ≈ 5 componentes. 13-25