[go: up one dir, main page]

0% encontró este documento útil (0 votos)
117 vistas9 páginas

ARM Cortex A53 - Intel Core I7.en - Es

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
117 vistas9 páginas

ARM Cortex A53 - Intel Core I7.en - Es

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 9

358 Capítulo 4 El procesador

4.12 Poniéndolo todo junto: Intel Core i7


6700 y ARM Cortex-A53
En esta sección, exploramos el diseño de dos procesadores de problemas múltiples: el núcleo ARM
Cortex-A53, que se utiliza como base para varias tabletas y teléfonos celulares, y el Intel Core i7 6700,
un procesador especulativo de alta gama, programado dinámicamente. procesador diseñado para
aplicaciones de servidor y de escritorio de alta gama. Comenzamos con el procesador más simple.
Esta sección se basa en la Sección 3.12 de Arquitectura informática: un enfoque cuantitativo, sexta
edición.

El ARM Cortex-A53
El A53 es un superescalar programado estáticamente de doble problema con detección dinámica de problemas,
que permite que el procesador emita dos instrucciones por reloj. Figura
4.74 muestra la estructura básica de la tubería de la tubería. Para nonbranch, integer

F1 F2 F3 F4 Iss Ex1 Ex2 Wr

Integer ejecutar y cargar-almacenar


Búsqueda y predicción de instrucciones

Tubería ALU 0
Entero
AGU Registrarse
+ expediente Tubería ALU 1
TLB Híbrido
vaticinador
Instrucción
Tubería MAC
cache Respóndeme
Indirecto
vaticinador
Dividir la tubería

Asunto
Tubo de carga

Tienda de tubería

Decodificación de instrucciones Ejecución de punto flotante

Tubería MUL / DIV / SQRT


NEÓN
13-Entrada
Temprano Principal Tarde Registrarse
instrucción
descodificar descodificar descodificar expediente
cola Tubería de ALU

D1 D2 D3 F1 F2 F3 F4 F5

FIGURA 4.74 La estructura básica de la canalización de enteros A53 es de ocho etapas: F1 y F2 obtienen la instrucción, D1 y D2 realizan la
decodificación básica y D3 decodifica algunas instrucciones más complejas y se superpone con la primera.
etapa del pipeline de ejecución (ISS). Después de ISS, las etapas Ex1, EX2 y WB completan la canalización de enteros. Las sucursales utilizan cuatro
predictores diferentes, según el tipo. La canalización de ejecución de punto flotante tiene cinco ciclos de profundidad, además de los cinco ciclos necesarios
para buscar y decodificar, lo que arroja un total de 10 etapas. AGU significa Unidad de generación de direcciones y TLB para Transaction Lookaside Buffer
(consulte el Capítulo 5). La unidad NEON ejecuta las instrucciones ARM SIMD del mismo nombre. (De Hennessy JL, Patterson DA: Arquitectura informática: un
enfoque cuantitativo, ed 6, Cambridge MA, 2018, Morgan Kaufmann.)

Este libro pertenece a Gabriel Jimenez ( alexandro.jimenezg@gmail.com ) Copyright Elsevier 2021


4.12 Poniéndolo todo junto: Intel Core i7 6700 y ARM Cortex-A53 359

instrucciones, hay ocho etapas: F1, F2, D1, D2, D3 / ISS, EX1, EX2 y WB, como se describe en el
título. La canalización está en orden, por lo que una instrucción puede iniciar la ejecución solo
cuando sus resultados están disponibles y cuando se han iniciado las instrucciones de
procedimiento. Por lo tanto, si las siguientes dos instrucciones son dependientes, ambas
pueden pasar a la canalización de ejecución adecuada, pero se serializarán cuando lleguen al
comienzo de esa canalización. Cuando la lógica de emisión de la canalización indica que el
resultado de la primera instrucción está disponible, la segunda instrucción puede emitirse.
Los cuatro ciclos de búsqueda de instrucciones incluyen una unidad de generación de
direcciones que produce la siguiente PC incrementando la última PC o desde uno de los cuatro
predictores:

1. Una caché de destino de rama de entrada única que contiene dos recuperaciones de caché de
instrucciones (las siguientes dos instrucciones siguen a la rama, asumiendo que la predicción
es correcta). Esta caché de destino se comprueba durante el primer ciclo de recuperación, si
tiene éxito; luego, las siguientes dos instrucciones se suministran desde la caché de destino.
En caso de acierto y predicción correcta, la rama se ejecuta sin ciclos de retardo.

