| AMD Athlon 64 |
| 8 de Noviembre del 2004 |
Arquitectura (IV)
El AMD64 comparte gran parte del diseño de su antecesor, el K7, siendo las diferencias más significativas la integración del controlador
de memoria en el propio core del microprocesador, el HyperTransport y la caché L2 (de 16 vías y 1Mb ó 512Kb de tamaño en función del core).
El resto de características permanecen, a grandes rasgos, igual:
· 3 unidades aritmético lógicas (ALU)
· 3 unidades de generación de direcciones (AGU)
· 3 unidades de coma flotante (FPU)
· 3 decodificadores x86

Lo primero que puede pensar uno en cuanto a cómo aumentar el rendimiento de un microprocesador es aumentar el número de estas unidades
funcionales pero en la práctica sucede que esto no repercute en una ganancia proporcional, al margen de la complejidad y coste que ello supondría.
Esta es una de las razones por las que los fabricantes de microprocesadores directamente se decantan por aumentar la frecuencia de los
mismos, o por la que Intel introdujo su tecnología Hyper-Threading.
El hecho de que los microprocesadores sean capaces de leer y ejecutar más de una instrucción por ciclo hace que se produzca una disminución
del rendimiento cuando se ejecutan instrucciones de salto. Esto es debido a que el procesador, al encontrar un salto, detiene el fetch
de instrucciones hasta que el salto no es resuelto.
La predicción de saltos es una técnica que predice el comportamiento de cada instrucción de salto antes de que éste sea resuelto por completo.
Así se consigue que el microprocesador no se ’detenga’ y pueda hacer búsqueda de instrucciones en cada ciclo. La predicción de saltos
puede ser dinámica o estática, en función de si se realiza durante el tiempo de ejecución o compilación, respectivamente.
Dos de las técnicas más importantes en la predicción dinámica de saltos son Branch Target Buffer y los predictores
de dos niveles.
 Workload Branch Prediction
El Branch Target Buffer (BTB) es una pequeña memoria asociativa que guarda las direcciones y destinos de los últimos saltos ejecutados.
Además guarda información que permite predecir si el salto será tomado o no.
La nueva generación de microprocesadores de AMD basados en arquitectura x86-64 tiene un BTB de 2048 direcciones y un Return
Strack de 12 entradas. Además, también utiliza predictores de dos niveles: uno histórico y otro interrelacional.

La predicción basada en interrelaciones se lleva a cabo mediante los Branch Selectors, mientras que en las globales o históricas se
emplea el Global History Counter. Comentar también que el A64 tiene 16384 Branch History Counters, 4 veces más
que su antecesor el K7.
Cuando un salto es ejecutado, el procesador debe comprobar si la dirección previamente predicha es la correcta o no, esto es, si el
salto es tomado y si la dirección de destino que tenía en el BTB es correcta. En la mayoría de los casos la dirección será correcta
dado que la mayoría de saltos tienen siempre la misma dirección de destino, pero la instrucción retorno de función cada vez puede
saltar a una dirección distinta. Para esta instrucción se utiliza una estructura especial denominada return strack.
| 2 BIT BRANCH HISTORY COUNTERS: |
| Counter Value |
Branch Prediction |
| 3 |
Fuertemente tomado |
| 2 |
Débilmente tomado |
| 1 |
Débilmente no tomado |
| 0 |
Fuertemente no tomado |
Para terminar, otra de las mejoras es la que concierne a Branch Target Address Calculator: puede generar
direcciones de 48bits dos ciclos después de que una línea de 16 bytes se haya cargado en la caché. Otra función de la BTAC es hacer
un backup de la BTB.
|