03. Procesadores

Material

Procesadores

El procesador ejecuta una serie de instrucciones en código máquina. Estas instrucciones no son mas que "números" en binario que entran a través del Bus desde la RAM. Cuando llegan esos "números" se realizan una serie de cálculos.

El resultado de los cálculos del procesador se puede almacenar en la RAM, en el sistema de Entrada/Salida o dentro del procesador en una pequeña memoria llamada "REGISTROS". Estos registros los usa el programador para almacenar datos temporales y no tener que almacenarlos en la RAM.

Arquitectura del Conjunto de Instrucciones (ISA)

Instruction set architecture

Una Arquitectura del Conjunto de Instrucciones (ISA) especifica las instrucciones que "entiende" el procesador y los registros que posee dicho procesador. Por lo que para un programador , lo importante de un procesador es su ISA ya que indica como va a poder el programador , programar ese procesador.

A la ISA también se le llama a veces simplemente "Arquitectura", pero no confundir con la "Microarquitectura" (Que vamos a ver también en este tema)
Nombre ISA	Empresa que la ha creado	Ámbito
x86 (tambien llamada IA32)	Intel	PC de hasta de 4 GB de RAM
x64 (tambien llamada AMD64, EM64T, x86-64, Intel 64)	AMD	PC con mas de 4 GB de RAM
ARMv7 (tambien llamada AArch32)	ARM	Móviles,tablet,etc de hasta de 4 GB de RAM
ARMv8 (tambien llamada AArch64)	ARM	Móviles,tablet,etc con mas de 4 GB de RAM
Power	IBM	Estaciones de trabajo RISC, Antiguos Mac y en consolas como PS3 y XBox 360. La desquiciante historia en la que el desarrollo de Cell, sentó la base del procesador de Xbox 360
SPARC	Oracle/Sun	Estaciones de trabajo RISC
RISC-V	RISC-V Fundation	Pretende ser una alternativa a ARM que no pueda ser censurada por los gobiernos. RISC-V pude ser la clave para que Huawei no sea afectado por el veto comercial , RISC-V cambiara su sede de USA a Suiza por temores comerciales , RISC-V: Why The ISA Battles Aren't Over Yet y Alibaba presento los nuevos procesadores RISC-V XuanTie

Lo importante de una ISA es que un programa de ordenador solo puede ser escrito para una ISA concreta y no funcionará para otra ISA. Aunque también un programa, debido a que funciona sobre un sistema operativo, el programa debe ser programador pensando tanto en la ISA como en el Sistema Operativo.

Información sobre cada una de las ISAs

https://es.wikipedia.org/wiki/X86

https://es.wikipedia.org/wiki/X86-64

https://en.wikipedia.org/wiki/ARM_architecture

https://en.wikipedia.org/wiki/Power_ISA

https://en.wikipedia.org/wiki/SPARC

https://en.wikipedia.org/wiki/RISC-V

Normalmente las ISA se organizan en si son de 32 bits o de 64 bits. La diferencia principal es la cantidad de RAM a la que pueden acceder. Ya que esos 32 o 64 , es el Nº de Bits que se envían por el bus para indicar el Nº de celda de la RAM a leer o escribir.

Decir que las arquitecturas de PC (x86 y x64) al necesitar procesadores muy "grandes", tienen un gran consumo energético y son caros, aunque tengan un gran rendimiento. Por ello Apple ha decidido pasar de los procesadores con la ISA de x64 a procesadores con la ISA ARMv8.

Características de las ISA

Las ISA tiene 2 características principales:

Complejidad de las instrucciones:

CICS: Tienen muchas instrucciones y cada instrucción puede hacer muchas cosas.

RISC: Tienen pocas instrucciones y cada instrucción hace una única cosa.

Cantidad máxima de la RAM a la que puede acceder:

32 Bits: Solo pueden acceder como máximo a 4 GigaBytes de RAM. Ya que 232=4 GB.