2. Un predictor híbrido de 3072 entradas, que se utiliza para todas las instrucciones que no llegan a la
caché de destino de la rama y que funciona durante F3. Las ramas manejadas por este predictor
incurren en un retraso de dos ciclos.

3. Un predictor indirecto de rama de 256 entradas que opera durante F4; Las ramas predichas por
este predictor incurren en un retraso de tres ciclos cuando se predicen correctamente.

4. Una pila de retorno de 8 profundidades, que opera durante F4 e incurre en un retraso de tres
ciclos.

Las decisiones de rama se toman en la tubería ALU 0, lo que resulta en una predicción errónea de la
pena de ocho ciclos. La Figura 4.75 muestra la tasa de predicción errónea para SPECint2006.
rama.La cantidad de trabajo que se desperdicia depende tanto de la tasa de predicción errónea como de la

22% 21,0%

20%
18%
Brnach mispredic en tasa

dieciséis%
13,4%
14%
12% 11,1%

10%
8%
5,9%
6% 4,2% 3,7% 3,9% 3,9%
4% 2,9% 2,6% 2,9%
1,3%
2%
0%

FIGURA 4.75 Tasa de predicción errónea del predictor de rama A53 para SPECint2006. ( Adaptado de
Hennessy JL, DA de Patterson: Arquitectura informática: un enfoque cuantitativo, ed 6, Cambridge MA, 2018,
Morgan Kaufmann.)

Este libro pertenece a Gabriel Jimenez ( alexandro.jimenezg@gmail.com ) Copyright Elsevier 2021


360 Capítulo 4 El procesador

22%
19,6%
20%
Porcentaje de desperdicio de trabajo

18% 16,7%
dieciséis% 14,7%
14%
12%
10% 8.5% 8.5% 8,2%
8% 7,2% 7,2% 6,5%
6% 4,6%
4% 2,3%
2% 0,3%
0%

FIGURA 4.76 Trabajo desperdiciado debido a predicciones erróneas de rama en la A53. Debido a que el A53 es una máquina en
orden, la cantidad de trabajo desperdiciado depende de una variedad de factores, incluidas las dependencias de datos.
y fallas de caché, los cuales causarán un bloqueo. ( Adaptado de Hennessy JL, Patterson DA: Arquitectura informática: un
enfoque cuantitativo, ed 6, Cambridge MA, 2018, Morgan Kaufmann.)

tasa de emisión sostenida durante el tiempo en que se siguió la rama mal pronosticada. Como muestra la
Figura 4.76, el trabajo desperdiciado generalmente sigue la tasa de predicción errónea, aunque puede ser
mayor u ocasionalmente menor.

Rendimiento del oleoducto A53


El A53 tiene un CPI ideal de 0.5 debido a su estructura de doble emisión. Las paradas de oleoductos
pueden surgir de tres fuentes:

1. Los peligros funcionales, que ocurren porque dos instrucciones adyacentes seleccionadas para
su emisión simultáneamente, usan la misma tubería funcional. Debido a que el A53 está
programado estáticamente, el compilador debe intentar evitar tales conflictos. Cuando tales
instrucciones aparezcan secuencialmente, serán serializadas al comienzo de la línea de
ejecución, cuando solo la primera instrucción comenzará a ejecutarse.

2. Peligros de datos, que se detectan temprano en la tubería y pueden detener ambas


instrucciones (si la primera no puede emitir, la segunda siempre se detiene) o la segunda de
un par. Una vez más, el compilador debería intentar evitar estos bloqueos cuando sea
posible.

3. Controle los peligros, que surgen solo cuando se predice mal las ramas.

Tanto las fallas de TLB (Capítulo 5) como las fallas de caché también causan bloqueos. La
Figura 4.77 muestra el IPC y las contribuciones estimadas de diversas fuentes.
El A53 utiliza una tubería poco profunda y un predictor de rama razonablemente agresivo, lo que
genera pérdidas modestas en la tubería, al tiempo que permite que el procesador alcance altos

Este libro pertenece a Gabriel Jimenez ( alexandro.jimenezg@gmail.com ) Copyright Elsevier 2021


4.12 Poniéndolo todo junto: Intel Core i7 6700 y ARM Cortex-A53 361

10

La jerarquía de la memoria se atasca

9 Puestos de tubería
8.56
CPI ideal

