Dans mes cours d’analyse numérique, j’ai appris à analyser l’efficacité des algorithmes en comptant le nombre d’opérations à virgule flottante (flops) qu’ils requièrent, par rapport à l’ampleur du problème. Par exemple, dans le texte de Trefethen & Bau sur l'algèbre linéaire numérique, il y a même des images en 3D du décompte du flop.
Maintenant, il est à la mode de dire que "les flops sont gratuits" car la latence de la mémoire pour extraire tout ce qui n’est pas dans le cache est beaucoup plus grande que le coût d’un flop. Mais nous continuons d’enseigner aux étudiants à compter les échecs, du moins dans les cours d’analyse numérique. Devrions-nous leur apprendre à compter les accès mémoire? Avons-nous besoin d'écrire de nouveaux manuels? Ou bien l’accès à la mémoire est-il trop spécifique à la machine pour y passer du temps? Quelle sera la tendance à long terme quant à savoir si les flops ou l’accès à la mémoire sont le goulot d’étranglement?
Remarque: certaines des réponses ci-dessous semblent répondre à une question différente, telle que "Devrais-je réécrire de manière obsessionnelle mon implémentation pour enregistrer quelques flops ou améliorer les performances du cache?" Mais ce que je demande, c'est plutôt dans le sens de " Est-il plus utile d'estimer la complexité algorithmique en termes d'opérations arithmétiques ou d'accès mémoire ?"