CPI = Ciclos por instrucción.
Cita:
ni tampoco sabia q podia "fallar" el acceso a memoria
|
Pues si, de hecho se está constantemente fallando entre un nivel y otro de la jerarquía de memoria.
Cita:
¿podrias poner un ejemplo? aunque fuese en c.
|
Por supuesto, o en Delphi también:
for i:=0 to 9 do begin
v[i]:=v[i]+1;
end;
en la primera referencia al primer elemento del vector "v" (v[0]), el procesador accede a caché, y el dato no se encuentra en ella, asi que se produce un fallo "forzoso". Debe acceder a RAM para buscarlo (Entonces aumenta el tiempo de acceso --> hay una penalización por fallo), supuesto el caso que alli se encuentra, se trae un bloque completo a caché, esto es, se traerá todos los elementos del vector a ésta. Cuando en el bucle se acceda a v[1], el elemento ya estará en caché con el consecuente resultado de una disminución de tiempo de acceso que si tuviese que ir a RAM. Del mismo modo ocurriría entre RAM y Disco; de hecho cuando ejecutas un programa (almacenado en disco), Tras la llamada a CreateProcess (para Windows), se logra cargar en RAM debido a los fallos:
Si no se encuentra un dato requerido o solicitado por la CPU se busca en el siguiente nivel de la jerarquía, y se lo trae a un nivel más cercano (rápido) para la CPU, con una traducción distinta de las direcciones.
Bueno espero, con este hilo en general, haber aclarado algunos conceptos útiles para la programación a bajo nivel.
Un saludo.