4
3.37

2.14
1,75 1,76
2
1,33 1,39
1,17 1,22
0,97 1.04 1.07
1

0
hmmer h264ref libquantum perlbench sjeng bzip2 gobmk xalancbmk gcc una estrella omnetpp mcf

FIGURA 4.77 La composición estimada del IPC en el ARM A53 muestra que las paradas de oleoductos son significativas pero son
superadas por pérdidas de caché en los programas de peor desempeño (Capítulo 5). Estos se restan de
el IPC medido por un simulador detallado para obtener las paradas del oleoducto. Las paradas de las tuberías incluyen los tres peligros. (De
Hennessy JL, Patterson DA: Arquitectura informática: un enfoque cuantitativo, ed 6, Cambridge MA, 2018, Morgan Kaufmann.)

velocidades de reloj con un consumo de energía modesto. En comparación con el i7, el A53 consume
aproximadamente 1/200 de la energía de un procesador de cuatro núcleos.

Elaboración : El Cortex-A53 es un núcleo configurable que admite la arquitectura del conjunto de


instrucciones ARMv8. Se entrega como IP ( Propiedad intelectual) núcleo. Los núcleos IP son la forma
dominante de entrega de tecnología en los mercados de dispositivos móviles personales integrados y
relacionados; Se han creado miles de millones de procesadores ARM y MIPS a partir de estos núcleos IP.

Tenga en cuenta que los núcleos IP son diferentes a los núcleos en las computadoras multinúcleo Intel
i7. Un núcleo IP (que en sí mismo puede ser un núcleo múltiple) está diseñado para incorporarse con otra
lógica (por lo tanto, es el "núcleo" de un chip), incluidos los procesadores específicos de la aplicación (como
un codificador o descodificador de video), I / O interfaces e interfaces de memoria, y luego fabricadas para
producir un procesador optimizado para una aplicación en particular. Aunque el núcleo del procesador es
casi idéntico, los chips resultantes tienen muchas diferencias. Un parámetro es el tamaño de la caché L2,
que puede variar en un factor de 16.

Este libro pertenece a Gabriel Jimenez ( alexandro.jimenezg@gmail.com ) Copyright Elsevier 2021


362 Capítulo 4 El procesador

El Intel Core i7 6700


X 86 microprocesadores emplean enfoques sofisticados de canalización, utilizando tanto la
programación dinámica de múltiples problemas como la programación dinámica de
canalización con ejecución fuera de orden y especulación para su canalización de 14 etapas. Sin
embargo, estos procesadores aún enfrentan el desafío de implementar el complejo conjunto
de instrucciones x86, descrito en el Capítulo 2. Intel obtiene instrucciones x86 y las traduce en
instrucciones internas similares a MIPS, que Intel denomina microoperaciones. Las
microoperaciones son luego ejecutadas por una tubería especulativa sofisticada, programada
dinámicamente, capaz de sostener una tasa de ejecución de hasta seis microoperaciones por
ciclo de reloj. Esta sección se centra en esa tubería de microoperaciones.
Cuando consideramos el diseño de procesadores sofisticados y dinámicamente programados, el
diseño de las unidades funcionales, el archivo de caché y registro, el problema de las instrucciones y
el control general de la canalización se entremezclan, lo que dificulta la separación de la ruta de
datos de la canalización. Debido a esta interdependencia, muchos ingenieros e investigadores
utilizan el término microarquitectura para hacer referencia a la arquitectura interna detallada de un
procesador.
El Intel Core i7 usa un esquema para resolver antidependencias y especulaciones incorrectas que
usa un búfer de reorden junto con el cambio de nombre de registros. El cambio de nombre del
registro cambia explícitamente el nombre del registros arquitectónicos en un procesador (16 en el
caso de la versión de 64 bits de la arquitectura x86) a un conjunto mayor de registros físicos. El Core
i7 utiliza el cambio de nombre de registros para eliminar las antidependencias. El cambio de nombre
de registros requiere que el procesador mantenga un mapa entre los registros arquitectónicos y los
registros físicos, indicando qué registro físico es la copia más actual de un registro arquitectónico. Al
realizar un seguimiento de los cambios de nombre que se han producido, el cambio de nombre de
registros ofrece otro enfoque de recuperación en caso de especulación incorrecta: simplemente
deshaga las asignaciones que se han producido desde la primera instrucción especulada
incorrectamente. Este ajuste hará que el estado del procesador vuelva a la última instrucción
ejecutada correctamente, manteniendo el mapeo correcto entre los registros arquitectónicos y
físicos.
La Figura 4.78 muestra la estructura general del oleoducto i7. Examinaremos la canalización
comenzando con la búsqueda de instrucciones y continuando con la confirmación de instrucciones,
siguiendo los ocho pasos etiquetados en la figura.

