Colección de citas famosas - Slogan de motivación - La diferencia entre el análisis del procesador ARM ARM7, ARM9 y ARM11

La diferencia entre el análisis del procesador ARM ARM7, ARM9 y ARM11

La diferencia entre el análisis del procesador ARM ARM7, ARM9 y ARM11

ARM7 es una estructura lenta de Von Noy y una estructura de canalización de tres niveles

ARM9 y ARM11 son Estructuras de Harvard, estructura de canalización de 5 etapas, por lo que el rendimiento es mayor.

La mayoría de ARM9 y ARM11 tienen administradores de memoria, que son mejores para ejecutar sistemas operativos. ARM7 es adecuado para realizar rachas.

Existen dos series, ARM9 y ARM9E, en lo que comúnmente llamamos serie ARM9. ARM9 pertenece a la arquitectura ARM v4T, con procesadores típicos como ARM9TDMI y ARM922T mientras que ARM9E pertenece a la arquitectura ARM v5TE; , con procesadores típicos como ARM926EJ y ARM946E. Debido a que este último tiene una mayor cantidad de chips y es más utilizado, cuando mencionamos ARM9, nos referimos más específicamente a los procesadores de la serie ARM9E (principalmente los dos procesadores ARM926EJ y ARM946E). La siguiente introducción a ARM9 también se centra más en ARM9E.

La diferencia entre el procesador ARM7 y el procesador ARM9E

Para los diseñadores de sistemas integrados, el hardware suele ser la primera consideración. Para los procesadores, la tubería es el signo más obvio de diferencias de hardware. Los diferentes diseños de tubería producirán una serie de diferencias de hardware. Comparemos las canalizaciones de ARM7 y ARM9E.

ARM9E ha aumentado de la canalización de 3 niveles de ARM7 a la canalización de 5 niveles. La canalización ARM9E admite operaciones más lógicas, pero las operaciones lógicas en cada nivel se vuelven más simples. Por ejemplo, en la canalización original de tercer nivel de ARM7, primero es necesario leer el registro internamente, luego realizar operaciones lógicas y aritméticas relacionadas y luego escribir los resultados del procesamiento. Las acciones completadas son muy complicadas; -La canalización de nivel de ARM9E, la lectura de registros, las operaciones lógicas y la reescritura de resultados se encuentran dispersas en diferentes canalizaciones, lo que hace que las acciones de cada nivel de procesamiento de canalización sean muy simples. Esto permite aumentar considerablemente la frecuencia principal del procesador. Debido a que cada nivel de canalización corresponde a un ciclo de reloj de la CPU, si la lógica en la canalización de primer nivel es demasiado compleja y el tiempo de ejecución sigue siendo alto, el ciclo de reloj requerido inevitablemente será más largo y la frecuencia principal de la CPU no podrá ser aumentó. Por lo tanto, el alargamiento de la tubería favorece el aumento de la frecuencia de la CPU. En los procesos de producción de chips comunes, ARM7 generalmente funciona a alrededor de 100 MHz, mientras que ARM9E funciona al menos por encima de 200 MHz.

Subsistema de memoria del procesador ARM9E

Los dos procesadores ARM9E más comunes, ARM926EJ y ARM946E, vienen con un subsistema de memoria para mejorar el rendimiento del sistema y admitir sistemas operativos grandes. Como se muestra en la Figura 2, un subsistema de memoria incluye una MMU (unidad de administración de memoria) o MPU (unidad de protección de memoria), un caché (Cache) y un búfer de escritura (Write Buffer) que la CPU está conectada al sistema de memoria del sistema a través de este subsistema.

La introducción del caché y el caché de escritura se basa en el hecho de que la velocidad del procesador es mucho mayor que la velocidad de acceso a la memoria, si el acceso a la memoria se convierte en el cuello de botella del rendimiento del sistema, sin importar qué tan rápido sea el procesador; Será un desperdicio porque la velocidad de procesamiento. El procesador necesita pasar mucho tiempo esperando memoria. El caché se utiliza para resolver este problema. Puede almacenar códigos y datos usados ​​recientemente y proporcionárselos a la CPU para que los procese a la velocidad más rápida (la CPU no necesita esperar para acceder al caché).

El subsistema de memoria dentro de un procesador complejo.

MMU es una unidad de hardware utilizada para admitir la administración de memoria para satisfacer las necesidades de administración de memoria de los sistemas operativos de plataforma modernos. Incluye principalmente dos funciones: una es admitir la asignación de direcciones virtuales/físicas y la otra es admitir la asignación de direcciones virtuales/físicas; proporcionar diferentes memorias Mecanismo de protección del espacio de direcciones. Un ejemplo simple puede ayudarnos a comprender la función de MMU.

