Herramientas de usuario

Herramientas del sitio


clase:daw:si:1eval:tema03

03. Procesadores

Procesador

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. Esas instrucciones son los "números" que hemos dicho que se leen de la RAM y que cada "número" significa una instrucción distinta.

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 o Intel 64) AMD PC con mas de 4 GB de RAM
ARMv7 ARM Móviles,tablet,etc de hasta de 4 GB de RAM
ARMv8 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
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 y RISC-V cambiara su sede de USA a Suiza por temores comerciales

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, debe ser programado pensando tanto en la ISA como en el Sistema Operativo.

Información sobre cada una de las ISAs

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.

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

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 guardan son los siguientes bytes de forma consecutiva: 3A F2 D3 47 3A F2 D4 88 32 F2 D5

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

Modelo de Procesador ISA Empresa que diseña la ISA Empresa que diseña la 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

Realmente no nos interesa mucho saber la empresa que fabrica el procesador.Aunque cuando decimos que un procesador es de la empresa "A", estamos diciendo que dicha empresa ha diseñado la microarquitectura de dicho procesador, aunque no haya creado ni la ISA ni lo haya finalmente fabricado.

Ejercicios

Ejercicio 1

Busca 2 procesadores de Intel y 2 de AMD e indica el tamaño de su cache.

Ejercicio 2

Usando los conceptos aprendidos en clase, explica las diferencias entre una CPU y los siguientes tipos de procesadores:

  • GPU
  • iGPU
  • APU
  • IPU

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

Busca la ISA que van a usarse en los procesadores de las nuevas consolas de Sony y Microsoft

Ejercicio 6

La FPU es una de las partes mas importantes de un procesador ya que determina mucho su velocidad, por ello las CPUs actuales suelen llevar varias FPUs y además de que en cada microarquitectura se mejora su velocidad.

Lee el siguiente artículo de Linus Torvalds (el creador de Linux): Linus Torvalds le desea una muerte dolorosa a AVX-512 de Intel

Y usando los conceptos que hemos visto en este tema explica que es "AVX-512" y que opina de las FPUs

Ejercicio 7

Lee el siguiente artículo Linux 5.4 cesa soporte para la arquitectura IA-64 y usando los conceptos que hemos visto en este tema, explica de que está hablando.

Ejercicio 8

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 9

En la página de descarga de Java del JDK 8 y de Java del JDK 14, indica para que combinación de ISA y Sistemas operativos están disponibles cada una de las versiones.

clase/daw/si/1eval/tema03.txt · Última modificación: 2020/12/16 17:15 por admin