1. Búsqueda de instrucciones: el procesador utiliza un sofisticado predictor de rama de varios niveles


para lograr un equilibrio entre la velocidad y la precisión de la predicción. También hay una pila de
direcciones de retorno para acelerar el retorno de la función. Las predicciones erróneas provocan
una penalización de unos 17 ciclos. Usando la dirección predicha, la unidad de búsqueda de
instrucciones obtiene 16 bytes de la caché de instrucciones.

2. Los 16 bytes se colocan en el búfer de instrucciones predecodificadas. La etapa


predecodificada también divide los 16 bytes en instrucciones x86 individuales. Este
código previo no es trivial porque la longitud de una instrucción x86 puede ser de 1 a
17 bytes y el predecodificador debe examinar varios bytes antes de conocer la longitud
de la instrucción. Las instrucciones x86 individuales se colocan en la cola de
instrucciones.

Este libro pertenece a Gabriel Jimenez ( alexandro.jimenezg@gmail.com ) Copyright Elsevier 2021


4.12 Poniéndolo todo junto: Intel Core i7 6700 y ARM Cortex-A53 363

128 entradas 32 KB Inst. caché (asociativo de 8 vías)


inst. TLB
(8 direcciones) Pre-decodificación + macro-op
fusión, recuperación de búfer

Instrucción
Cola de instrucciones
ha podido recuperar
hardware

Complejo Sencillo Sencillo Sencillo


macro-op macro-op macro-op macro-op
Micro
descifrador descifrador descifrador descifrador
- código

Búfer de detección de flujo de bucle micro-op de 64 entradas

Registrar tabla de alias y asignador


Jubilación
registrar archivo Búfer de reorden de 224 entradas

Estación de reserva de 97 entradas

ALU ALU Carga Tienda Tienda ALU


cambiar cambiar habla a habla a datos cambiar

SSE SSE SSE


barajar barajar Búfer de orden de memoria barajar
ALU ALU (72 carga; 56 tiendas pendientes) ALU

128 bits 128 bits 128 bits


Tienda
FMUL FMUL FMUL
& carga
FDIV FDIV FDIV

1536-Entrada unificada TLB de datos de 64 entradas Datos de doble puerto de 32 KB Caché l2 unificado
L2 TLB (12 vías) (Asociativo de 4 vías) caché (asociativo de 8 vías) de 256 KB (4 vías)

8 MB de todos los núcleos compartidos e inclusivos L3 Árbitro Uncore (maneja la programación y


caché (asociativo de 16 vías) diferencias de reloj / estado de energía)

FIGURA 4.78 La estructura de canalización de Intel Core i7 que se muestra con los componentes del sistema de memoria. La
profundidad total de la tubería es de 14 etapas, con predicciones erróneas de rama que suelen costar 17 ciclos, y los pocos ciclos
adicionales probablemente se deben al tiempo necesario para restablecer el predictor de rama. Este diseño puede
amortigua 72 cargas y 56 tiendas. Cada una de las seis unidades funcionales independientes puede comenzar la ejecución de una
microoperación lista en el mismo ciclo. Se pueden procesar hasta cuatro microoperaciones en la tabla de cambio de nombre de
registros. El primer procesador i7 se introdujo en 2008; el i7 6700 es la sexta generación. La estructura básica del i7 es similar, pero
las generaciones sucesivas han mejorado el rendimiento al cambiar las estrategias de caché (Capítulo 5), aumentar el ancho de
banda de la memoria, expandir el número de instrucciones en vuelo, mejorar la predicción de bifurcaciones y mejorar el soporte de
gráficos. (De Hennessy JL, Patterson DA: Arquitectura informática: un enfoque cuantitativo, ed 6, Cambridge MA,
2018, Morgan Kaufmann.)

Este libro pertenece a Gabriel Jimenez ( alexandro.jimenezg@gmail.com ) Copyright Elsevier 2021


364 Capítulo 4 El procesador

3. Decodificación microoperativa: tres de los decodificadores manejan instrucciones x86


