Por qué dos bucles que hacen trabajos muy distintos tardan lo mismo
Gallery of Processor Cache Effects
Igor Ostrovsky demuestra con ejemplos en C# cómo los detalles de la caché del procesador explican comportamientos contraintuitivos: un bucle que multiplica cada elemento de un array tarda casi lo mismo que otro que solo toca uno de cada 16, porque el tiempo lo domina el acceso a memoria, no la multiplicación. También analiza el impacto de las líneas de caché, los tamaños de L1 y L2, el paralelismo a nivel de instrucción y la asociatividad de la caché.
El segundo bucle solo hace alrededor del 6% del trabajo del primero, pero en máquinas modernas los dos bucles for tardan aproximadamente lo mismo: 80 y 78 ms respectivamente en mi máquina.