64 Bits: Pueden acceder a 16 ExaBytes de RAM. Ya que 264=16 EB.

Complejidad/Máxima RAM	32 Bits	64 Bits
CISC	x86	x64
RISC	ARMv7, Power, SPARC, RISC-V	ARMv8, Power, SPARC, RISC-V

Como podemos ver , excepto para los PC, el resto de ISA son de tipo RISC. Esto es así ya que las ISA CISC son muy antiguas y poco eficientes. En la actualidad se siguen usando en los PCs por motivos de compatibilidad hacia atrás.

Ensamblador

El lenguaje ensamblado es el lenguaje que usamos las personas para escribir programas para un procesador. Prácticamente es como indicar los "números" directamente al procesador pero de una forma mas legible para una persona. El código máquina se refiere a los números directamente que entiende el ordenador y que es lo que se almacena en la RAM.

Como ejemplo de ensamblador vamos a usar el procesador Z-80 (un procesador de 8 bits) ya que es muy sencillo.

El Z-80 tiene:

Entre otros dos registros llamados "A" y "B"

Una ALU

Veamos el siguiente programa en ensamblador:

Vamos a explicar línea por línea:

LD A,(#F2D3): Lee el valor de la celda de memoria "F2D3" y la carga en el registro A . Notar que el Nº de la celda está en hexadecimal

LD B,A: Carga en el registro B el valor del registro A. Es realmente copiar el valor de un registro en otro.

LD A,(#F2D4): Lee el valor de la celda de memoria "F2D4" y la carga en el registro A. Notar que el Nº de la celda está en hexadecimal

ADD A,B: Usando la ALU,suma el valor del registro A y el registro B y deja el resultado en el registro A

LD (#F2D5),A: Guarda en la posición de memoria "F2D5" el valor del registro A

¿Que hace realmente eso? Simplemente suma el contenido de las celdas de memoria "F2D3" y "F2D4" dejando el resultado en "F2D5".

Ahora veamos ese programa como sería en código máquina

Instrucción en ensamblador	Instrucción en código máquina
LD A,(#F2D3)	3AF2D3
LD B,A	47
LD A,(#F2D4)	3AF2D4
ADD A,B	88
LD (#F2D5),A	32F2D5

Es decir que en la RAM, en las celdas realmente lo que se guarda es el código máquina que son los siguientes bytes de forma consecutiva: 3A F2 D3 47 3A F2 D4 88 32 F2 D5

Otra forma de ver el código máquina es la siguiente, en la que vemos en cada celda de la RAM, el valor que tiene.

Posición de la RAM	Valor
0000	3A
0001	F2
0002	D3
0003	47
0004	3A
0005	F2
0006	D4
0007	88
0008	32
0009	F2
000A	D5
...
...
F2D3	3
F2D4	5
F2D5
...
...
FFFE
FFFF

Cuando vemos ese números , no tiene mucho significado pero como acabamos de ver , son las instrucciones que se dan al procesador.

Hemos dicho que los programa de ordenador son distintos para cada ISA ya que en cada ISA los registros son distintos y además el código máquina también es totalmente distinto.

En la siguiente página: http://schweigi.github.io/assembler-simulator/, podemos ejecutar el siguiente programa que es muy similar de una ISA distinta: Que suma los valores 3 y 5 que hay en las posiciones de memoria 13 y 14. Dejan el resultado en la posición de memoria 15

Si te interesa mas el lenguaje ensamblador. Puedes leerte el libro x86-64 Assembly Language Programming with Ubuntu
¿Que relación tiene el siguiente artículo con lo que acabamos de contar? Cyberpunk 2077 tiene peor rendimiento en CPUs AMD Ryzen, ¿por qué?

Unidades Funcionales

Ahora vamos a ver como es el procesador por dentro, como ya hemos indicado , el procesador tiene una serie de registros que vienen determinados por la ISA. Junto con ellos dentro del procesador están las siguientes unidades funcionales:

Unidad de Control: Es que la que organiza todo el procesador para que realice cada unidad su trabajo . Es el verdadero cerebro de la CPU

Registros: Son como variable dentro del procesador. Ocupan unos pocos bytes cada uno de ellos.

ALU: Realiza operaciones aritméticas sin decimales (sumas, restas, etc)

FPU: Realiza operaciones aritméticas CON decimales (sumas, restas,divisiones,multiplicaciones, etc)

Unidad de predicción de saltos: En caso de un salto (instrucción de if o for) aquí predice cual es el siguiente código a ejecutar.

Cache: Es una copia de la RAM con los datos que mas se usan. Cuanto mayor tamaño mejor ya que la RAM es muy lenta y sin datos o programa , la CPU debe esperar a leer de la RAM. Existen 3 tipos de cache. L1, L2 y L3.

En la siguiente imagen podemos ver las unidades en un procesador Zen de AMD:

Decode y Scheduler: Forma parte de la Unidad de control.

Registros: No aparecen los registro en el esquema ya que físicamente ocupan poquísimo

ALU: Es la ALU

Floating Point: Es la FPU

Branch Prediction: Es la Unidad de predicción de saltos

Data cache: Es la cache L1 con datos

ICache: Es la cache L1 con instrucciones

Load/Store: Leer y escribe los datos en la RAM

L2: Junto al procesador se encuentra otra cache llamada L2 que es mas grande que la L1 pero mas lenta.

Microarquitectura

Es como los ingenieros diseñan el procesador para ser lo mas rápido posible. En los procesadores de Intel son cada una de las generaciones. 1º Gen, 2º Gen , etc. En los procesadores AMD tenemos Zen, Zen+ , Zen 2, Zen 3.

Cada año que pasa , se diseñan mejores microarquitecturas para hacer mas rápido el procesador pero su ISA es la misma para de esa forma que los programas sigan sirviendo en el nuevo procesador. Por lo tanto al comprar un procesador lo que nos interesa saber es su microarquitectura ya que eso determina el rendimiento.

Fabricante

Es el que finalmente fabrica el procesador (o cualquier otro chip) en las fábricas de procesadores. No tiene porque ser la misma empresa que diseña la microarquitectura o crea la ISA.

Hay pocas fabricas de chips en el mundo. En la siguiente página de la Wikipedia podemos ver las fábricas que hay Lista de plantas de fabricación de semicondictores

Veamos ahora un resumen de los 3 parámetros (ISA, Microarquitectura, Fabricante)

Modelo de Procesador	ISA	Empresa que diseña la ISA	Empresa que diseña el Procesador (Microarquitectura)	Empresa que fabrica el procesador
Intel i486DX	x86	Intel	Intel	Intel
AMD Am486	x86	Intel	AMD	AMD
Intel Core i7-10700K	x64	AMD	Intel	Intel
AMD Ryzen 9 3900X 3.8 GHz	x64	AMD	AMD	TSMC
Snapdragon 800	ARMv7	ARM	Qualcomm	TSMC
A5	ARMv7	ARM	Apple	Samsung
Snapdragon 865	ARMv8	ARM	Qualcomm	TSMC
A11	ARMv8	ARM	Apple	TSMC
Exynos 990	ARMv8	ARM	Samsung	Samsung

Lo importante de esto es realmente la microarquitectura, ya que es lo de determina el rendimiento. Quien lo fabrique finalmente es lo de menos y el ISA que se usa no es muy determinante ya que por ahora en PC el ISA es el x64 y en móviles el ARMv8. Aunque es un movimiento genial de Apple, va a empezar a sacar Mac con procesadores ARM!!!!.

How ARM has already saved Apple - twice

ARM Mac

El chip ARM "T3" de los próximos MacBook puede superar en rendimiento incluso a los de Intel

La insorportable inevitabilidad del MacBook ARM

Apple Could Switch to ARM, But Replacing Xeon Is No Simple Endeavor

Así que cuando decimos que un procesador es de cierta empresa , estamos diciendo que dicha empresa ha diseñado la microarquitectura de dicho procesador, aunque no ha ya creado ni la ISA ni lo haya finalmente fabricado. Aunque vamos a complicar un poco mas las cosas para los procesadores ARM. Hemos dicho que ARM ha creado las ISAs (ARMv7 y ARMv8) pero también diseña microarquitecturas. Son los llamados "Cortex-A55, Cortex-A75, etc). Así que cuando decimos que Samsung ha diseñado el procesador "Exynos 990" , realmente lo que hace es usar alguna microarquitectura "Cortex" en ese procesador o modificaciones de ella. Aunque Apple en sus últimos procesadores ya diseña prácticamente todo el procesador.

Núcleos e hilos

Hemos visto como es un procesador o CPU, pero ahora hay que distinguir entre los siguientes 3 conceptos:

Procesador o CPU

Núcleo

Hilos por núcleo

Veamos cada uno de ellos

Procesador o CPU: Es el "aparator" que compras, que tienes en la mano y que pones en la placa base.

Núcleos: Los procesadores actuales realmente tiene dentro varios "subprocesadores" a lo que ahora se les llama núcleos o core en inglés. Es como tener 2 procesadores dentro de un solo procesadores. Y como hemos dicho se llaman ahora "cores".

Hilos por núcleo: Es un único núcleo que permite ejecutar mas de un Thread1) Es como un proceso o programa en ejecución . Pero para ello cada hilo debe compartir compartir las ALUs, las FPUs, etc. Lo único que no se comparte y que se duplica son los registros. Se llama la tecnología Simultaneous Multithreading pero Intel la llama "Hyper-Threading". Una explicación en Qué son los hilos de un procesador ? Diferencias con los núcleos. Aunque el Multithreading se basa en que un procesador puede estar haciendo cálculos con la ALU o con la FPU por lo que la otra unidad está ociosa. Por lo tanto si ejecuta a la vez instrucciones de dos hilos, puede estar a la vez ejecutando cosas en la ALU y en la FPU por lo que trabajaría el doble con el mismo hardware. Pero eso no sería así , en caso de que los dos hilos quieran hacer cálculos en la ALU o ambos en la FPU.

Por lo que en una placa se pueden poner uno o mas procesadores, cada procesador tiene uno o mas núcleos y cada núcleo puede ejecutar uno o mas hilos.

La ley de Amdahl

La Ley de Amdahl, dice que según lo paralelizable que sea un programa, hay un límite al Nº de núcleos que se necesitan. Es decir , que aunque se añadan mas núcleos no va a mejorar prácticamente el rendimiento. Por lo que que tener mas núcleos no significa que siempre un procesador sea mas rápido.

Cache

La cache es como una pequeña memoria RAM que se encuentra dentro del procesador. La cache es fundamental en cualquier procesador ya que la RAM es demasiado lenta para enviar los datos y las instrucciones que necesita un procesador ya que el procesador funciona muy muy rápido en comparación con la RAM. La cache almacena las instrucciones y/o datos que mas usa la CPU y de esa forma no tiene que perder el tiempo en ir a buscarlo a la RAM.

Hay de 3 tipos de caches:

L3: Es la cache que comparten todos los núcleos. Solo hay una en cada procesador. Es la de mayor capacidad pero la mas lenta.

L2: Es una cache privada para cada núcleo , pero está fuera del núcleo.Tiene una capacidad intermedia y una velocidad intermedia.

L1: Es una cache privada para cada núcleo , pero está dentro del núcleo. Es la de menor capacidad pero la mas rápida. Se divide en Cache de Datos y Cache de instrucciones.

Si solo nos dicen un único tamaño de la cache de un procesador, se están refiriendo a la cache L3.

En la siguiente figura se puede ver un procesador con 4 cores y las caches

Los círculos grandes son las caches L2 de cada core y los círculos pequeños son las caches L1 de cada core.

Frecuencia

Otra característica importante del procesador en la Frecuencia a la que funciona, que se mide en GHz. Es decir la velocidad a la que ejecuta cada instrucción

Es importante destacar que no se puede comparar directamente la frecuencia de dos procesadores con microarquitectura distinta. Aunque uno vaya mas rápido que el otro (a mayor frecuencia) no significa que vaya mas rápido.Eso es así ya que por ejemplo la FPU de un proceesador a 2,2 Ghz podría ser mucho mas rápida que una la de otro procesador a 2,5 GHz

Socket

El socket (o Zócalo en castellano) es "el conector" donde se pone el procesador. El socket se encuentra en la placa base. Los procesadores están diseñador para una forma de socket en concreto. Varios modelos de procesadores pueden diseñarse para el mismo modelo de Socket. Pero lo contrario no es cierto. Además los Sockets entre fabricantes suelen ser incompatibles. En el siguiente artículo se pueden ver para cada procesador el socket que usa: What Is a CPU Socket? A Basic Definition

Un Socket al fin y al cabo es como un enchufe y un conector pero con muchísimos "pines". Dependiendo del tipo de Socket los "pines" pueden estar en la placa base o en el procesador.

Socket PGA: Tiene los pines en el procesador

Socket LGA: Tiene los pines en la placa base

La tendencia es a que se use LGA ya que permite mas densidad de pines. Actualmente (2021) AMD usa PGA e Intel PGA.

Mas información en ¿Qué tipo de socket es mejor a la hora de comprar tu placa base?.

Ejercicios

Ejercicio 1

Busca un procesador Intel en internet he indica:

Modelo

ISA y tipo (CISC o RISC)

Microarquitectura

Frecuencia

Nº de Núcleos

Nº de Hilos que se ejecutan por núcleo

Nº de Hilos que se ejecutan en total

Si soporta "Simultaneous Multithreading"

Modelo del Socket

Tamaño de la caché

L3

L2

L1

Datos

Instrucciones

Precio

Ejercicio 2

Busca un procesador AMD en internet he indica:

Modelo

ISA y tipo (CISC o RISC)

Microarquitectura

Frecuencia

Nº de Núcleos

Nº de Hilos que se ejecutan por núcleo

Nº de Hilos que se ejecutan en total

Si soporta "Simultaneous Multithreading"

Modelo del Socket

Tamaño de la caché

L3

L2

L1

Datos

Instrucciones

Precio

Ejercicio 3

Escribe un programa en ensamblado para el Z-80 que sume el valor de las posiciones de memoria 68A3 y DDF2 y deje el resultado en la posición de memoria ABCD.

Indica el código máquina de dicho programa.

Ejercicio 4

Si un programa funciona en un procesador de Sansung con ISA ARMv8, ¿funcionará dicho programa con un procesador Qualcomm cuya ISA es ARMv8? Es decir , si funcionará con dos procesadores de marcas distintas. ¿Explica porque?

Ejercicio 5

Rellena las siguientes tablas.

Consola	Modelo del Procesador	ISA	CISC o RISC
Xbox Original
Xbox 360
Xbox One
Xbox Series X
Consola	Modelo del Procesador	ISA	CISC o RISC
PlayStation
PlayStation 2
PlayStation 3
PlayStation 4
PlayStation 5

Ejercicio 6

Indica para las siguientes ISA de ARM si son ISAs de 32 bits o 64 bits:

ARMv6

ARMv7

ARMv8

Y indica también la máxima RAM a la que puede acceder cada uno de ellos.

Ejercicio 7

En la página de descarga de Java del JDK 8 y de Java del JDK 14, indica para que ISA's está disponibles cada una de las versiones.