que se traducen directamente en una microoperación. Para las instrucciones x86 que
tienen una semántica más compleja, existe un motor de microcódigo que se utiliza para
producir la secuencia de microoperaciones; puede producir hasta cuatro
microoperaciones en cada ciclo y continúa hasta que se genera la secuencia de
microoperaciones necesaria. Las microoperaciones se colocan de acuerdo con el orden
de las instrucciones x86 en el búfer de microoperaciones de 64 entradas.

4. Las preformas de tampón de microoperación detección de flujo de bucle —Si hay una
pequeña secuencia de instrucciones (menos de 64 instrucciones) que comprenden un bucle,
el detector de flujo de bucles encontrará el bucle y emitirá directamente las
microoperaciones desde el búfer, eliminando la necesidad de las etapas de búsqueda de
instrucciones y decodificación de instrucciones para ser activado.

5. Realice el problema de la instrucción básica: busque la ubicación del registro en las tablas de
registro, cambie el nombre de los registros, asigne una entrada de búfer de reorden y
obtenga los resultados de los registros o búfer de reorden antes de enviar las
microoperaciones a las estaciones de reserva. Se pueden procesar hasta cuatro
microoperaciones en cada ciclo de reloj; se les asignan las siguientes entradas de búfer de
reordenación disponibles.

6. El i7 utiliza una estación de reserva centralizada compartida por seis unidades funcionales.
Se pueden enviar hasta seis microoperaciones a las unidades funcionales en cada ciclo de
reloj.

7. Las unidades de función individuales ejecutan las microoperaciones y luego los


resultados se envían de regreso a cualquier estación de reserva en espera, así como a
la unidad de retiro de registro, donde actualizarán el estado del registro una vez que se
sepa que la instrucción ya no es especulativa. La entrada correspondiente a la
instrucción en el búfer de reorden se marca como completa.

8. Cuando una o más instrucciones en la cabecera del búfer de reorden se han


marcado como completas, se ejecutan las escrituras pendientes en la unidad de
retiro del registro y las instrucciones se eliminan del búfer de reorden.

Elaboración: El hardware en el segundo y cuarto paso puede combinar o fusible operaciones


juntas para reducir el número de operaciones que deben realizarse. Fusión macro-op
en el segundo paso, toma combinaciones de instrucciones x86, como comparar seguida de una
rama, y las fusiona en una sola operación. Microfusión en el cuarto paso, combina pares de
microoperaciones, como carga / operación ALU y operación / almacenamiento ALU, y los envía a una
única estación de reserva (donde aún pueden emitir de forma independiente), aumentando así el
uso del búfer. En un estudio de la arquitectura Intel Core, que también incorporó microfusión y
macrofusión, Bird et al. [2007] descubrió que la microfusión tenía poco impacto en el rendimiento,
mientras que la macrofusión parece tener un impacto positivo modesto en el rendimiento de
enteros y poco impacto en el rendimiento de punto flotante.

Este libro pertenece a Gabriel Jimenez ( alexandro.jimenezg@gmail.com ) Copyright Elsevier 2021


4.13 Ir más rápido: paralelismo a nivel de instrucción y multiplicación de matrices 365

1,5

1,44
1,37
Ciclos por instrucción

0,81
0,71 0,76
0,68
0,60
0,5 0,54
0,47
0,42 0,41 0,38

0
una estrella bzip2 gcc gobmk h264ref hmmer libquantum mcf omnetpp perlbench sjeng xalancbmk

FIGURA 4.79 El IPC de los puntos de referencia SPECCPUint2006 en el i7 6700. Los datos de esta sección fueron recopilados por el profesor Lu Peng
y el estudiante de doctorado Qun Liu, ambos de la Universidad Estatal de Louisiana.
(Adaptado de Hennessy JL, Patterson DA: Arquitectura informática: un enfoque cuantitativo, ed 6, Cambridge MA, 2018,
Morgan Kaufmann.)