Bajo un sistema operativo, los desarrolladores de programas desarrollan programas bajo la API y el modelo de programación proporcionado por el sistema operativo, por lo general solo abre una Determinar la memoria; espacio de direcciones proporcionado al usuario.

Esto provoca un problema directo. Todos los programas de aplicación utilizan el mismo espacio de direcciones de memoria. Si estos programas se inician al mismo tiempo (esto es muy común en los sistemas multitarea actuales), se producirá un conflicto de acceso a la memoria. Entonces, ¿cómo evita el sistema operativo este problema?

El sistema operativo utilizará la unidad de hardware MMU para completar la conversión de direcciones virtuales de acceso a memoria a direcciones físicas. La llamada dirección virtual es la dirección lógica utilizada por los programadores en el programa, mientras que la dirección física es la dirección espacial de la unidad de memoria real. MMU puede asignar la misma dirección virtual a diferentes direcciones físicas mediante ciertas reglas. De esta manera, incluso si se inician varios procesos de programa utilizando la misma dirección virtual, se pueden asignar a diferentes direcciones físicas mediante la programación MMU sin causar errores del sistema.

Las funciones y funciones de MMU.

Además de procesar la función de asignación de direcciones, la MMU también puede establecer diferentes atributos de acceso para diferentes espacios de direcciones. Por ejemplo, el sistema operativo configura su propio espacio de direcciones del programa del kernel para que sea inaccesible en modo usuario, de modo que las aplicaciones del usuario no puedan acceder al espacio, garantizando así la seguridad del kernel del sistema operativo. La diferencia entre MPU y MMU es que solo tiene la función de configurar atributos de acceso para el espacio de direcciones pero no tiene la función de mapeo de direcciones.

La introducción de unidades de hardware como Cache y MMU ha traído muchos cambios nuevos al modelo de programación de los programadores de sistemas. Además de la necesidad de dominar los conceptos básicos y los métodos de uso, los siguientes puntos para la optimización del sistema son interesantes e importantes:

1. Consideraciones del sistema en tiempo real

Porque las reglas de asignación de direcciones. se guardan La tabla de páginas es muy grande. Por lo general, la MMU solo almacena una pequeña sección del contenido de la tabla de páginas de uso común. La mayor parte del contenido de la tabla de páginas se almacena en la memoria principal. Es posible que la MMU necesite leer la memoria principal para actualizar las tablas de páginas. En algunos casos, esto puede provocar una pérdida de rendimiento en tiempo real del sistema. Por ejemplo, cuando es necesario ejecutar un código de programa clave, si por casualidad el espacio de direcciones utilizado por este código no está dentro del rango de procesamiento de la tabla de páginas de la MMU actual, la MMU primero debe actualizar la tabla de páginas y luego completar la asignación de direcciones. y luego acceder a la memoria correspondiente. Todo el proceso de decodificación de direcciones es muy largo, lo que tiene un impacto muy negativo en el rendimiento en tiempo real; Por lo tanto, en términos generales, los sistemas con MMU y caché no son tan buenos como algunos procesadores simples en rendimiento en tiempo real; sin embargo, existen algunos métodos que pueden ayudar a mejorar la eficiencia en tiempo real de estos sistemas;

Una forma sencilla es apagar la MMU y la caché cuando sea necesario, para que se convierta en un procesador simple, que puede mejorar inmediatamente el rendimiento en tiempo real del sistema. Por supuesto, en muchos casos esto no es factible; en el diseño de caché y MMU de ARM, hay una función de bloqueo, lo que significa que puede especificar que una determinada tabla de páginas no se actualizará en la MMU y un determinado fragmento de código o. los datos pueden estar en la caché bloqueados sin ser actualizados; los programadores pueden usar esta función para admitir aquellos códigos con los requisitos más altos en tiempo real, asegurando que estos códigos siempre reciban la respuesta y el soporte más rápidos.

2. Optimización del software del sistema

En el desarrollo de sistemas integrados, muchos métodos de optimización del software del sistema son los mismos y comunes. En la mayoría de los casos, esta regla también se aplica a la arquitectura ARM9E. Si ya es un experto en programación ARM7, felicitaciones, los métodos de optimización que domina antes se pueden usar en la nueva plataforma ARM9E, pero habrá algunas características nuevas que requerirán que preste más atención. Lo más importante es la función del caché. El caché en sí no provoca cambios en los modelos e interfaces de programación, pero si examinamos el comportamiento del caché, podemos encontrar que el caché tiene un impacto relativamente grande en la optimización del software.

