1 Arquitecturas Avanzadas Curso 10/11Horas 5 6 7 2 3 INTRODUCCIÓN CONECTIVIDAD MÁQUINAS MIMD MÁQUINAS SIMD SUPERESCALARES
2 arqAva Temario Superes-2AUMENTO DE PRESTACIONES Límites de las arquitecturas escalares “Pipeline” Visión global de una arquitectura Superescalar Flujo de instrucciones Flujo de datos en registros Flujo de datos en memoria Microarquitectura del Pentium II, III y 4 Microarquitectura del Core 2 Microarquitectura del Itanium (IA64) Bibliografía: “Modern Processor Design. Fundamentals of Superscalar Processors” J. P. Shen y M. H. Lipasti McGraw-Hill-2004 [Caps. 4 y 5]
3 arqAva Límites de las arquitecturas escalares “Pipeline” Superes-3Aplicable a: Instrucciones Aritmética Acceso a memoria d ¡ Todas las instrucciones siguen mismo camino a la misma marcha, salvo parones ! ¡ Demasiado rígido ! Límite superior IPC=1=CPI Unificación ineficiente en un único pipeline Pérdida de eficiencia por ejecución tan “en orden” ¿Alcanzable?
4 arqAva Límite superior IPC=1=CPI ¿Realidad? Superes-41987 – Agerwala y Cocke => CPI ≈ 1, ,15 ¿ Qué rendimiento se espera ? dn, dn-1,..., d2, d1 d’n, d’n-1,..., d’2, d’1 k etapas Sin Pipeline k T1 Tk = n k (k+n–1) n k k+n–1 Sk = Límites tecnológicos: k ( ); < 10 k => n Lim Sk = k n ¿ Es ésto tan bueno ?
5 arqAva Límite superior IPC=1=CPI ¿Realidad? Superes-5SK n Aceleración como función de ‘k’ y ‘n’ n k k+n–1 Sk = Necesario n89 para eficiencia 90% Necesario n45 para eficiencia 90% ¡ Saltos ! 1 cada 5/6 Inst. Predicción OK => 90% ¿Conclusión? ¿Puedo alimentar el pipe con tantas instrucciones seguidas?
6 arqAva Unificación ineficiente en un único pipeline Superes-6D I E W Operaciones: ALU + Load/Store W F D I E W F D I E M F D I E M W Operaciones: Coma flotante, Coma fija (mul,div) => Multiciclos Unificación imposible o muy ineficiente
7 arqAva Ejecución “en orden” ineficiente Superes-7I8 I7 I6 F D I E W Prog. ejemplo r1 = M[Y] M[X] = r3 r2 = M[Z] r3 = r1+r2 r4 = M[B] r5 = M[C] r6 = r4*r5 M[A] = r6 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 I1 I2 I3 I4 I5 I6 I7 I8 F D I E W RAW F D I E W F D — I E W F ? — D ? — I E W F — I E W D ¿Es necesario retener a I5, I6, … ? ¡ Permitir ejecución fuera de orden !
8 arqAva Ejecución “en orden” ineficiente Superes-8Programa ejemplo I1: r1 = M[Y] I4: M[X] = r3 I2: r2 = M[Z] I3: r3 = r1+r2 I5: r4 = M[B] I6: r5 = M[C] I7: r6 = r4*r5 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 I8: M[A] = r6 19 F D I E W — ? Permitiendo ejecución fuera de orden: 26 a 19 ciclos
9 arqAva Visión global … (Escalar => Superescalar) Superes-9Romper límite IPC=1 Pipelines paralelos IF ID RD ALU MEM WB Grado = 3 Paralelismo temporal y espacial Coste hw adicional: S2 Crossbar entre etapas Accesos paralelos Reg y Cache ¿Rendimiento IPC? 2 0,6..1,45 4 6 1,2..2,3 Observado Unos 1,58..8 Otros Teórico Pentium Core Itanium PowerG5
10 arqAva Visión global … (Escalar => Superescalar) Superes-10¿Rendimiento IPC? 2 0,6..1,45 4 6 1,2..2,3 Observado Simulación con: PTLsim/X arquitectura tipo x86-64 grado 4 SPEC CPU2006 200 millones de instrucciones simuladas: datos “Fetch” Benchmark IPC 0 Fetch bzip2 1,36 14,3 eon 1,24 16,4 gap 1,32 10,4 gcc 1,14 12,2 gzip 1,08 19,6 parser 0,89 25,3 perlbmk 1,10 42,2 Media INT 1,16 20,1 Benchmark IPC 0 Fetch ammp 1,11 43,2 apsi 1,12 45,1 equake 1,05 39,2 mesa 1,31 21,4 wupwise 1,84 19,7 Media FP 1,29 33,7
11 arqAva Visión global … (Escalar => Superescalar) Superes-11Evitar unificación ineficiente Pipelines diversificados IF ID RD WB ALU MEM1 FP1 BR MEM2 FP2 FP3 EX Diseño adhoc + eficiente: Mejor latencia Menos hardware Control cauces EX: Distribuido e independiente ¿Cuánta diversidad? 1965 CDC 1990 M 1995 Pentium 2 2000 Itanium 23 2006 Core 2 Duo 14
12 arqAva Visión global … (Escalar => Superescalar) Superes-12Permitir ejecución fuera de orden => Pipelines dinámicos IF ID RD WB ALU MEM1 FP1 BR MEM2 FP2 FP3 EX Dispatch buffer Reorder buffer en orden fuera de orden
13 arqAva Visión global … (Modelo Superescalar) Superes-13Extraer Buffer de instrucciones Decodificar Despachar Ejecutar Completar Retirar Buffer de dispatch Buffer de issuing Buffer de completar Buffer de store Cada instrucción a U.F. adecuada Forzar terminación en orden Optimizar acceso a memoria
14 arqAva Visión global … (Etapa Fetch) Superes-14¡ La etapa Fetch no es trivial ! (Caché simple “línea = 4 Inst.”) sub add xor CACHE I W E F D 4 rol mul add mov or bra --- add call Caché extendida “línea = 8 Inst.” 8 Caché autoalineada --- sub lsl add load asr PC Bancos de memoria --- sub lsl add load asr para etapa D guardar add load --- asr sub Buffer para etapa D
15 arqAva Visión global … (Etapa Decodificación) Superes-15¡ Mucho trabajo ! Identificar las instrucciones concretas y su tipo Detectar dependencias con instrucciones cercanas Identificar saltos Leer operandos RISC lo facilita mucho ¿Acelerar? => Predecodificación (parcial) previa [miss cacheI] Cache I F D 4 Memoria principal Lógica Pre Deco. Inst1 Inst2 Inst4 Inst3 Inst1 4b Inst2 Inst3 Inst4 Saltos Independencia Tiene su sobrecarga
16 arqAva Visión global … (Etapa Despachar) Superes-16Extraer Decodificar Despachar ALU MEM1 FP1 BR MEM2 FP2 FP3 Reorder buffer “Completar” Decidir a qué U.F. enviar cada instrucción Transición centralizado a distribuído Buffer de espera operando(s) no disponible(s) I5: r4 = M[B] I6: r5 = M[C] I7: r6 = r4*r5 I7 I6 I5 Estación de reserva Tomasulo central ALU MEM1 FP1 BR MEM2 FP2 FP3 distribuidas dispatch issue
17 arqAva Visión global … (Etapa Ejecutar) Superes-17Tendencia a diversificar más => más U.F. más especializadas Salto Load / Store Multimedia ALU TI SuperSPARC FPU IBM RS/6000 (a+e+1) + (b+f+1) + (c+g+1) + (d+h+1) ¿Cuántas U.F. de qué tipo? % Tipo Instrucciones 40 20 load/store saltos ALU U.F. > Grado O(N2) Regla 4 / 2 / 4 4
18 arqAva Visión global … (Etapa Ejecutar) Superes-18Simulación con: PTLsim/X arquitectura tipo x86-64 grado 4 SPEC CPU2006 200 millones de instrucciones simuladas: datos “Commit” % Tipo Instrucciones 40 20 load/store saltos ALU ¿Cuántas U.F. de qué tipo? Bench ld st salto bzip2 17,4 7,7 11,5 eon 21,3 16,4 8,6 gap 24,4 10,5 13,4 gcc 21,1 10,8 15,2 gzip 17,1 parser 24,3 9,2 12,8 perlbmk 23,2 12,0 15,4 INT 10,6 12,2 Bench ld st salto ammp 21,1 6,4 7,6 apsi 23,2 5,3 6,6 equake 18,4 8,7 7,2 mesa 23,3 10,8 9,0 wupwise 22,2 10,5 10,1 FP 21,6 8,3 8,1
19 arqAva Visión global … (Etapas Completar y Retirar) Superes-191: r0=r1-r2 2: r3=r4/r0 3:r5=r5+#1 E X C C U O T R I E O N B A K D F R O T ? Excepciones precisas Estado máquina Prioridad a load vs store Estado memoria
20 arqAva Flujo de instrucciones (Problemática de los saltos) Superes-20Programa ejemplo I1: r1 = M[A] I2: r3 = r3-1 I3: beq I5 I4: r2 = r2+r4 I5: r5 = r5-r6 I6: M[B] = r5 F D E W Por simplicidad: I1, I2, I3, I4, I5, I5, I6 vs I1, I2, I3, I5, I6 I1: r1 = M[A] I4: r2 = r2+r4 I2: r3 = r3-1 I3: beq I5 I5: r5 = r5-r6 1 2 3 4 5 6 7 8 F D E W I6: M[B] = r5 9 10 ! Hasta fin ciclo 5 no se sabe dirección del salto ! ¿Cómo afecta a nuestro modelo?
21 arqAva Flujo de instrucciones (Penalización por saltos) Superes-21Incondicionales: bra 28(PC) => Determinar dirección destino Modo de direccionamiento Condicionales: beq 55(R5) => + Evaluar condición de saltar ? salto (Ri) desp(PC) bra 28(PC) bra (R5) desp(Ri) bra 55(R5) ¿ Perder siempre 3 ciclos ? 21 Instrucciones
22 arqAva Flujo de instrucciones (Penalización por saltos) Superes-22Incondicionales: bra 28(PC) => Determinar dirección destino Condicionales: beq 55(R5) => + Evaluar condición de saltar ¿ Flags, Registros ? Registros generales salto Registro Cond. ¡ Demasiada pérdida !
23 arqAva Flujo de instrucciones (Técnicas especulativas) Superes-23Predecir (especular) Dirección del salto Condición del salto Mecanismo para validar acierto o fracaso Mecanismo de recuperación ante un fallo El salto sigue su ejecución Cache Inst. PC Mux + Saltar Dir. Inst. Salto Dir. Destino Branch Target Buffer Historia 1 TT/T NT/T TN/T NN/N T N $00F5A4: beq 4(PC) $00F5A4 $00F5AC FSM Saltar Hit BTB 86,5% ¿ Aliasing ? OK 86, ,0
24 arqAva Flujo de instrucciones (Técnicas especulativas) Superes-24Mecanismo de recuperación ante un fallo ¿ Gestión de etiquetas ? a a b T inst1 inst2 inst3 01 (tag 01) 02 03 (tag 02) (tag 03) 01 b inst1 inst2 inst3 T Retirar éstas + ¡Redirigir! c N inst4 c N d T inst4 02 inst5 inst6 03 e T inst7 inst8 ¡Anular! d T inst5 inst6 f T inst9 01 ¡Etiquetar!
25 arqAva Flujo de instrucciones (Técnicas especulativas) Superes-25PowerPC 604 BTB dividida en dos BTAC [64] saltos tomados y 1 ciclo BHT [512] correctora y 2 ciclos Actualización en Back-End Estación de reserva Branch [4]
26 arqAva Flujo de instrucciones (¿Qué se consigue?) Superes-262 bits historia y 4K entradas [Hennesy …] Aritmética Entera Media 11% Coma flotante Media 4% Más frecuentes los bcc
27 arqAva Flujo de instrucciones (Otras técnicas especulativas) Super-27¿Cómo mejorar en la condición? Más bits de historia Más saltos recordados Mejorar la función de predicción Apenas mejora Predictores correlacionados Historia de otros saltos influyen en la predicción del salto actual [globalidad] if (d==0) d = 1; if (d==1) ------ Predictores múltiples: local + global …. Local 2 bits => 7% Correlacionado => 4% Múltiple => 3%
28 arqAva Flujo de instrucciones (Otras técnicas especulativas) Super-28Algunos problemas del predictor simple con 2 bits de historia: Sea un patrón de salto => T N T N T N T N T……… ¿Guardar dos+ comportamientos? PC Historia NT/T 1 PC Historia 1 Registro histórico de saltos con desplazamiento 1 50% T ¿Cuántos? NN/N T TT/T N TN/T Idealmente uno por salto
29 arqAva Flujo de instrucciones (Otras técnicas especulativas) Super-29Algunos problemas del predictor simple con 2 bits de historia: 2 instrucciones distintas y mismo patrón de saltos => ¡Aliasing! PC Historia 1 $A350 bne 4(PC) $B684 beq 8(PC) ¿Guardar dos+ historias?
30 arqAva Flujo de instrucciones (Otras técnicas especulativas) Super-301992 Yeh y Patt => Predictor adaptativo de dos niveles PC g Global [1] p Individual [1 * bcc] s Shared [n * bcc] PentiumPro Adaptativo G Global [1] P Individual [varios] GAg, PAg, PAs 90% %
31 arqAva Flujo de instrucciones (Otras técnicas especulativas) Super-311993 Scott McFarling => Predictor gshare Además: Return Address Stack DEC Alpha 21264 ISCA’04 Ayosé Falcon y … => Prophet/Critic hybrid branch predictor
32 arqAva Flujo de instrucciones (Otras técnicas especulativas) Super-32Simulación con: PTLsim/X arquitectura tipo x86-64: bimodal(2)+Gshare SPEC CPU2006 200 millones de instrucciones simuladas: cond, indir, ret GAg, PAg, PAs 90% % Bench Hit bzip2 95,9 eon 93,3 gap 96,0 gcc 92,6 gzip 92,2 parser 99,9 perlbmk 98,8 INT 95,5 Bench salto ammp 98,9 apsi 99,3 equake 92,3 mesa 97,8 wupwise 97,7 FP 97,2
33 arqAva Flujo de datos en registros Superes-33EN DESARROLLO
34 arqAva Flujo de datos en memoria Superes-34Problemática del acceso a memoria $000F3A58 r1 disponible r1 ld r2,35(r1) $000F3A8D 000F3 3F25 TLB 1 $3F25A8D ¿ st r3,20(r4) ?
35 arqAva Flujo de datos en memoria Superes-35¿Ejecución en orden de los accesos a memoria? Y(i) = A * X(i) + Y(i) F0 LD,a R4 ADDI,Rx,#512 ;last address Loop: F2 LD,0(Rx) ;load X(i) F2 MULTD,F0,F2 ;A*X(i) F4 LD,0(Ry) ;load Y(i) F4 ADDD,F2,F4 ;A*X(i)+Y(i) 0(Ry) SD,F4 ;store into Y(i) Rx ADDI,Rx,#8 ;inc. index to X Ry ADDI,Ry,#8 ;inc. Index to Y R20 SUB,R4,Rx ;compute bound BNZ,R20,Loop ;check if done DAXPY :: LINPAC LD MULTD LD ADDD SD ld, multd, ld, addd, sd 1ª iteración 2ª iteración ¿Fuera de orden?
36 arqAva Flujo de datos en memoria Superes-36Load Bypassing, Load Forwarding y colas LSQ L1D STQ ld st STQ LDQ reissue Store X Store Y Load Z Load bypassing Store X Store Y Load X Load forwarding Tag con menos bits “aliassing” ? Forwarding Tag Addr completa Predictor de dependencia LdSt 11..19% % Mejoras
37 arqAva Flujo de datos en memoria Superes-37Load Bypassing, Load Forwarding y colas LSQ [Completo] STQ LDQ
38 arqAva Flujo de datos en memoria Superes-38Simulación con: PTLsim/X arquitectura tipo x86-64: LSQ [LQ.48+SQ.32] SPEC CPU2006 200 millones de instrucciones simuladas ¿Cuánto forwarding? Bench fwd bzip2 12,0 eon 15,4 gap 7,5 gcc 10,0 gzip 10,2 parser 8,0 perlbmk 8,3 INT Bench fwd ammp 1,4 apsi 5,5 equake 12,7 mesa 9,5 wupwise 5,0 FP 6,8
39 arqAva Flujo de datos en memoria Superes-39Cache con dos puertos y no bloqueante ¿Especulativo? ¡Contienda! Puede reducir el 15% de la penalización por fallo de cache
40 arqAva Flujo de datos en memoria Superes-40Cache con prefetch LdAddr ValueAddrAnt Stride2Ant
41 arqAva Microarquitectura del Pentium II (1) Superes-41Caché de Nivel 2 Busca compatibilidad a nivel ISA (Instruction Set Architecture) con versiones anteriores Máquina de origen CISC: Difícil utilización de recursos arquitecturales RISC y superescalares Solución: Capa superior CISC y capa inferior ~ RISC Bus Caché de instrucciones Caché de datos Búsqueda y deco. de instrucciones Unidad de ejecución Unidad de afianzamiento Buffer de reordenación
42 arqAva Microarquitectura del Pentium II (2) Superes-42Caché de instrucciones Mantiene el flujo de instrucciones Etapa 1 Fetch Puntero de instrucciones Decodifica y determina longitud de instrucciones 128 bits Etapa 2 Fetch Predicción dinámica de salto 128 bits Alinea las instrucciones Etapa 3 Fetch 128 bits Secuenciador microinst. RISC Convierte instrucciones CISC en microinstrucciones RISC Etapa 1 decodificación 6 x 118 bits 3 x 118 bits Etapa 2 decodificación Predicción estática de salto Ordena las microinstrucciones 3 x 118 bits Asignación de registros Con Exe y WB2 11 etapas Mapea los 16 registros CISC sobre 40 registros RISC Buffer de reordenación2
43 arqAva Microarquitectura del Pentium II (3) Superes-43Hasta 4 microinstrucciones RISC Sequenciador de Microinstrucciones RISC Etapa 1 de decodificación Decodificador 0 Instrucciones complejas Decodificador 1 Instrucciones simples Decodificador 2 Instrucciones simples Una sóla microinstrucción RISC 6 x 118 bits
44 arqAva Microarquitectura del Pentium II (4) Superes-44Afianzamiento Finalización en orden Data forwarding Desechar ejecución especulativa Caché de datos ALU Compleja Unidad de carga ALU MMX Multiplicador MMX ALU MMX Unidad de almacenamiento Unidad coma flotante compleja Desplazador MMX Unidad de almacenamiento Unidad coma flotante simple Puerto 5 Unidad SSE Pentium III ALU simple y recuperación saltos Puerto 0 Puerto 1 Puerto 2 Puerto 3 Puerto 4 Unidad de Ejecución (Estación de Reserva) ¿Pentium 4? 20 etapas Caché de traza Buffer de reordenación
45 arqAva Microarquitectura del Pentium II (5) Superes-45Evolución del pipeline: ¿Intel Core 2? 14 Busq Dec1 Dec2 Ejec Escr Pentium Bus1 Bus2 Bus3 Dec1 Dec2 Aloj Reor Prep Ejec Esc1 Esc2 Pentium Pro Bus1 IP Tra1 Tra2 Env1 Aloj Ren1 Ren2 Enc Reo1 Reo2 Reo3 Emi1 Emi2 Lec1 Lec2 Ejec Flag Esc Env2 CISC RISC Pentium 4 Dependencias de Datos ¡ Pentium 4 Prescott 31 etapas ! 2004 ¿ Tejas 45 etapas y 7 Ghz ? nunca
46 arqAva Microarquitectura del Pentium II (6) Superes-46Cache de trazas del Pentium 4 L1-I Convencional Cache de Trazas TC PC Genera Trazas Fallo
47 arqAva Microarquitectura del Intel Core [..Nehalem] Superes-4714 etapas 4 x ciclo Sin cache de trazas LSQ Eficiencia energética
48 arqAva Microarquitectura del Intel Core Superes-48Incremento del rendimiento SSE
49 arqAva Microarquitectura del Intel Core Superes-49Incremento del rendimiento en Prefetch de L1 Datos Siguiente línea d, d+k, d+2k, …
50 arqAva Microarquitectura del Intel Core Superes-50Incremento del rendimiento: Micro-Fusion + Macro-Fusion add eax,[mem32] load reg1,[mem32] add reg2,reg1 x86 µOp cmp eax,[mem32] jne target x86 cmpjne eax,[mem32],target µOp add reg1,[mem32] SuperµOp 10% 15% 5%
51 arqAva Microarquitectura del Intel Core Superes-51Intel Turbo Boost Technology Vigilando: Núcleos activos, consumo, temperatura
52 arqAva Microarquitectura del Intel Core Superes-52Intel Enhanced Dynamic Acceleration Technology Ahorro gasto snoopy [30%]
53 arqAva Microarquitectura del Itanium Superes-53¡ Nuevo Diseño ! IA32 => IA64-Itanium DualCore
54 arqAva Microarquitectura del Itanium Superes-54¡ Nuevo Diseño ! IA32 => IA64-Itanium ¿Un éxito? ¿ Retrasado a 2010 o abandonado ?
55 arqAva Microarquitectura del Itanium (¿Éxito?) Superes-557/12/2005: “Itanium: A cautionary tale” 1,7 millones x86 Topt500 Nov/2009 AMD x86_64 La puntilla EM64T 6 27/05/2009: “Nehalem-EX is 8-core …, likely to signal end of line for Itanium” geek 22/12/2009: “Red Hat will drop the Itanic”
56 arqAva Itanium 2 Superes-56Montecito L1 2*16KB Latencia 1 L2 256KB Latencia 5..7 L3 ..24MB Latencia Superescalar de grado 6 23 unidades funcionales: 6 ALU, 6 MALU, 2+2Mem, 3 Salto, 2+2FPU Muchos registros (328): 128 Enteros (64+1 “NaT” bits) 128 Coma Flotante (82 bits) 8 Saltos (64 bits) 64 Predicados (1 bit) Pipeline de 8 etapas DirVir 64bits y DirReal 50bits 1700 mill. Transis. 24MB 3.692$ Dual y Quad Core L3 L2 L1I L1D 1,6GHz 128
57 arqAva Itanium: Límites al ILP Superes-57Complejidad de la planificación dinámica (Hw) Explicitly Parallel Instruction Computer Saltos => Dependencias, Errores de predicción Ejecución predicada (PREDICATION) Predicción FIN Latencia de memoria ¡ Muy lenta ! Cargas especulativas Todo junto =>? Mejora del 79%
58 arqAva Itanium: complejidad planificación dinámica Superes-58Código fuente original Código reordenado Código máquina secuencial Compilador Hardware Paraleliza Varias U.F. U.F. desaprovechadas ? Los procesadores frecuentemente están el 60% desocupados
59 arqAva Itanium: EPIC Superes-59Paralelismo Explícito (EPIC) Compilador (paraleliza) Código máquina paralelo Código fuente original Hardware Varias U.F. Ventana más grande U.F. más aprovechadas ? Se incrementa la ejecución paralela
60 arqAva Itanium: EPIC + VLIW Superes-60Paralelismo Explícito (EPIC + VLIW) Instrucciones agrupadas en fardos (bundle) de 3 en 3 Instrucción 2 Instrucción 1 Instrucción 0 Temp S 41 4 1 Instrucción 2 Instrucción 1 Instrucción 0 Temp S 41 4 1 Se pueden encadenar: Escalabilidad en cuanto al número de U.F. Op PRi R1 R2 R3 14 6 7
61 arqAva Itanium: Predication (1) Superes-61Ejecución predicada (IF – THEN – ELSE; NEXT) Arquitectura tradicional cmp THEN ELSE IF NEXT IA64 Cond P1=1 P2=0 P1=0 P2=1 T F p1,p2 cmp P1 P2 Permite eliminar saltos (difíciles de predecir)
62 arqAva Itanium: Predication (2) Superes-62Ejecución Afianzamiento V1 := V1 + 1 V2 := V2 / 2 V3 := V3 * 3 V4 := V4 - 4 V5 := V5 + 1 V6 := V6 - 1 a AND b T F Ejecución con resultados afirmados mediante
63 arqAva Itanium: Predication (3) Superes-63V1 := V1 + 1; IF (a AND b) THEN BEGIN V2 := V2 / 2; V3 := V3 * 3; END; ELSE V4 := V4 - 4; V5 := V5 + 5; V6 := V6 - 6; add RV1, #1 cmp a, #0 --false beq Else cmp b, #0 --false div RV2, #2 mul RV3, #3 bra FinIf Else sub RV4, #4 add RV5, #5 FinIf sub RV6, #6 Pr1, Pr2 := Condición
64 arqAva Itanium: Cargas Especulativas Superes-64Carga de datos de memoria antes de que se necesiten Disminuye el impacto que genera la alta latencia de las memorias Se intenta adelantar las cargas lo máximo posible. Problema: Puede que la carga no sea necesaria t1 = t1 + 1 if t1 > t2 j = a[t1 – t2] j++ Puede que se provoque una falta de página ld.s R2, (Dir2)