![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Cita:
"Segun yo" ??? ![]() Cita:
Cita:
Cita:
Saludos |
|
#2
|
|||
|
|||
|
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. |
|
#3
|
||||
|
||||
|
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?
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 |
|
#4
|
||||
|
||||
|
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
|
|
#5
|
||||
|
||||
|
Cita:
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:
Cita:
Cita:
Si no te corre prisa, en cuanto tenga tiempo te pondré un código de ejemplo. Un saludo. |
|
#6
|
|||
|
|||
|
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?
|
|
#7
|
|||
|
|||
|
Cita:
Cita:
Tiempo de acceso medio a memoria = Tiempo de acierto + (frecuencia de fallos * penalización por fallo) Un saludo. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
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 |
|