La caché es físicamente una SRAM de alta velocidad. El ancho de la organización de la caché (línea de caché) de ARM9E es de 4 palabras (es decir, 32 bytes) el comportamiento de la caché está controlado por el controlador del sistema; miembro del programa, el controlador del sistema copiará el contenido cerca de la dirección de memoria a la que se accedió recientemente a la caché. De esta manera, cuando la CPU accede a la siguiente unidad de memoria (este acceso puede ser una recuperación de instrucciones o datos), puede ser que esta memoria. unidad El contenido ya está en la caché, por lo que la CPU no necesita leer el contenido de la memoria principal, sino que puede leer directamente el contenido en la caché, lo que acelera el acceso. A partir del principio de funcionamiento de la caché, podemos ver que, de hecho, la programación de la caché se basa en la probabilidad. Los datos a los que accede la CPU pueden ya existir en la caché (acierto de caché) o pueden no existir (fallo de caché). En el caso de un error de caché, la velocidad de la CPU para acceder a la memoria será peor que sin un caché, porque además de acceder a los datos de la memoria, la CPU también necesita procesar el juicio de acierto o error del caché. como actualizar el contenido de la caché y otras acciones. Sólo cuando los beneficios aportados por los aciertos de la caché superan los sacrificios provocados por los fallos de la caché se puede mejorar el rendimiento general del sistema, por lo que la tasa de aciertos de la caché se convierte en un indicador de optimización muy importante.

De acuerdo con las características del comportamiento de la caché, podemos obtener intuitivamente algunos métodos para mejorar la tasa de aciertos de la caché, como colocar el código y los datos relacionados con la función juntos tanto como sea posible para reducir el número de saltos; A menudo causa pérdida de caché. Mantenga el tamaño de función apropiado y no escriba demasiados cuerpos de función que sean demasiado pequeños, porque el flujo de ejecución lineal del programa es el más compatible con el caché. Es mejor colocar el cuerpo del bucle en una dirección alineada con 4 palabras. Esto garantiza que el cuerpo del bucle esté alineado en filas en el caché y ocupe el número mínimo de líneas de caché, de modo que el cuerpo del bucle que se llama varias veces pueda lograrlo. mejor eficiencia de ejecución.

Mejora en el rendimiento y la eficiencia

Como se mencionó anteriormente, la mejora del rendimiento de ARM9E en comparación con ARM7 no solo se refleja en el hecho de que ARM9E tiene una frecuencia principal más rápida y más funciones de hardware, También se refleja en la eficiencia de ejecución de determinadas instrucciones. Podemos medir la eficiencia de ejecución por la cantidad de ciclos de reloj de la CPU (Ciclo); cuando ejecuta el mismo programa, el procesador ARM9E puede ahorrar aproximadamente un 30% de los ciclos de reloj que el ARM7.

La mejora en la eficiencia proviene principalmente de la mejora de ARM9E en la eficiencia de ejecución de las instrucciones Load-Store. Sabemos que en los procesadores de arquitectura RISC, aproximadamente el 30% de las instrucciones del programa son instrucciones de carga y almacenamiento, y la eficiencia de estas instrucciones constituye la contribución más obvia a la eficiencia del sistema. Hay dos factores en ARM9E que ayudan a mejorar la eficiencia de las instrucciones Load-Store:

1) El núcleo ARM9 es una arquitectura Harvard con buses de instrucción y datos independientes, en consecuencia, el núcleo ARM7 está multiplexado con instrucciones y; Buses de datos. La arquitectura de von Neumann.

2) El diseño de canalización de 5 etapas de ARM9 coloca el acceso a la memoria y la reescritura de registros en diferentes canalizaciones.

La combinación de ambos permite que se complete una instrucción Load o Store en cada ciclo de reloj de la CPU durante la ejecución del flujo de instrucciones. La siguiente tabla compara las instrucciones Load -Store entre los procesadores ARM7 y ARM9. Se puede ver que todas las instrucciones de almacenamiento ARM9 ahorran 1 ciclo que ARM7, y las instrucciones de carga pueden ahorrar 2 ciclos (en ausencia de interbloqueos, la herramienta de compilación puede eliminar la mayoría de las posibilidades de interbloqueo mediante la optimización de la compilación).

Sumando varios factores, el procesador ARM9E tiene un rendimiento muy potente. Sin embargo, en el diseño de sistemas reales, los diseñadores no siempre maximizan el rendimiento del procesador. La situación ideal es reducir la frecuencia operativa del procesador y del sistema para que el rendimiento pueda satisfacer las necesidades de la aplicación, logrando así el propósito de ahorrar consumo de energía y costos; . El indicador DMIPS es utilizado por muchas personas en el proceso de evaluación de las capacidades del procesador que puede proporcionar un sistema; también se usa ampliamente en comparaciones de rendimiento entre diferentes procesadores;

