PDA

Ver la Versión Completa : Memoria virtual para grandes matrices


JF Sebastian
30-01-2007, 11:40:45
Hola:
Estoy desarrollando un programa de calculo matricial y para grandes matrices (4GB) necesitaria un gestinador eficiente de memoria que lea del fichero conteniendo la matriz los datos para una resolucion por el metodo de Gauss (sistemas de ecuaciones lineales) o Jacobi Generalizado (Autovalores). Deberia ser transparente al metodo de resolucion.

Hasta ahora leo en buffers de 1Mb bloques del fichero y lo traslado a memoria principal para leer en memoria varios elementos de la matriz. El problema es que es muy lento pues el programa tiene que acceder a elementos muy diversos de la matriz. Algunos estan bastante tiempo en memoria (elemento pivote) pero otros solo estan temporalmente. A pesar de que uso dos bloques de memoria independientes ocurre que muchas veces estos bloques repiten alternativamente dos posiciones iguales de memoria por ej. 1-2-1-2-1-2.... consumiendo mucho tiempo.
No tengo mucha experiencia para este tipo de manejadores de memoria virtual. Conoceis alguna referencia, pagina o componente que haga estas cosas?
Gracias.

Crandel
30-01-2007, 19:53:27
como estas manejando los vectores? son dinamicos?

Intenta de verificar donde tenes el cuello de botella de consumo de tiempo. Pone contadores que te calculen el tiempo de diferentes partes.

* El tiempo total
* El tiempo de lectura del archivo
* El tiempo de creacion del vector (es un problema en vectores dinamicos grandes)
* El tiempo de llenado de los vectores
* tiempo de calculo
* etc

JF Sebastian
30-01-2007, 20:11:41
El cuello de botella esta en los accesos al disco duro que se trata de minimizar por eso dispongo de 2 buffers de 1Mb para intentar llegar a un compromiso entre la cantidad de memoria central y la velocidad y numero de accesos a disco.
El problema creo que esta en la seleccion de esos buffers para traer del disco duro a memoria central la informacion necesaria. Como ya he dicho algunos elementos estan mas tiempo en memoria central que otros por eso lo de los dos buffers...