EDICIóN GENERAL
194 meneos
4647 clics
Microprocesadores modernos: una guía de 90 minutos [ENG]

Microprocesadores modernos: una guía de 90 minutos [ENG]  

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
El primer procesador de Intel con pipelining fue el 486, y las cachés se usaban ya en el 386. Lo de las instrucciones SIMD es todavía más viejuno, porque es un concepto que se usaba antes de los RISC/CISC de hoy día y que ahora ha vuelto, y los multi-core son los ordenadores multi-CPU de toda la vida, sólo que ahora se empaquetan juntas en vez de separadas.

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.
#1 Ese artículo fue escrito en 2001, probablemente orientado a gente que estudió bastante antes. Parece mentira, pero han pasado 17 años.
#1 Yo creo que fue el Pentium y solo la unidad de coma flotante estaba segmentada. La primera CPU segmentada podría ser el Pentium Pro o el K5.

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…   » ver todo el comentario
#9 Yo reproducia perfectamente mp3 en un AMD 386DX40 y jugaba al Quake, Descent y Rise of the Triad...
#22 Confundes al Quake con el Doom. Y yo con un 486DX2 a 66MHz tenia que hacer pirulas para poder escuchar sin botes un MP3.
#23 Con un DX2 66 en la práctica no se puede reproducir MP3
#36 ¡¿Que no hay WebOS?! Ahora verás... :ffu:
[Se pone a rebuscar en el trastero, encuentra su viejo 486 con botón "turbo"... y no funciona] :foreveralone:
#41 Tienes razón, lo dicen aqui:

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…   » ver todo el comentario
#22 No confundo al Quake con el Doom ni con el Wolfenstein. Y no tenía ningún lag. Incluso llegue a jugar el primer Tomb Raider de Lara Croft, Comandos...
#31 El Quake tenía como requisito como para arrancar un Pentium a 75 MHz:

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.
#22 Tú en un 386 no jugaba al Quake ni jarto vino. El Quake es especialmente famoso por ser uno de los primeros juegos en tirar mucho de FPU y requerir un Pentium si querías que fuera medio fluido.
#22 Te recuerdo que el 386Dx llevaba copricesador matematico de coma flotante y funciinaba a 40mHz.
El Quake original se jugaba en MS-DOS puro, no MSDOSBox
#43 tiene razón #22. No olvidaré la decepción al ver que mi 486DX4 100 con 16MB de Ram petardeaba que daba gusto con el Quake.
#9 Yo creo que fue el Pentium y solo la unidad de coma flotante estaba segmentada. La primera CPU segmentada podría ser el Pentium Pro o el K5.

<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.
#9 El tema del Quake en 486 vs Pentium tenia otro tema, Carmack se dio cuenta de que podias ejecutar operaciones en la FPU a la vez que en la ALU normal por que era circuiteria independiente, asi que efectivamente duplicaba la velocidad de sus calculos; programo todo de manera que tenia dos unidades de calculo de naturaleza diferente haciendo calculos que el forzo a que se hicieran indistintamente. Esto hizo que los K5 de AMD de la epoca fueran tambien mucho mas lentos.
#45 También hizo las texturas de exactamente el tamaño de la caché de 1er nivel del Pentium, con lo que se aceleraba un montón en el Pentium... pero no en los demás.

El puto amo era el sr Carmack, las filigranas que hizo (y supongo hace todavía) son como para escribir un libro.
#51 Si, Michael Abrash y John Carmack, vaya tandem :-)
#3 El artículo es de principios de 2015.

Today (early 2015), with several billion transistors now available...
#26 Ha hecho algunas revisiones posteriores: "by Jason Robert Carey Patterson, last updated Aug 2016 (orig Feb 2001)"
#1 Bueno, no he leido el articulo todavia, pero, ¿ habla del reordenamiento de ibstrucciones ? Lo que se conoce como OOO o Out Of Order execution, eso y la ejecucion especulativa es lo mas bestia en complejidad, lo que mas ha cambiado los procesadores los ultimos 20 años.

