Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   como cargar y descargar la Ram (https://www.clubdelphi.com/foros/showthread.php?t=59468)

coso 30-08-2008 14:59:14

Mirando entonces de una manera practica : si se calcula el tiempo de acceso con una variable register, y luego este se resta de una variable sin este modificador con el mismo proceso, ¿entonces se tendria directamente el tiempo de acceso a RAM? creo q no hay equivalente de register ni de volatile en delphi, asi como de static si que se puede hacer un apaño. Igualmente, si lo que se quiere es medir el tiempo de acceso en global (cpu + mem) y no de la memoria en si, ¿que se tendria que hacer?

HySTD 30-08-2008 15:52:08

Cita:

Mirando entonces de una manera practica : si se calcula el tiempo de acceso con una variable register, y luego este se resta de una variable sin este modificador con el mismo proceso, ¿entonces se tendria directamente el tiempo de acceso a RAM?
Básicamente declarando como register, en teoria, deberías obtener el CPI de la instrucción que hace referencia a dicha variable.

Cita:

si lo que se quiere es medir el tiempo de acceso en global (cpu + mem) y no de la memoria en si, ¿que se tendria que hacer?
Pues aplicar una formula muy simple:

Tiempo de acceso medio a memoria = Tiempo de acierto + (frecuencia de fallos * penalización por fallo)

Un saludo.

coso 30-08-2008 15:56:38

lo siento, no domino mucho el tema de hardware...no se que es CPI ni tampoco sabia q podia "fallar" el acceso a memoria... ¿podrias poner un ejemplo? aunque fuese en c. Gracias de antemano.

coso 30-08-2008 16:05:39

igualmente, pongo este link (y este)

HySTD 30-08-2008 21:17:16

Cita:

no se que es CPI
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.


La franja horaria es GMT +2. Ahora son las 14:17:01.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi