Propiedades ARM8/ARMv4 para la comparación cualitativa entre diseños de procesadores RISC, CISC y MISC

Pregunta:

Me pregunto si alguien sabe aproximadamente qué tipo de consumo de energía se puede esperar de un procesador ARM que tenga la arquitectura ARM8 (conjunto de instrucciones ARMv4). (Editado)

Nota: no estoy buscando especificaciones técnicas, sino un consumo de energía aproximado en circunstancias 'típicas' (lo típico se deja abierto).

Para el tamaño del conjunto de instrucciones ARM8/ARMv4, no he encontrado una fuente que simplemente las enumere todas para ARM8 (aparte de la hoja de datos, ¡que requeriría contar manualmente!). Sorprendentemente, no pude encontrar ningún material de marketing o resumen técnico que enumerara el tamaño de la instrucción, a diferencia de Intel, donde fue fácil encontrar que 80486 tiene alrededor de 190 instrucciones.

Editar: contando libremente el conjunto de instrucciones ARMv4, obtengo aproximadamente entre 75 y 100 instrucciones, dependiendo de si una incluye variaciones menores o no.

Contexto: (Editado)

Espero usar la información para hacer una comparación aproximada pero cualitativamente correcta entre chips similares de capacidad similar pero con diseños diferentes, es decir, RISC, CISC o MISC (conjunto mínimo de instrucciones).

Para CISC, tengo el Intel 80486 a aproximadamente 50 MIPS, 190 instrucciones, pero usa la friolera de 1,2 millones de transistores y consume ~ 3W de potencia.

Para RISC, tengo el ARM8 a 84 MIPS, 75-100 instrucciones, usando menos de 50k transistores y consumiendo ??W de potencia.

Pero, en mi opinión, lo más interesante es MISC, específicamente el chip MuP21 Forth-in-hardware de Chuck Moore, que se enumera con un rendimiento de aproximadamente 80 MIPS, tiene solo 25 instrucciones, solo 7k transistores y un consumo de energía de 50 mW.

Se espera que completar la información del chip ARM respalde las comparaciones de factor / orden de magnitud entre los tres diseños.

Recuerde que ARM8 es una arquitectura , mientras que los otros dos que ha enumerado son productos reales. Puede haber muchas implementaciones de ARM8 (aunque Wikipedia solo enumera una).
La serie Cortex M parecería más razonable para la comparación en este nivel de rendimiento. (M0+ parece ser muy pequeño.) Renesas RX es un CISC ISA moderno (de bajo consumo), pero podría tener una implementación de gama muy baja. Uno también querría comparar con la misma tecnología de fabricación. El rendimiento y la eficiencia energética dependen de la carga de trabajo y se pueden hacer concesiones entre el área, la potencia y el rendimiento.
Además, ¿por qué le preocupa la cantidad de instrucciones? (Puede ser difícil contar las instrucciones. Por ejemplo, ¿la variante de ADD en ARM que establece el código de condición es una instrucción diferente?)
@PaulA.Clayton: Estuvo de acuerdo en que el tamaño de la instrucción es el menos importante de los atributos. Lo he incluido con la idea de que da una indicación aproximada de la complejidad de las instrucciones que los diseñadores de chips tienen que integrar en el silicio. Contando libremente el conjunto de instrucciones ARMV4, obtengo entre 75 y 100 instrucciones. Eso sigue siendo casi 3 veces más que el número en el MuP21 y aproximadamente la mitad del número en el 486, lo que parece cualitativamente correcto.
@PaulA.Clayton: Tiene razón sobre el cuidado que se debe tener para presentar un caso académico. Lo que me interesa aquí son las comparaciones cualitativamente correctas y los números que indican aproximadamente la diferencia de tamaño (factores/orden de magnitud) entre los tres tipos de diseños. Entre Cortex M y Renesas Rx, ¿cuál cree que sería una mejor comparación con un chip Intel 486?
@AKE: RX es un CISC pero tiene mucho menos cruft que un 486, por lo que sería un mejor candidato para un CISC moderno (es decir, una comparación justa). Desafortunadamente, la tecnología de proceso. (y el tamaño del núcleo) para RX210 no parece ser información pública, pero Renesas publica su clasificación de amperios/DMIPS. ARM publica W/MHz y DMIPS/MHz para diferentes tecnologías de proceso. implementaciones de varios diseños, por lo que si uno supiera la tecnología del proceso. de RX210 se podría hacer una comparación. Tanto CISC como RISC hacen concesiones para obtener un rendimiento más escalable. en relación con una pila ISA, por lo que una comparación justa es difícil.

Respuestas (1)

No vas a poder llegar a un resultado de manera concluyente, no es posible. La evaluación comparativa siempre es subjetiva y, a menudo, se puede usar y se usa para dar el resultado deseado (A es mejor, B es mejor, C es mejor, etc.).

