Hace 5 años | Por mr_b a lighterra.com
Publicado hace 5 años por mr_b a lighterra.com

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.

Comentarios

S

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

Cehona

#9 Yo reproducia perfectamente mp3 en un AMD 386DX40 y jugaba al Quake, Descent y Rise of the Triad...

S

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

Katipunero

#23 Con un DX2 66 en la práctica no se puede reproducir MP3

systembd

#36 ¡¿Que no hay WebOS?! Ahora verás...
[Se pone a rebuscar en el trastero, encuentra su viejo 486 con botón "turbo"... y no funciona]

S

#41 Tienes razón, lo dicen aqui:

https://www.gamedev.net/articles/programming/general-and-gameplay-programming/a-journey-through-the-cpu-pipeline-r3115/

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:

https://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.

Cehona

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

t

#31 El Quake tenía como requisito como para arrancar un Pentium a 75 MHz:

https://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:

https://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.

Cehona

#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

l

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

D

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

De acuerdo a Wikipedia 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.

apetor

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

t

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

apetor

#51 Si, Michael Abrash y John Carmack, vaya tandem

D

#3 El artículo es de principios de 2015.

Today (early 2015), with several billion transistors now available...

ruben3d

#26 Ha hecho algunas revisiones posteriores: "by Jason Robert Carey Patterson, last updated Aug 2016 (orig Feb 2001)"

apetor

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

editado:
y el register renaming prefetching, etc. pero estan ligadas a las otras dos cosas que digo.

t

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

asturvulpes

#11 Cuando quieras nos ponemos a contarles a estos crios, batallitas en plan abuelo cebolleta

p

#14 Yo ya lo hago con mi hijo, que es informático, y de momento me soporta.
Eso sí, me da mil vueltas.

El abuelo Cebolleta.

F

#14 #16
¡Abuelos!¡La pastilla! lol
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.

asturvulpes

#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!!

lol

eltoloco

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

M

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

D

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

t

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

r

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

asturvulpes

#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!

Junji

"Te acabas de graduar en informática, ........ aunque quizás eso fue hace algunos años."

Suena regular, ¿no?

D

#5 es que si cortas la frase no tiene sentido

gonas

¿Por qué se les sigue nombrando con el prefijo micro? Deberían llamarse procesadores.

p

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

gonas

#8 ¿cuantos procesadores se diseñaron de barbudas y cuántos de silicio? La gran mayoría son micro

p

#12 ¿Ein?

D

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

t

#12 Los de barbudas duraron poco, los pelos se metían en el ventilador y petaban mucho.

Conde_Lito

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

https://en.wikipedia.org/wiki/Central_processing_unit
https://en.wikipedia.org/wiki/Integrated_circuit
https://en.wikipedia.org/wiki/IBM_Standard_Modular_System
https://en.wikipedia.org/wiki/IBM_Solid_Logic_Technology

D

#6 A día de hoy, serían nanoprocesadores.

pip

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

http://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.

CortoCircuito

#24 amén hermano!
Larga vida al Lenguaje Verdadero, C++

t

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

B

Si no te enseñaron lo que es pipeline deberías estar cerca de la jubilación.

asturvulpes

Joer y yo que estudiaba con 6502 que soy arcaico?

p

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

p

#7 Si no recuerdo mal, era éste.

eltoloco

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

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.

Xtampa2

#2 Terminar una carrera de informática sea cual sea tu especialización y no saber el funcionamiento de una CPU moderna

D

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

D

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

editado:
La curiosidad de cada uno con lo que le gusta es otro tema.

D

¿Se puede votar viejuna?

p

#17 lol lol No!

MJDeLarra

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.

D

#4 Yo me interesé en Menéame gracias a estos artículos y sobre todo a los comentarios de la gente en ellos.