Herramientas de usuario

Herramientas del sitio


clase:asir:fhw:1eval:tema03

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)

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

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:

LD A,(#F2A3)
LD B,A
LD A,(#F2A4)
ADD A,B
LD (#F2A5),A

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:

start:
	MOV A, [13]	
	MOV B, [14]	
	ADD A,B
	MOV [15], A	
	HLT

DB 3;
DB 5;
DB 0;
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!!!!.

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). 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.

1)
Es como un proceso o programa en ejecución
clase/asir/fhw/1eval/tema03.txt · Última modificación: 2021/11/04 16:17 por admin