[Opinión]Sobre la ineficiencia teórica de los x86

Iniciado por ukol, 21 Marzo 2013, 17:21 PM

0 Miembros y 1 Visitante están viendo este tema.

ukol

Hola, quería saber que opinan ustedes de esta idea.
He buscado artículos pero no encontré demasiado. Los datos están ahí pero no me apetece analizarlos de momento, quizá ustedes lo sepan.
La idea es que los procesadores x86 son muy ineficientes en general intrínsecamente por su diseño y arquitectura.
Mi argumento principal que respalda esto es su complicado juego de instrucciones.
Quizá muchos de ustedes han intentado alguna vez crear un desensamblador de x86, en C por ejemplo, y no es algo trivial ni fácil, el código que necesita es bastante y necesariamente complicado, no hay soluciones demasiado elegantes (a mi juicio).
Eso que nosotros hacemos en C o cualquier otro lenguaje, los microprocesadores tienen que hacerlo pero por medio de hardware, transistores, unidades lógicas. Ello hace que necesiten muchos más transistores que otras arquitecturas, y por tanto más consumo de potencia, o sea, eficiencia (da igual, energética o de potencia de cálculo, no diferencio).
Quizá sea por ello que en los sistemas empotrados x86 desaparece por completo, en general. Se tiende a microprocesadores ARM por ejemplo que consumen muchísimo menos y tienen gran potencia (aunque menos que los x86 que usan mucha más energía y frecuencias).
Es otra de las causas quizá por la que las GPU's, sus núcleos de procesamiento, tampoco usan x86, bueno, esto sería obvio ya que tienen otros usos más específicos, pero bueno, podrían compartir el juego básico, todo microprocesador tiene instrucciones de control, de movimiento de datos, etc.
Me consta también que Intel muchas veces "inteltó" (chiste malo) deshacerse del juego de instrucciones sustituyéndolo por otros, pero no pudo por el mercado.
Y mi atrevida sugerencia: si usáramos el mismo número de transistores y la misma frecuencia (y la misma técnica de última generación litográfica, etc), en un procesador tipo ARM, RISC o lo que sea, que un x86 actual, se superaría enormemente la potencia de cálculo.
El problema es arrastrar esa vieja compatibilidad "hacia atrás" (por la voz inglesa), que sólo obliga al diseño a estar estancado, cargando con viejas funcionalidades obsoletas que lo limitan, es una especie de evolución darwiniana de los procesadores, en que quedan miembros inútiles que antiguamente eran usados (tenía un nombre que ahora no recuerdo, si me lo pudieran recordar... :)

Otra idea que arroja esto, es que Intel debería estar realmente interesado en la pervivencia del modelo de código cerrado, ya que si pudiéramos usar sólo código abierto, no habría tanta dificultad en compilar los sistemas para cualquier máquina.

Se me olvidó mencionar también la idea, de que mucha de la lógica de los x86, se empeña en optimizar este código, de alguna manera estas unidades sobran en otra arquitectura, y habría espacio para otro tipo de lógica, o son complejas, en otra arquitectura serían más simples.

En resumen, más transistores = más potencia, es obvio, pero transitores mejor utilizados, también = a más potencia.

Karcrack

La única diferencia que soy capaz de ver con mi limitado conocimiento interno de las arquitecturas (al menos entre x86 y ARM) es el tamaño de las instrucciones. En x86 es variable y en ARM no.

La arquitectura que mejor conozco es MIPS, también con tamaño de instrucción fijo (32b), porque la estudiamos en la universidad. Sé que dado el tamaño fijo se puede preveer la posición de la siguiente instrucción con seguridad (salvo que haya algún branch, entonces habría que desechar lo avanzado). Con esto se pueden ir solapando acciones de lectura, reconocimiento de instrucciónes, banco de registros... Por el contrario entiendo que en x86, al tener tamaño variable de instrucción, se debe primero traducir la instrucción y añadir circuitería para variar el IP dependiendo...

Aún con estás deducciones no soy capaz de ver la problemática de la que hablas...

Arkangel_0x7C5

En teoria, se supone que arm es mas eficiente porque usa el paradigma de que teniendo pocas y pequeñas instrucciones se pueden optimizar mejor que si tienes muchas instrucciones que hacen cosas complejas. Y tambien al tener pocas instrucciones es mas rapido decadificarlas.

Y no se eliminan instrucciones porque estarias cambiando de familia de procesadores. con lo cual habria muchos programas que ya no serian compatibles. eso inclulle programas normales, compiladores SO etc. Es como cuando windows cambia el modelo de sus driver que se arma un buen follon

Saludos