Estoy trabajando para optimizar un programa de análisis de flujo de fluidos y transferencia de calor escrito en Fortran. Cuando intento ejecutar simulaciones de malla cada vez más grandes, me encuentro con problemas de limitación de memoria. La malla, sin embargo, no es tan grande. Solo 500,000 células y cacahuetes pequeños para que se ejecute un código CFD típico. Incluso cuando solicito 80 GB de memoria para mi problema, se cuelga debido a la insuficiente memoria virtual.Administración de memoria Fortran array
Tengo algunas conjeturas sobre qué matrices están acaparando toda esa memoria. Uno en particular está siendo asignado a (28801,345600). Corrígeme si me equivoco en mis cálculos, pero una matriz de doble precisión es de 8 bits por valor. Entonces, ¿el tamaño de esta matriz sería 28801 * 345600 * 8 = 79.6 GB?
Ahora, creo que la mayor parte de esta matriz termina siendo ceros durante el cálculo, por lo que no es necesario almacenarlos. Creo que puedo cambiar el algoritmo de la solución para que solo almacene los valores distintos de cero para trabajar en una matriz mucho más pequeña. Sin embargo, quiero estar seguro de que estoy buscando las matrices correctas para reducir su tamaño. Entonces, primero, ¿calculé correctamente el tamaño de la matriz de arriba? Y segundo, ¿hay alguna manera de que Fortran muestre los tamaños de matriz en MB o GB durante el tiempo de ejecución? Además de imprimir las matrices más intensivas en memoria, me interesaría ver cómo cambian los requisitos de memoria del código durante el tiempo de ejecución.
¿Cuánta memoria real tiene en la máquina en la que está ejecutando esto? Además, está equivocado en su suposición * la precisión * doble es de 8 bytes, no de 8 bits. Eso da alrededor de 74.16 GB de datos (potencias de 1024, no 1000). Además, estoy en lo cierto al suponer que está haciendo 4 días de datos (345600 segundos = 60 * 60 * 24 * 4) –
Mike, esto se está ejecutando en un clúster con hasta 96 GB de memoria por nodo que puedo solicitud. Perdón por la confusión entre bytes y bits, y gracias por aclarar eso, pero estoy en el estadio correcto allí, así que el tamaño de la matriz definitivamente es un problema. Y no, ese 345600 está relacionado con la cantidad de celdas de la malla modelo y no tiene nada que ver con el tiempo. – rks171
@ user104629: Una de las razones podría ser que no puede asignar una matriz contigua de 80 GB de memoria. –