10

Petite visite des Cortex A8 et A9

nov

Tout développeur Assembleur se doit de connaitre au minimum les instructions de son processeur mais également leur temps d’exécution.
Pourtant ici je vais plutôt vous parler des règles d’utilisation des propriétés superscalaire des Cortex.

Les Cortex A8 et A9 disposent de 2 pipelines d’exécutions.
Cela veut dire, en théorie, que le processeur va pouvoir exécuter deux instructions dans le même cycle.
Toutes les instructions des Cortex A8 et A9 peuvent s’exécuter dans les deux pipelines à l’exception des cas suivants :

  • Il ne peut y avoir qu’un seul branchement (exécuté ou non) par cycle. Le branchement peut être exécuté indifféremment dans le pipeline 0 ou 1. Par contre il est à noter que le cortex est capable d’exécuter dans le même cycle une opération de comparaison (CMP) et un branchement conditionnel.
  • CMP R0, #0
    BNE label

    S’exécute dans le même cycle

    Par contre le code suivant ne pourra s’exécuter en un seul cycle, car seul les opérations de comparaisons allument les flags suffisamment tôt pour permettre cette optimisation.

    SUBS R0, R0, R0
    BNE label

  • Il ne peut y avoir qu’un seul accès mémoire (load/store) par cycle. Cet accès mémoire peut être exécuté indifféremment dans le pipeline 0 ou 1. Il est également à noter qu’un registre chargé ne peut être utilisé le cycle suivant son chargement. De plus un accès mémoire utilisant un registre en guise de pointeur ne peut s’exécuter le cycle suivant la modification de ce registre d’adresse.
    L’écriture réel de la donnée en mémoire lors d’une écriture (STR) s’exécute en fin de pipeline. Il est donc possible de modifier un registre puis de l’enregistrer en mémoire dans la même cycle.
  • MOV R0, #15
    STR R0,[R1], #4

    S’exécutent dans le même cycle

  • Deux instructions ayant le même registre de destination ne peuvent se réaliser dans le même cycle.
  • Les multiplications sont toujours exécutées dans la pipeline 0. Cela veut évidement dire qu’il n’est pas possible d’exécuter deux multiplications dans le même cycle.
  • LDM et STM sont toujours exécutés dans le pipeline 0. Il est possible d’utiliser le pipeline 1 en parallèle d’un accès mémoire multiple lors du dernier cycle d’exécution des instructions LDM et STM. En terme de cycles, aligner le pointeur mémoire sur 64 bits permet de gagner un cycle lorsque le nombre de registres est pair.
  • Le cortext A8 et le cortex A9 partage globalement les mêmes règles d’optimisation des pipelines. La principale différence entre ces deux processeurs qui rend le cortex A9 plus rapide que le cortex A8, c’est sa capacité à exécuter les instructions dans le désordre (out-of-order core). Le cortex A9 va donc dans la limite de quelques instructions être capable d’optimiser tout seul l’utilisation des deux pipelines.

    Répondre

    Human control : 2 + 9 =