Rendimiento del i7
Debido a la presencia de especulaciones agresivas, es difícil atribuir con precisión la
brecha entre el desempeño idealizado y el desempeño real. Las extensas colas y
búferes en el 6700 reducen la probabilidad de paradas debido a la falta de
estaciones de reserva, cambios de nombre de registros o reordenar búferes de
manera significativa.
Por lo tanto, la mayoría de las pérdidas provienen de predicciones erróneas de sucursales o errores de
caché. El costo de una predicción errónea de rama es de 17 ciclos, mientras que el costo de una falla L1 es
de aproximadamente 10 ciclos (Capítulo 5). Una falla L2 es un poco más de tres veces más costosa que una
falla L1, y una falla L3 cuesta aproximadamente 13 veces lo que cuesta una falla L1 (130-135 ciclos). Aunque
el procesador intentará encontrar instrucciones alternativas para ejecutar durante los fallos de L2 y L3, es
probable que algunos de los búferes se llenen antes de que se complete un fallo, lo que provocará que el
procesador deje de emitir instrucciones.
La Figura 4.79 muestra el IPC general para los 19 puntos de referencia SPECCPUint2006. El
IPC medio del i7 6700 es 0,71. La Figura 4.80 muestra la tasa de predicción errónea de los
predictores de rama del Intel i7 6700. Las tasas de predicción errónea son aproximadamente la
mitad de las del A53 en la Figura 4.76 (la mediana es 2.3% versus 3.9% para SPEC2006) y el IPC
es menos de la mitad: la mediana es 0,64 frente a 1,36 para la arquitectura mucho más
agresiva. La frecuencia de reloj es de 3,4 GHz en el i7 frente a 1,3 GHz en el A53, por lo que el
tiempo medio de instrucción es de 0,64 × 1 / 3,4 GHz = 0,18 ns frente a
1,36 × 1 / 1.3 GHz = 1.05 ns, o más de cinco veces más rápido. Por otro lado, el i7
usa 200 × tanto poder!

Este libro pertenece a Gabriel Jimenez ( alexandro.jimenezg@gmail.com ) Copyright Elsevier 2021


366 Capítulo 4 El procesador

10%
8,2%
8%

5,7%
6%
4,8%
4,2%
4% 3,0%
2,3%
1,9%
2% 1,5%
0,8% 0,9% 0,7%
0,3%
0%

FIGURA 4.80 La tasa de predicción errónea para las pruebas comparativas de números enteros SPECCPU2006 en el Intel Core i7
6700. La tasa de predicción errónea se calcula como la proporción de ramas completadas que están mal pronosticadas frente a todas las
ramas completadas. (Adaptado de Hennessy JL, Patterson DA: Arquitectura informática: un enfoque cuantitativo, ed 6, Cambridge MA,
2018, Morgan Kaufmann.)

El Intel Core i7 combina una canalización de 14 etapas y un problema múltiple agresivo para lograr
un alto rendimiento. Al mantener bajas las latencias para las operaciones consecutivas, se reduce el
impacto de las dependencias de datos. ¿Cuáles son los cuellos de botella potenciales más graves
para el rendimiento de los programas que se ejecutan en este procesador? La siguiente lista incluye
algunos problemas potenciales de rendimiento, los últimos tres de los cuales pueden aplicarse de
alguna forma a cualquier procesador canalizado de alto rendimiento.

■ El uso de instrucciones x86 que no se asignan a unas pocas microoperaciones simples

■ Ramas que son difíciles de predecir, causando que la predicción errónea se detenga y se reinicie
cuando la especulación falla.

■ Dependencias largas: generalmente causadas por instrucciones de larga ejecución o


jerarquía de memoria —Que conducen a puestos

■ Retrasos en el rendimiento que surgen al acceder a la memoria (consulte el Capítulo 5) que hacen que el
procesador se detenga

4.13 Ir más rápido: nivel de instrucción


Paralelismo y multiplicación de matrices
Volviendo al ejemplo de DGEMM del Capítulo 3, podemos ver el impacto del paralelismo en el nivel
de instrucción al desenrollar el bucle de modo que el procesador de ejecución de problemas
múltiples y fuera de orden tenga más instrucciones con las que trabajar. La figura 4.81 muestra la
versión desenrollada de la figura 3.21, que contiene los elementos intrínsecos de C para producir las
instrucciones AVX.
Como en el ejemplo de desenrollado de la Figura 4.71 anterior, vamos a desenrollar el ciclo 4
veces. (Usamos la constante DESENROLLAR en el código C para controlar la cantidad de desenrollado
en caso de que queramos probar otros valores.) En lugar de desenrollar manualmente el ciclo en C
haciendo 4 copias de cada uno de los intrínsecos en la Figura 3.21, podemos confiar

Este libro pertenece a Gabriel Jimenez ( alexandro.jimenezg@gmail.com ) Copyright Elsevier 2021

También podría gustarte