El número de instrucciones no es relevante, al igual que el número de registros, etc. El número de transistores es interesante, pero comparar un solo chip soc con un procesador que requiere chips externos para proporcionar la misma funcionalidad. O un chip puede tener grandes partes desactivadas en cualquier momento en relación con el otro, o puede tener una gran parte desactivada para completar el punto de referencia, o uno puede tener más transistores, pero cambiarlos con menos frecuencia que el otro que tiene menos. posiblemente conduciendo a un consumo de energía diferente.

Intel fabrica y vende chips que tienen (gran parte) de sus cosas adentro. Arm no fabrica chips, vende IP. Al igual que la rapidez con la que se ejecuta este programa en forma de código fuente, varía ampliamente según las opciones del compilador, el procesador, etc. Esa misma IP puede consumir cantidades de energía muy diferentes según la biblioteca de celdas y la fundición y el proceso utilizado para implementarlo. Misma arquitectura, misma frecuencia de reloj, diferente consumo de energía. Entonces, de inmediato estás comparando manzanas con naranjas de otra manera. No puedo pensar en un caso real en el que el núcleo del brazo sea todo lo que hay en el chip, generalmente envuelves el brazo en el chip con muchas cosas, cosas que con el otro procesador estarían fuera del chip. La comparación adecuada sería todo el sistema, no solo la potencia del procesador.

Esto lo lleva a las diferencias de reloj, un procesador puede ser mucho más eficiente que otro y puede realizar el mismo punto de referencia a una frecuencia de reloj diferente o, de lo contrario, usar menos hardware o energía o lo que sea. Es muy fácil escribir un punto de referencia que se ejecuta en una pequeña placa de microcontrolador alimentada por batería que usa menos energía que una computadora x86, incluso si el x86 está o podría estar muy bajo. Igual de fácil es escribir un punto de referencia que se ejecute a la velocidad del rayo en un x86 que le lleve una eternidad a ese microcontrolador. Incluso si los registraste igual o pudiste.

Solo los compiladores hacen que la misma computadora ejecute el mismo código fuente y velocidades muy diferentes. Simplemente no es posible comparar dos sistemas de esta manera excepto indicando claramente el punto de referencia exacto. Este código específico compilado para velocidad utilizando este compilador que se verificó manualmente para producir esta calidad de código optimizado, se ejecutó en este sistema específico con el sistema consumiendo tanta energía. Este otro sistema que usa este compilador verificado a mano para proporcionar una optimización similar, requirió esta frecuencia de reloj y esta cantidad de energía para ejecutarse aproximadamente al mismo tiempo. Repita para cada una de las infinitas aplicaciones de referencia que podrían interesar a los usuarios.

La comparación mips/mhz se basa en gran medida en el compilador y la aplicación, grandes variaciones en mips en el mismo sistema sin cambios de hardware. De ninguna manera puedes realmente comparar dos procesadores con este método. Mips publicados a mhz es solo marketing, ignóralo. Del mismo modo, puede confiar tanto en el consumo de energía publicado como en los números de mips/mhz, se basó en algún punto de referencia, si su aplicación no es el mismo punto de referencia, ¿de qué sirve?

Necesitará crear una serie de sistemas (disponer cada diseño de placa específico para el punto de referencia) e intentar reducir el número de variables, o idealmente adoptar el enfoque de hacer que el sistema mínimo básico, la optimización máxima, sea capaz de ejecutar el punto de referencia en exactamente X cantidad de tiempo. Repita para el otro sistema, luego compare el consumo de energía de todo el sistema durante la ejecución de ese punto de referencia. Repita para los millones de puntos de referencia diferentes, para obtener una comparación justa y general, puede que no sea posible reducir los resultados de manera concluyente.

Para una diferencia de arquitectura, lo ideal es que los procesadores se construyan en la misma fundición utilizando la misma biblioteca de celdas y el mismo proceso, etc. Si está dispuesto y puede licenciar núcleos de la competencia, llene los chips al mismo nivel, use velocidades de bus similares y tanto hardware externo similar (los buses del sistema son sin duda diferentes, hacer un bus común a partir de ellos podría dar una ventaja injusta). La misma cantidad de cachés con las mismas ventajas, etc. Es posible que tenga una mejor oportunidad de hacer una comparación que realmente parezca real. Esta sería la única forma de encontrar algo plausible, el mismo punto de referencia ejecutado en diferentes arquitecturas hechas en la misma fundición, la misma biblioteca de celdas, el mismo proceso, el mismo tamaño de caché, el mismo dram, etc. Todavía se pueden manipular los puntos de referencia para hacer cualquiera de los dos. el consumidor de energía más rápido o más bajo.

