Cycles machine : définition, variabilité et comment les déterminer
Qu'est-ce qu'un cycle machine ?
Un cycle machine (ou cycle d'instruction) est la séquence d'étapes qu'un CPU exécute pour récupérer, décoder, exécuter et réécrire une seule instruction. Sa durée en cycles d'horloge varie énormément selon l'architecture, la complexité de l'instruction, la microarchitecture (pipeline, superscalaire, exécution hors ordre) et la hiérarchie mémoire.
Cycle classique 4 étages (von Neumann)
- Récupération (Fetch) : PC → Bus adresses → Mémoire → Registre instruction. PC++.
- Décodage : Code opération → Unité commande → Signaux commande (op ALU, sélection registres, mémoire R/W).
- Exécution : ALU calcule / Calcul adresse / Décision branchement.
- Réécriture (Writeback) : Résultat → Banc registres / Mémoire.
Pourquoi le « Cycles par Instruction » (CPI) n'est pas fixe
| Facteur | Effet sur CPI |
|---|---|
| Pipelining | CPI idéal = 1 (une instruction termine par cycle). Aléas (données, contrôle, structure) ajoutent des bulles. |
| Superscalaire / Hors ordre | Plusieurs instructions/cycle → CPI < 1 (IPC > 1). |
| Défaut cache | L1 miss : +4–12 cycles. L2 miss : +30–50. DRAM : +150–300 cycles. |
| Mauvaise prédiction branchement | Vidage pipeline : 10–20+ cycles pénalité. |
| Instructions complexes | DIV, SQRT, transcendantales : 10–100+ cycles (microcodées). |
| Interruption/Exception | Sauvegarde/restauration contexte : centaines de cycles. |
Comment trouver le CPI pour votre cas
- Manuel ISA : ARM Cortex-M4 : « ADD r0,r1,r2 = 1 cycle ». Cortex-A78 : « FP MLA = 4 cycles latence, 0,5 débit ».
- Guides optimisation constructeur : Intel 64/IA-32 Optimization Manual, guides μArch AMD.
- Outils analyse statique : LLVM-MCA, IACA (retiré), uArchBench.
- Compteurs performance matériel (PMC) :
perf stat(Linux), VTune, compteurs PMU (CYCLES, INST_RETIRED, STALL_CYCLES). CPI réel = CYCLES / INST_RETIRED. - Simulateurs cycle-précis : gem5, Simics, QEMU (mode TCG).
Exemple pratique
ARM Cortex-M3 (STM32F1) : Pas de cache, pipeline 3 étages.
- ADD (registres) : 1 cycle.
- LDR (pool littéral, flash 0 wait) : 2 cycles.
- MUL : 1 cycle (multiplicateur cycle unique).
- SDIV : 2–12 cycles (dépendant données).
- Entrée interruption : 12 cycles (empilement pile).
Point clé
Il n'y a pas de « nombre de cycles machine » universel. Mesurez sur matériel cible avec charge représentative via PMC. Les cycles du datasheet sont des cas idéaux, instruction unique, zéro wait-state.
