Te acabas de graduar en informática, donde diste un curso de hardware como parte de tu carrera, aunque quizás eso fue hace algunos años y te has perdido los detalles de diseño de procesadores desde entonces. En particular es posible que no tengas conocimiento de algunos temas clave que se desarrollaron rápidamente en los últimos tiempos, como pipelining, multi-core y multi-threading simétrico, instrucciones con vectores (SIMD) y cachés y jerarquía de memoria. Pero no te preocupes. Este artículo te pondrá al día rápido.
|
etiquetas: microprocesadores , modernos , guía , 90 minutos , pipeline
Vamos, que no es que se haya reinventado la rueda, todo son evoluciones y refinamientos sobre lo mismo. No veo que el que haya aprendido los conceptos "clásicos" tenga que tener problemas entendiendo las CPUs modernas.
Ahora en serio, si acabas de terminar ingeniería informática y no sabes los detalles de funcionamiento de una CPU moderna, lo más probable es que te hayas especializado en cualquier rama distinta a la de hardware, ya sea programación, sistemas, seguridad, redes o lo que sea. Y por lo tanto no te vas a dedicar a diseñar chips ni a programar a bajo nivel, y lo más probable es que siga sin interesarte aprenderlos.
Esto es MNM, hay todos somos doctores en ingeniería electrónica. Excepto los del PP, que son licenciados en computación cuántica.
Suena regular, ¿no?
Se aplicó el micro, cuando se desarrollaron los primeros circuitos integrados. Primero fueron los operacionales, que podían funcionar como amplificadores, flip-flops, puertas lógicas...
Como ya hablamos de microchips, y no transistores discretos o válvulas, se tomó el prefijo micro para todo lo integrado en una plaquita de silicio.
Y cada vez son más micro.
El Pentium era dos 486 unidos, uno SX (sin coma flotante) y otro DX (con coma flotante). Podía llegar a ejecutar dos instrucciones a la vez, pero lo que fue una revolución fue la unidad de coma flotante segmentada, por eso había tanta diferencia entre ejecutar el Quake en un 486 y en un Pentium. Lo mismo reproduciendo MP3. Reproducir MP3 en un 486 era casi imposible, tenias que bajarlo a mono, los Khz, el bitrate,... porque sino iba a botes. Mientras que un pentium reproducia los MP3 sin problemas.
#3 Y si sigue siendo valido hoy en día, quizás es que la arquitectura de CPU haya llegado a su límite. Recuerdo hace años rumores de una tecnología de AMD para ejecutar un único hijo en dos cores doblando la velocidad de ejecución... La fallida IA-64 de Intel...
4 bit, 4K de memoria y un display alfanumérico de unos 20 caractéres en filamentos verdes.
Sí, somos arcaicos.
Eso sí, me da mil vueltas.
El abuelo Cebolleta.
Y según comentaban mis profesores, esto seguirá siendo así durante mucho tiempo, por varios motivos:
Principalmente porque el ensamblador de x86 es tremendamente complicado, por lo que no es útil a nivel pedagógico, mientras que el ensamblador del 68k es una delicia, ideal para aprender.
También porque existe un emulador de 68k que es una maravilla; Easy68k. Lo malo es que solo está para Windows, dentro de lo malo; funciona con Wine.
Y dentro de lo arcaico, no lo es tanto, pues aunque resulte sorprendente el 68k se sigue fabricando hoy en día, para usarlo en equipos empotrados, aunque cada vez se usa menos en favor de ARM.
Ahí hay cosas que todo programador debería de conocer, y algunas como la predicción de saltos aún no están ni estandarizadas es los compiladores.
Por ejemplo en C++20 hay una propuesta de atributo [likely] para ayudar manualmente al compilador a saber que rama es más probable y ordenar el código (ahora hay builtins y/o atributos propietarios pero no estándar)
www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0479r2.html
Eso, cachés, programación paralela, etc, está a la orden del día y hay que saberlo.
Today (early 2015), with several billion transistors now available...
Un procesador y un microprocesador es lo mismo.
Raramente oirás a un electrónico hablar de microchips, normalmente solemos decir circuito integrado o integrado. En inglés chip o IC.
Los primeros circuitos integrados se empezaron a comercializar a principios de los 60 y los mainframes de aquella época no utilizaban circuitos integrados sino que utilizaban componentes discretos, transistores y diodos principalmente.
Por ejemplo el IBM 1401 utilizaba un montón de placas para hacer sus puertas lógicas a base de diodos y transistores, conocidas como SMS, muchas eran idénticas, variaban dependiendo lo que esas placas de circuito impreso hicieran.
Estoy hablando así en general, sin profundizar nada, ya que esto daría para mucho rato y te podría escribir la biblia.
El IBM 360 utilizaba otras placas llamadas SLT, eran idénticas pero estas ya llevaban circuitos integrados lógicos y de memoria propietarios, el IBM 1401 creo que iba con memoria magnética (Core Memroy)
Lo que hizo el procesador o microprocesador fue integrar todas esas placas de las que he hablado antes en un espacio diminuto muy reducido, al menos la mayoría de las dedicadas a hacer los cálculos, gestionar el micro código, entradas / salidas / línea de direcciones y demás, en los 70 la gestión de interrupciones, periféricos, memoria, etc., normalmente iban fuera.
Todo son ventajas, menor tamaño, menor consumo, mayor velocidad de los electrones al no haber grandes distancias entre los diferentes componentes, ni cambios de medio, con lo que apenas hay pérdida de señal por lo que no se requiere volver a amplificarla y repetirla.
Claro está, esto no pasó con el primer procesdor, el Intel 4004, este estaba destinado a usarse en una calculadora, no era comparable a ningún ordenador de la época.
en.wikipedia.org/wiki/Central_processing_unit
en.wikipedia.org/wiki/Integrated_circuit
en.wikipedia.org/wiki/IBM_Standard_Modular_System
en.wikipedia.org/wiki/IBM_Solid_Logic_Technology
¡Abuelos!¡La pastilla!
Yo solo di el 8086 y en primero, desde entonces, creo que solo lo he vuelto a usar (el lenguajes ensamblador) una vez en mi vida profesional.
Si no tienes nociones de cómo funciona el hardware te falta una pata importante a la hora de comprender cómo funcionan las herramientas que usas, independientemente de si programas microcontroladores en ensamblador o te dedicas al "big data".
Luego viene la gente diciendo que Java es rápido por nosequé microbenchmark o que el tamaño del código no importa porque hay mucha RAM sin comprender el impacto que tiene el tamaño del código en la cantidad de veces que el procesador pierde ciclos esperando a la caché o sin darse cuenta de que la maravillosa herramienta de indexado que están creando va a tener picos de latencia e incluso bloqueos debido a la acción del recolector de basura.
En estos campos, el que se despista... Y la edad tiene esas cosas.
Edit. La curiosidad de cada uno con lo que le gusta es otro tema.
Espero que algún día me pueda dar de comer y no tardar demasiados años en acabarla que ya estoy mayor y es mi segunda...
PD: Los viejunos, creéis que me arrepentiré?¿ #11 #14
[Se pone a rebuscar en el trastero, encuentra su viejo 486 con botón "turbo"... y no funciona]
Larga vida al Lenguaje Verdadero, C++
<a href="en.wikipedia.org/wiki/X86#Chronology">De acuerdo a Wikipedia</a> el primer procesador completamente segmentado fue el 486.
Es cierto que la FPU del Pentium era más rápida, pero ni el Quake ni la mayoría de los decodificadores de MP3 usaban punto flotante, sino que usaban punto fijo. Y la FPU del 486 ya era segmentada también, lo que sí pasaba es que estaba en un chip separado, no integrada con la CPU.
El Quake original se jugaba en MS-DOS puro, no MSDOSBox
EDIT: y el register renaming prefetching, etc. pero estan ligadas a las otras dos cosas que digo.
En mis tiempos si tenias 128kb era un lujo.
Y apaga el ordenador cuando salgas de la habitación que gasta mucha luz.
Derrochones!!
El puto amo era el sr Carmack, las filigranas que hizo (y supongo hace todavía) son como para escribir un libro.
gamesystemrequirements.com/game/quake
Ni de coña funciona en un 386. De hecho, aquí hay quien lo ha ejecutado en un 386, y le funciona a 1,8 fps:
www.vogons.org/viewtopic.php?t=30500
De hecho, parece que en el README del Quake el propio John Romero dice que lo mínimo recomendado es un Pentium, con un 486 puede arrancar pero no se recomienda, y que de 386 nanay.
Cuando aprendes a programar luego te da igual el lenguaje que sea, te adaptas en dos patadas. Igual que si aprendes ensamblador de una CPU, luego pasarte a otra tampoco tiene mucho misterio.
upload.wikimedia.org/wikipedia/commons/thumb/b/b2/NES-Console-Set.png/
www.gamedev.net/articles/programming/general-and-gameplay-programming/
el 486 had a 5-stage pipeline.
Me estaba confudiendo con el Pentium Pro, que fue el primero de Intel en convertir las instrucciones CISC en RISC.
x86 instructions are decoded into 118-bit micro-operations (micro-ops). The micro-ops are RISC-like; that is, they encode an operation, two sources, and a destination.
Aqui dice que la unidad de coma flotante del 486 estaba integrada en la CPU:
es.wikipedia.org/wiki/Intel_80486
" Las diferencias principales son que los i486 tienen un conjunto de instrucciones optimizado, una unidad de coma flotante y un caché unificado integrados en el propio circuito integrado del microprocesador y una unidad de interfaz de bus mejorada."
#36 Ya te he dicho que si, pero había que bajarle la calidad... Me sorprende que me digas eso del MP3 y no le digas nada al que dice que jugo al Quake con su 386.
#45 Creo que la doble pipeline de los Pentium era conocido por todos los programadores.