• [^] # Re: bah ouais

    Posté par (site web personnel) . En réponse au journal journalistes -> ça m'énerve.... Évalué à 4. Dernière modification le 11 juin 2019 à 02:27.

    Out of order c'est la capacité d'un CPU a regarder dans le cache instruction ce qu'il peut exécuter en parallèle. Par contre, l'écriture en mémoire se fait in order par l'issue stage (ou writeback).

    Si tu as
    a = x + y
    b = u +/* t

    Les 2 opérations et les load (typiquement 17 cycle si il faut loader depuis la mémoire, sans tlb misses) se feront en parallèle, mais a sera écrit en mémoire avant b et si x + y émet un overflow, le registre contenant b ne sera pas modifié, donc cette optimisation ooo n'est pas visible par le programme, et heureusement.

    Un exemple un peu plus compliqué impliquerait des branchements (des if), les CPU moderne essai de prédire la branche la plus probable. Sur les ARM, par défaut, les Switch et les if sont exécuté comme si la condition était vrai (comme si il n'y avait pas de branchement). Le pipeline chevauche le if, lorsque la condition est connu, si il faut faire le jump, alors le pipeline est reseté (plusieurs dizaines de cycles pour les CPU moderne). Sur les processeur itanium, tu n'as carrément pas de branchement, les instructions sont toutes exécuter et discardé en fonction des besoins.

    Peu importe comment fonctionne un CPU, un programme reste une suite d'instruction a exécuter dans l'ordre, peut être parallèlement, mais dans l'ordre. Ce qu'au final fait le CPU par rapport aux écritures mémoire.