¿Qué tan "rápidas" son las CPU modernas?

Cuando solía programar sistemas embebidos y PCs tempranas de 8/16 bits (6502, 68K, 8086) tenía un buen manejo de exactamente cuánto tiempo (en nanosegundos o microsegundos) tardó en ejecutarse cada instrucción. Dependiendo de la familia, uno (o cuatro) ciclos equivalen a una "recuperación de memoria", y sin memorias caché de las que preocuparse, puede adivinar los tiempos en función del número de accesos de memoria involucrados.

Pero con las CPU modernas, estoy confundido. Sé que son mucho más rápidos, pero también sé que la velocidad de gigahercios del titular no es útil sin saber cuántos ciclos de ese reloj se necesitan para cada instrucción.

Entonces, ¿alguien puede proporcionar algunos tiempos para dos instrucciones de muestra, en (digamos) un Core 2 Duo de 2 GHz. Los mejores y peores casos (suponiendo que nada en caché / todo en caché) serían útiles.

Instrucción # 1: Agregue un registro de 32 bits a un segundo.

Instrucción # 2: Mueva un valor de 32 bits del registro a la memoria.

Editar: La razón por la que pregunto esto es para tratar de desarrollar una "regla general" que me permita ver un código simple y medir aproximadamente el tiempo que se tarda en el orden de magnitud más cercano.

Editar # 2: Muchas respuestas con puntos interesantes, pero nadie (todavía) ha dejado una cifra medida en el tiempo. Aprecio que haya "complicaciones" a la pregunta, pero vamos: si podemos estimar elNúmero de afinadores de piano en Nueva York, deberíamos poder estimar tiempos de ejecución de código ...

Tome el siguiente código (tonto):

int32 sum = frigged_value();

// start timing
 for (int i = 0 ; i < 10000; i++)
 {
   for (int j = 0 ; j < 10000; j++)
   {
     sum += (i * j)
   }
   sum = sum / 1000;
 }

// end timing

Como podemosestimar ¿Cuánto tiempo llevará correr ... 1 femtosegundo? 1 gigayear?

Respuestas a la pregunta(14)

Su respuesta a la pregunta