En mis cursos de análisis numérico, aprendí a analizar la eficiencia de los algoritmos contando el número de operaciones de punto flotante (flops) que requieren, en relación con el tamaño del problema. Por ejemplo, en el texto de Trefethen & Bau sobre Álgebra lineal numérica, incluso hay imágenes en 3D de los recuentos de flop.
Ahora está de moda decir que los "flops son gratuitos" porque la latencia de memoria para buscar cualquier cosa que no esté en la memoria caché es mucho mayor que el costo de un flop. Pero todavía estamos enseñando a los estudiantes a contar los fracasos, al menos en los cursos de análisis numérico. ¿Deberíamos enseñarles a contar los accesos a la memoria? ¿Necesitamos escribir nuevos libros de texto? ¿O el acceso a la memoria es demasiado específico de la máquina para pasar el tiempo? ¿Cuál será la tendencia a largo plazo en términos de si los fracasos o el acceso a la memoria es el cuello de botella?
Nota: algunas de las respuestas a continuación parecen estar respondiendo a una pregunta diferente como "¿Debería reescribir obsesivamente mi implementación para guardar algunos fracasos o mejorar el rendimiento del caché?" Pero lo que pregunto es más parecido a " ¿Es más útil estimar la complejidad algorítmica en términos de operaciones aritméticas o accesos a la memoria ?"