Lo que sería más interesante es una comparación empírica. Tome o cree puntos de referencia uno a la vez, observe las diversas formas de generar código a partir del compilador. Examine los autobuses que puede examinar, tenga una idea de los tamaños de búsqueda. Si es posible, con las instrucciones de longitud de palabra fija frente a variable, ¿puede saber en los buses dónde se toman las decisiones de longitud variable? , ahora puedes ejecutar. ¿Cuánto tiene que estar atascado cerca del decodificador para que sea eficiente? ¿Cuánto tienes que desechar y buscar si hay una rama, qué tan rápido sucede esto? Debe observar la cantidad de código para realizar tareas similares, debido a la diferente cantidad de registros (reales o virtuales) (x86 está microcodificado o muchos lo están, arm no está microcodificado) con qué frecuencia el código tiene que intercambiar registros en la pila (muy fácil de escribir puntos de referencia que castigan una arquitectura en relación con otra por esto). x86 puede almacenar más programas en el caché del mismo tamaño que un brazo, pero el brazo es más determinista al decodificar ese código. x86 incurre en más castigos de alineación que el brazo, ya que se presta a no alinearse donde se fomenta o se fuerza el brazo. ¿Puede construir puntos de referencia que muestren una ventaja para cada conjunto de instrucciones? Debería ser muy fácil hacer un bucle que se ajuste a las instrucciones x86 dentro de un caché de cierto tamaño, pero no se ajuste a las instrucciones de brazo en el caché del mismo tamaño. podría ser fácil tener un punto de referencia que se bifurque mucho y que pueda mostrar ventajas de brazos o al menos calzar un predictor de rama frente a otro. los relojes y la energía todavía están fuera de escena,

De todos modos, eso fue una tangente, no puede comparar dos procesadores de esta manera y hacer que los que saben acepten los resultados como algo significativo. Las masas pueden ser engañadas, pero no aquellos que saben lo que está pasando. Demostrando empíricamente ventajas y desventajas, que pueden ser más factibles e interesantes para todos. comparar opencores en la misma fpga, eso también podría ser interesante, pero un chip de procesador comercial en una placa comercial, en comparación con IP que se puede implementar de muchas maneras diferentes en muchas placas diferentes, simplemente no será plausible.

Hola, gracias por una respuesta tan detallada. Por lo tanto, estoy de acuerdo con muchos de sus puntos. Y sus recomendaciones parecen muy razonables si uno estuviera interesado en un estudio definitivo , tal vez una disertación o un informe técnico completo. Sin embargo, seguramente debe haber una manera de usar las especificaciones para comprender las diferencias de rendimiento relativas entre diferentes arquitecturas/diseños. De lo contrario, ¿cuál es el uso de las especificaciones en absoluto?
En cierta medida, las especificaciones son precisas, en otra medida, las especificaciones son publicidad que intenta venderle un producto con luces intermitentes y bailarinas. Las especificaciones de los chips que usan núcleos de brazo están disponibles, el problema es que no se pueden comparar manzanas con manzanas con, por ejemplo, un chip 486. Tienes que mirar el sistema. sin embargo, la arquitectura es un diseño y el código fuente no es una implementación, por lo que no tiene ni puede tener un número de poder hasta que se implemente. Al igual que compilar un programa, cada implementación de la misma fuente puede variar bastante.
Me parece bien. ¿Tiene alguna opinión sobre los chips MISC que ejecutan un modelo de pila, por lo tanto, más simple que cualquiera de los otros dos? Ese es el principal motivo de la comparación, ya que los chips MISC son, según sus especificaciones, capaces de ofrecer un rendimiento comparable con un consumo de energía sustancialmente menor utilizando un silicio mucho más simple.
No estoy nada familiarizado con ese chip/arquitectura. por lo general, el silicio más simple, especialmente basado en la pila, significa muchos más ciclos de memoria, lo que generalmente es más lento. Realmente tendría que verlo en acción, ¿hay una fuente verilog que pueda usarse en una simulación? (¿verilador o ícaro?)
Veo lo que quieres decir con misc. De wikipedia: La desventaja es que las instrucciones tienden a tener más dependencias secuenciales, lo que reduce el paralelismo a nivel de instrucción.
Supongo que necesitaría una velocidad de reloj muchas veces más rápida que risc o cisc más un almacenamiento en caché costoso por encima de lo que necesitan cisc y risc. esto puede o no afectar en general la potencia requerida para realizar la misma tarea. depende mucho de cuán mínimo sea mínimo.
Esta es precisamente la sorpresa: manteniendo la velocidad del reloj constante en alrededor de 80 MIPS, MISC usa sustancialmente menos energía (50mW) que CISC (3W), y es mucho más simple en la cantidad de transistores utilizados en el silicio. Entonces, a pesar de sus comentarios anteriores sobre comparaciones de evaluación comparativa, en términos generales, MISC parece ser un diseño de chip bastante notable. Echa un vistazo a este análisis de Chuck Moore MuP21 High Performance MISC Processor
tenga en cuenta que esa página/documento se escribió hace mucho tiempo, y RISC ha mejorado mucho desde entonces, por lo que esas afirmaciones ya no son tan ciertas. el principal problema con misc es la falta de una tubería. su rendimiento será horrible debido a la falta de canalización, la cantidad de pasos necesarios para realizar la misma tarea y el uso intensivo de la memoria externa. por lo tanto, el costo y la potencia provendrán de las frecuencias de reloj más altas necesarias para obtener un rendimiento de ejecución general similar de una tarea.
ya habríamos visto el hardware de Java si este fuera un camino realmente viable. no es que no haya hardware, pero ciertamente no se discute comúnmente cuando se habla de cisc vs risc