ARM Cortex M0 + CoreMark Ratings

6

Actualmente, cuando trabajo con microcontroladores, uso los PIC de Microchip y estoy bastante contento con ellos. Sin embargo, decidí echar un vistazo a ARM para un posible proyecto próximo. Quería elegir la mejor ARM (la más rápida en los cálculos en el extremo barato / de bajo consumo de energía). En el sitio web de ARM ( aquí ), el Cortex M0 + aparece en 2.46 CoreMark /Megahercio. Pensé que la clasificación CoreMark se aplicaría a todos los microcontroladores con núcleos M0 +, pero en la página Atmel SAM D20 el microcontrolador aparece como que tiene 2.14 CoreMark / MHz. Leí en algunos sitios web que el compilador afecta la puntuación de CoreMark. También he visto que los sitios web listan un M0 + con 1.77 CoreMark / MHz sin hablar de un compilador ( element14 ). También noté que ARM habla sobre el M0 + en un proceso de 40LP, mientras que el sitio element14 habla sobre el ARM en un proceso de 90LP. Desafortunadamente, no conozco la fabricación de procesadores a escala de chip.

Así que mis preguntas son;

  1. ¿Existen variantes del núcleo del procesador M0 +? Si es así, ¿cómo ves cuál es cuál?
  2. Si se programa por lenguaje ensamblador, ¿todos los microcontroladores con núcleos ARM Coretex M0 + tendrán la misma calificación de CoreMark?

Por cierto, el micro que pretendo usar es de la familia MKL03Z. Cualquier información más sería apreciada.

¡Gracias!

    
pregunta Alaba Baju

3 respuestas

7

Respuesta corta:

  1. No

Respuesta larga:

Los núcleos ARM tienen características que cada fabricante puede o no decidir implementar (por ejemplo, cachés, ancho de búsqueda de bus, FPU, MPU, etc.) por supuesto, la disponibilidad depende del tipo de núcleo, por ejemplo, 7xx, 9xx, M0, M0 + , M3, M7, etc.).

Tener o no alguna característica afectará el rendimiento de la CPU.

La siguiente imagen se toma de la hoja de datos de SAMD21. Como puede ver, deciden implementar un multiplicador rápido y un ancho de recuperación de 32 bits. Esto probablemente permitió que el SAMD21 alcanzara una cifra de 2.46 CoreMark / MHz.

Los estados de la hoja de datos:

  

Los dispositivos SAM D21 operan a una frecuencia máxima de 48MHz y alcanzan los 2.46 CoreMark / MHz

(Por cierto, el SAMD20 también indica que puede alcanzar esa cifra, y no solo la 2.14).

  

Los dispositivos SAM D20 operan a una frecuencia máxima de 48MHz y alcanzan 2.46 CoreMark® / MHz.

Si programó en ASM dos Cortex M0 + diferentes, con diferentes opciones (por ejemplo, uno tiene un multiplicador lento y un ancho de búsqueda de bus de 16 bits, y el otro tiene un multiplicador rápido y un ancho de búsqueda de 32 bits), entonces los resultados sé diferente. Los resultados también serían diferentes si la prueba se ejecutara en memorias con diferentes tiempos de acceso.

También, los resultados de Coremark, que se encuentran en el sitio web de Coremark, especifican la versión del compilador (y los indicadores utilizados para compilar la prueba). Por lo tanto, también son dependientes del compilador.

    
respondido por el next-hack
6

No tengo conocimiento de las variantes del núcleo m0 +, pero los diferentes chips tendrán diferentes conexiones de bus de memoria y controladores FLASH. La memoria FLASH suele ser demasiado lenta para mantenerse al día con los microcontroladores modernos. La mayoría de los microcontroladores contarán con aceleradores FLASH para acelerar el acceso secuencial. Sin embargo, en el acceso aleatorio, como un salto o una rama, podría haber múltiples ciclos de espera involucrados.

Esto podría significar que el controlador puede alcanzar una cifra más alta de Coremarks / MHz cuando el controlador se está ejecutando a una velocidad de reloj más baja. Por supuesto, el procesador a una velocidad de reloj más alta completará más cálculos, solo diciendo que podría haber más estados de espera involucrados en relojes más altos. Algunos microcontroladores tienen muy buenos aceleradores FLASH, aunque hay casi cero estados de espera.

Además, algunos microcontroladores pueden tener suficiente espacio SRAM & Bloques para ejecutar el punto de referencia de SRAM. Esto podría ser más rápido si no hay contención con el acceso a los datos. Probablemente ARM probará con esta técnica, ya que están interesados en evaluar su núcleo de CPU y no la implementación FLASH de un proveedor en particular.

Es probable que tan dramática sea la progresión en la tecnología del compilador. Esto podría ser a veces aún más indeterminista. Los compiladores pueden optimizar bastante bien en el caso común, pero aún pueden producir códigos extraños que también cambian en modificaciones de código aparentemente no relacionadas (incluso cuando no estás tocando una rutina en particular).

Además, en mi experiencia, algunos indicadores del compilador específicos de la arquitectura pueden hacer que ciertos programas sean más rápidos y otros más lentos. A veces, O2 o incluso Os crean un código más rápido en GCC que en O3, lo que fue pensado para optimizar la velocidad.

La base de datos de coremark siempre muestra la versión del compilador utilizada y todas las banderas de compilación del programa. Los puntos de referencia no pueden realizar cambios en el código de referencia, por lo que no interfieren demasiado con las optimizaciones que puede hacer el compilador. Asegurarse de que se cumplan estas condiciones es la comparación más justa; pero incluso entonces podría haber diferencias aquí y allá.

    
respondido por el Hans
3

La hoja de datos de SAM D20 se refiere a 2.46 también. Como puede ver, si sigue el enlace en el sitio de Arm al resultado de EEMBC, la configuración de la memoria, el compilador y los indicadores del compilador hacen una diferencia en los resultados de un punto de referencia. Dado que el punto de referencia está escrito en C, es necesario usar un compilador en lugar de escribir en el ensamblador. Esto está en la naturaleza de los puntos de referencia, e incluyen un aspecto de cuán bueno es el objetivo del compilador (y qué tan bien se asigna el código C específico al hardware).

Cortex-M0 + se puede configurar con un multiplicador rápido o pequeño. La hoja de datos para la parte aquí identifica que se implementa la multiplicación de un solo ciclo. La página 40 de la hoja de datos identifica que r0p1 del núcleo del brazo está implementado.

Un factor significativo entre las diferentes partes de MCU de baja potencia podría ser la arquitectura de la memoria. Por ejemplo, el ancho de la memoria flash, cualquier búfer de búsqueda de instrucción intermedia, etc. Es posible, por ejemplo, implementar una memoria flash de instrucción de 16 bits de ancho (ya que el conjunto de instrucciones es Pulgar), o tener una velocidad de reloj de la CPU más alta que la velocidad del flash. (y tal vez una amplia interfaz flash) - todas con diferentes ventajas y desventajas.

    
respondido por el Sean Houlihane

Lea otras preguntas en las etiquetas