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
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 22
cHackAll Va por buen camino
Cita:
Empezado por HySTD Ver Mensaje
VirtualProtect permite modificar permisos de lectura/escritura en cierta región de memoria del espacio de usuario dentro del programa actual. No sé a qué te refieres con "otro tipo de memoria"...
Pues no discuto la funcion de la API, sino que como ya confirmó Kurono; no nos interesa la memoria lineal virtual, sino la física!

Cita:
Empezado por HySTD Ver Mensaje
¿Según tú, entonces VirtualProtect a qué memoria hace referencia?
"Segun yo" ???

Cita:
Empezado por HySTD Ver Mensaje
Cabe decir que hay que tener en cuenta los accesos a la caché del procesador (en todos los niveles).
Cita:
Empezado por HySTD Ver Mensaje
...da igual, en la jerarquía de memoria de un sistema actual, es el primer nivel (sin contar los registros de la CPU) al cuál se accede (ya sea para carga o almacenamiento)...
De acuerdo, pero eso no tiene que ver con el tema del hilo pues no requieres ese nivel de conocimientos para acceder a la memoria física bajo Güindos... de allí mi confusión.

Cita:
Empezado por HySTD Ver Mensaje
La memoria caché no se "salta". Son accedidas a nivel hardware desde el principio.
De nuevo lo que comentaba anteriormente, no nos referimos a la memoria caché (fisica), si no a los métodos de caché que el SO utiliza.

Saludos
__________________
RTFM > STFW > Foro > Truco > Post > cHackAll > KeBugCheckEx
Responder Con Cita
  #2  
Antiguo 30-08-2008
HySTD HySTD is offline
Miembro
 
Registrado: sep 2006
Posts: 15
Poder: 0
HySTD Va por buen camino
Ok! para lo que se plantea, si tiene que ver el tema de la caché física, explicaré por qué.

El procesador, que genera direcciones virtuales y cuyo rango varía en función de su ancho del bus de direcciones, accede SIEMPRE a caché y no a RAM. A la RAM el procesador sólo accede cuando se producen fallos de caché, entonces el hardware realiza otro tipo de traducción de la dirección virtual a física (hemos supuesto que las caché son en la mayoría de los casos atacadas por direcciones virtuales del procesador), y quien se encarga de atacar a la memoria principal es el controlador (chipset puente norte), para adaptar temas de velocidad y ancho de bus.

Para la resolución al problema que se plantea, (sobre medir los tiempo de acceso medio a memoria, que es distinto a lo planteado al principio sobre llenar la RAM, en cuyo caso vuelvo a repetir sobre el diseño de un driver, para evitar paginación), hay que darse cuenta sólo de un pequeño detalle, y es en la penalización de tiempo que se produce cuando se da un fallo (el dato/instrucción no está en el nivel al que se accede), Y aquí es ahora donde está la clave: observar y comparar la penalización por fallo en los accesos.

Supón que haces un bucle largo, y realizas accesos a "memoria" (nos da igual si el dato está o no en caché, RAM o disco). Si el dato es de primera referencia se producirá un fallo forzoso en caché, con lo cual accederá a RAM, traduciendo la dirección virtual a física. Accede a ella y se trae un bloque o línea completo (por el tema de la localidad espacial), dicho bloque se almacena en caché, para en un segundo acceso al dato o al consecutivo (en el caso de un array o variable consecutiva), el dato ya estará en caché, consiguiendo reducir el tiempo de acceso. Del mismo modo, aunque con muchas más diferencias, ocurriria entre RAM y disco.

La cuestión por tanto, si queremos medir el tiempo en acceder a RAM , lo que tenemos que hacer es asegurar que SIEMPRE se van a producir fallos de caché (fallos de colisión o por conflictos). Para ello es necesario saber ¿Cuantos bytes ocupa cada linea de caché?. Como ésto es dificil de averiguar, lo normal es establecer un valor alto, y mediante un bucle ir incrementando no de 1 en 1, sino de "zancada+1" en "zancada+1", siendo "zancada" el valor estimado del tamaño de un bloque de la caché. Así se asegura un fallo.

Ahora bien, ¿Cuando sabremos que se está accediendo a caché y cuándo a RAM? Esto es fácil de ver utilizando por ejemplo la instrucción RDTSC de ensamblador (Read Time Stamp Counter), cuando observemos un aumento considerable (supondremos que en el bucle no hay interrupciones con otros procesos, cosa difícil de lograr), entonces se habrá accedido a un nivel inferior en la jerarquía de memoria (es decir de caché a RAM). La forma de proceder es exactamente igual que de RAM a disco.

Un saludo.
Responder Con Cita
  #3  
Antiguo 30-08-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 22
cHackAll Va por buen camino
Interesante análisis HySTD, solo me quedan un par de dudas; que yo sepa como caché física solo tenemos la L1, L2... como podemos acceder a la misma mediante algun lenguaje?

Cita:
Empezado por HySTD Ver Mensaje
...accede SIEMPRE a caché y no a RAM....
Quieres decir que hay la misma cantida de caché física que RAM? .. considerando la respuesta obvia tambien habria que medir la velocidad de transferencia de una a otra...

PD; no es que dude de ti, pero si es que voy a aprender algo nuevo te rogaría incluyas alguna referencia pues soy algo "esceptico".

Saludos
__________________
RTFM > STFW > Foro > Truco > Post > cHackAll > KeBugCheckEx
Responder Con Cita
  #4  
Antiguo 30-08-2008
Avatar de kurono
[kurono] kurono is offline
Miembro Premium
 
Registrado: jul 2007
Ubicación: Republica Dominicana
Posts: 1.144
Poder: 21
kurono Va por buen camino
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
Responder Con Cita
  #5  
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
  #6  
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
  #7  
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
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 15:35:52.


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