Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-08-2008
HySTD HySTD is offline
Miembro
 
Registrado: sep 2006
Posts: 15
Poder: 0
HySTD Va por buen camino
Cita:
que yo sepa como caché física solo tenemos la L1, L2... como podemos acceder a la misma mediante algun lenguaje?


Repito, siempre que haya un acceso a memoria en una instrucción, se va a acceder a caché. De todas formas existen unos tipos de datos que fuerzan al compilador a que los datos permanezcan o no en caché (Los conozco en C, pero no se los homólogos en Delphi):

Cita:
El Modificador register

Este modificador sobre una variable le indica al compilador que la variable debe almacenarse en un registro en el compilador, que para el caso de los IA32, es un registro real de la propia CPU, y por tanto el tiempo de acceso es más rápido respecto a la memoria RAM. Hoy en día a penas se utiliza este modificador, ya que los compiladores son capaces de determinar de manera óptima la asignación de registros a variables del programa.

El Modificador volatile

Al con otro valor, dicha variable se almacena directamente en memoria y no queda localizado el valor sólo en el registro de la CPU como pasaba en el casocontrario que el modificador registrer, volatile obliga al compilador a forzar el código resultante de manera que la variable modificada con este modificador, sea almacenada siempre en la memoria. El efecto que tiene es que cuando la variable se modifica de register o en condiciones normales. Un uso muy común en el que se suele emplear este modificador, es para acceder a variables que están siendo utilizadas por drivers o por periféricos, ya que si no declarásemos esta propiedad, podría darse el caso que la CPU usase el valor de la variable, por lo que la caché guarda el valor, y poco después la CPU usase de nuevo dicha variable, pero como ésta está en cache, la CPU coge el valor que existe en la caché, puede ser bien distinta si mientras un posible periférico ha modificado dicho valor.

Fuente: http://es.wikibooks.org/wiki/Program...cador_volatile

Cita:
Quieres decir que hay la misma cantida de caché física que RAM?
No! por supuesto que no. La diferencia radica en la decodificación de la dirección virtual que genera el procesador. El procesador genera una dirección virtual, pues bien, cuando se accede a caché se interpreta de una manera (Depende del tipo de caché: mapeado directo, asociativa por conjuntos o completamente asociativa), y cuando accede a RAM lo hace a través de una tabla de páginas (que puede estar almacenada en una caché especial: TLB) que contiene la dirección física que es concatenada con el desplazamiento de la dirección virtual.


Cita:
amigos como dije anteriolmente estoy hablando de la memoria ram y solo quiero probar los tiempo de lectura/escritura nada mas y quiero saber como se puede hacer esto
Vuelvo a repetir, que tienes que basarte en la penalización por fallo entre un nivel y otro.

Si no te corre prisa, en cuanto tenga tiempo te pondré un código de ejemplo.

Un saludo.
Responder Con Cita
  #2  
Antiguo 30-08-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
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?
Responder Con Cita
  #3  
Antiguo 30-08-2008
HySTD HySTD is offline
Miembro
 
Registrado: sep 2006
Posts: 15
Poder: 0
HySTD Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 30-08-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 30-08-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
igualmente, pongo este link (y este)

Última edición por coso fecha: 30-08-2008 a las 16:10:35.
Responder Con Cita
  #6  
Antiguo 30-08-2008
HySTD HySTD is offline
Miembro
 
Registrado: sep 2006
Posts: 15
Poder: 0
HySTD Va por buen camino
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.

Última edición por HySTD fecha: 30-08-2008 a las 21:29:19.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
como descargar Rave y QReport para delphi 2007 kurono Varios 2 21-08-2008 19:54:04
¿como descargar archivos por fecha y hora.? JXJ Firebird e Interbase 3 07-09-2007 20:30:38
¿Cómo descargar Archivo de Muchas Fuentes? JXJ Varios 3 14-03-2007 02:09:08
Como descargar una imagen a partir de la url Oxis Internet 2 20-07-2006 20:04:56
Como descargar una pagina web completa??? jhonny Internet 2 15-07-2006 17:58:23


La franja horaria es GMT +2. Ahora son las 06:51:27.


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
Copyright 1996-2007 Club Delphi