EDIT: y el register renaming prefetching, etc. pero estan ligadas a las otras dos cosas que digo.
#46 Si no voy mal, eso se empezó a hacer con el Pentium, que fue el primer procesador superescalar. Por lo que hablamos de algo de hace 25 años mínimo (y eso suponiendo que el Pentium fue el que lo inventó, que va a ser que no).
Si has terminado la carrera y no sabes lo que es la caché y la jerarquía de memoria la unica explicación es que te han regalado la carrera en la URJC.. :troll:

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.
#2 Terminar una carrera de informática sea cual sea tu especialización y no saber el funcionamiento de una CPU moderna :palm:
#2 El objetivo de una carrera es que tengas unos fundamentos y eso entra dentro de los fundamentos.

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…   » ver todo el comentario
#2 En muchos casos, depende de lo espavilado que esté el profesorado.
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.
Irrelevanterrimo.

Esto es MNM, hay todos somos doctores en ingeniería electrónica. Excepto los del PP, que son licenciados en computación cuántica.
#4 Yo me interesé en Menéame gracias a estos artículos y sobre todo a los comentarios de la gente en ellos.
"Te acabas de graduar en informática, ........ aunque quizás eso fue hace algunos años."

Suena regular, ¿no?
#5 es que si cortas la frase no tiene sentido
¿Por qué se les sigue nombrando con el prefijo micro? Deberían llamarse procesadores.
#6 El ENIAC fue un procesador. Los primeros IBM eran procesadores.
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.
#8 ¿cuantos procesadores se diseñaron de barbudas y cuántos de silicio? La gran mayoría son micro
#12 ¿Ein?
#12. La mayoría de las válvulas de vacío iban rasuradas, por eso en la intimidad también se las llamaba válvulas de bacía, con be.
#12 Los de barbudas duraron poco, los pelos se metían en el ventilador y petaban mucho.
#8 No.
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…   » ver todo el comentario
#6 A día de hoy, serían nanoprocesadores.
Joer y yo que estudiaba con 6502 que soy arcaico?
o_o
#7 Yo estudié Ensamblador y Máquina con un Rockwell AIM65.
4 bit, 4K de memoria y un display alfanumérico de unos 20 caractéres en filamentos verdes.
Sí, somos arcaicos. :-D
#11 Cuando quieras nos ponemos a contarles a estos crios, batallitas en plan abuelo cebolleta
#14 Yo ya lo hago con mi hijo, que es informático, y de momento me soporta. :foreveralone:
Eso sí, me da mil vueltas.

El abuelo Cebolleta.
#14 #16
¡Abuelos!¡La pastilla! xD
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.
#29 Ahhh estos jovenzuelos, que para programar un buscaminas necesitan 4Gb y un 7i. Vaya manera de derrochar.
En mis tiempos si tenias 128kb era un lujo.
Y apaga el ordenador cuando salgas de la habitación que gasta mucha luz.
Derrochones!!

xD
#11 #14 yo aprendí ensamblador el año pasado con el Motorola 68k, un chip de 1976, del mismo año que el AIM65 del que hablas.

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…   » ver todo el comentario
#18 Creia que se habia evolucionado en esto. Yo estudié e hice prácticas con el Motorola 68000 hace ya casi 20 años. Aunque en mi caso no usabamos emuladores si no placas con un 68k.y un programa de ms-dos para manejarlo desde un PC.
#18 La comparación era odiosa y ganó el que ganó. Pero por registros y facilidad de usar la memoria. Era una delicia. Ahora los ARM, otro concepto pero hace maravillas con pocos electrones.
#18 Es que no tiene sentido usar lo último, cuando se trata de aprender los conceptos. Es igual que cuando se enseña a programar usando Pascal o algún lenguaje viejuno de estos, y todo el mundo poniendo el grito en el cielo porque no se usa el último lenguaje de moda.

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.
Qué bien este artículo!. Justo estoy empezando la carrera a distancia y de momento vamos a buen ritmo y me encanta!
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
#38 Yo termine como técnico de telecos, pero no me puedo quejar, eso si después de ser explotado en unas cuantas empresas. Animo!
¿Se puede votar viejuna?
Si no te enseñaron lo que es pipeline deberías estar cerca de la jubilación.
¿Pero qué decís de antiguo?
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.
#24 amén hermano!
Larga vida al Lenguaje Verdadero, C++ :-D
#24 El tema no es que no sea información útil, es vender la cosa como una guía sobre las características de las CPUs modernas, que quizá no te explicaron en la carrera porque aún no se habían inventado. Y eso va a ser que no es.

menéame