Sin embargo, existen grandes fallas en el uso de DMIPS para medir el rendimiento del procesador. DMIPS no significa literalmente millones de instrucciones por segundo. Es una unidad que mide el rendimiento relativo de la CPU cuando se ejecuta un programa de prueba llamado Dhrystone (la gente también está acostumbrada a utilizar MIPS como unidad de este indicador de rendimiento en muchas ocasiones). Debido a que las pruebas basadas en programas son susceptibles a la interferencia de optimizaciones maliciosas y la publicación de los valores del indicador DMIPS no está supervisada por ninguna agencia, se debe tener precaución al utilizar DMIPS para la evaluación. Por ejemplo, si el programa de prueba Dhrystone se compila de manera diferente y se ejecuta en el mismo procesador, se pueden obtener resultados muy diferentes. La Figura 4 muestra el resultado de ARM926EJ ejecutando el programa de prueba en la memoria de espera 0 de 32 bits. ARM siempre ha utilizado un valor relativamente conservador como valor DMIPS nominal de la CPU. Por ejemplo, ARM926EJ es 1,1DMPS/MHz.

Figura 4: Valores DMIPS del procesador ARM926EJ bajo diferentes condiciones de prueba.

Otra desventaja de DMIPS es que no puede medir las capacidades de procesamiento de señales digitales del procesador y el rendimiento del subsistema Cache/MMU. Debido a que el programa de prueba Dhrystone no contiene expresiones DSP, solo algunas operaciones con números enteros y procesamiento de cadenas, y el programa de prueba es pequeño, se puede colocar casi por completo en la caché y ejecutar sin interactuar con la memoria externa. Esto dificulta reflejar el verdadero rendimiento del procesador en un sistema real.

Un método de evaluación alentador es observar el problema desde la perspectiva del sistema, en lugar de centrarse únicamente en la CPU misma, y ​​el mejor vector de prueba para la evaluación del rendimiento del sistema es la aplicación del usuario o un programa de prueba similar; Este es el resultado más realista que necesitan los usuarios.

Las capacidades informáticas DSP del procesador ARM9E

Con la diversificación y complejidad de las aplicaciones, las funciones multimedia, de audio y vídeo también están floreciendo plenamente en los sistemas integrados. Estas aplicaciones requieren una potencia de procesamiento DSP considerable; si estos algoritmos se implementan en una arquitectura RISC tradicional, los recursos necesarios (frecuencia, memoria, etc.) serán muy antieconómicos. Una ventaja muy importante del procesador ARM9E es que tiene capacidades de procesamiento DSP livianas, lo que proporciona un rendimiento DSP muy práctico a un costo muy pequeño (para aumentar las funciones de la CPU es necesario agregar hardware).

Debido a que las capacidades DSP de la CPU no se reflejan directamente en indicadores de evaluación como DMIPS, y no existe un concepto similar en los procesadores ARM7 anteriores, esto es fundamental para todos los desarrolladores que usan procesadores ARM9E. es un punto importante al que prestar atención.

Las instrucciones de extensión DSP de ARM9E se muestran en la Tabla 2, que incluye principalmente tres tipos.

1) Operaciones MAC de ciclo único 16x16 y 32x16, debido a que hay muy pocos operandos de 32 bits de ancho en el procesamiento de señales digitales, es muy útil segmentar los operandos en registros de 32 bits.

2) Se ha agregado una extensión de procesamiento de saturación a las instrucciones de operación aritmética originales. La llamada operación de saturación significa que cuando el resultado de la operación es mayor que un límite superior o menor que un límite inferior, el resultado. es igual al límite superior o al límite inferior del procesamiento de saturación. Se usa comúnmente en el procesamiento de píxeles de video y datos de audio. Ahora, una instrucción de operación de saturación de un solo ciclo puede completar la serie de operaciones de las instrucciones RISC ordinarias "valor de juicio de operación"; .

3) Las instrucciones de operación con cero inicial (CLZ) mejoran el rendimiento de las operaciones de normalización y punto flotante y de división.

Tomemos como ejemplo el popular programa de decodificación de MP3. Los tres pasos iniciales de todo el proceso de decodificación son los más intensivos desde el punto de vista computacional, incluida la lectura del flujo de bits (desempaquetado), la decodificación de Huffman y el muestreo de cuantificación inversa (transformación inversa). Las instrucciones DSP de ARM9E pueden completar estas operaciones de manera eficiente. Tomando como ejemplo archivos de música MP3 con una velocidad de código de 44,1 KHz a 128 kbps, ARM7TDMI requiere más de 20 MHz de recursos, mientras que ARM926EJ solo requiere menos de 10 MHz de recursos

En el proceso de transformación de la plataforma de ARM7 a ARM9 Una cosa que es muy afortunada es que ARM9E es totalmente compatible con el software de ARM7 y el modelo de programación y la base arquitectónica que enfrentan los desarrolladores siguen siendo consistentes.

Pero después de todo, se han agregado muchas características nuevas a ARM9E. Para poder aprovechar al máximo estos nuevos recursos y optimizar el rendimiento del sistema, necesitamos tener una comprensión más profunda de ARM9E.