¿Qué hacer cuando se llena la memoria de LabVIEW?

Actualizado el Sep 9, 2024

Reportado en

Software

  • LabVIEW
  • LabVIEW Desktop Execution Trace Toolkit

Detalles del problema

Cuando estoy desarrollando una aplicación grande en LabVIEW, a veces recibo el siguiente mensaje de error:

 

LabVIEW: Memory is full.

The top-level VI was stopped on the block diagram.

Refer to the VI Memory Usage topic in the LabVIEW Help for suggestions on monitoring and improving VI memory usage.


Tengo una gran cantidad de RAM disponible, ¿por qué recibo este mensaje de error?

 

Solución

Este mensaje de error suele aparecer al desarrollar una aplicación con grandes conjuntos de datos de matrices, clusters o formas de onda. Debido a que LabVIEW almacena cada conjunto de datos en un bloque de memoria contiguo, es posible que el bloque de memoria disponible en su computadora no sea lo suficientemente grande como para almacenar un conjunto de datos grande.

A continuación hay algunas sugerencias para ayudar a evitar que aparezca este mensaje de error:

Reducción de la memoria utilizada por matrices, clústeres y formas de onda

  • Si tiene una matriz con un conjunto de datos grande, si es posible, use un tipo de datos más pequeño para representar los elementos de la matriz. Por ejemplo, si los elementos en la matriz están representados con números de punto flotante de precisión doble (DBL), pero el rango de posibles valores esperados se limita a números enteros entre 0 y 100, puede cambiar la representación entera de los elementos en el matriz a enteros de 8 bits sin signo (U8). El tipo de datos numérico U8 usa un octavo de la memoria que usa el tipo de datos DBL.
  • En LabVIEW 8.5 y versiones posteriores, use el Coloque la "In Place Element Structure" para evitar realizar copias de datos al usar una matriz, grupo o forma de onda.
  • Si está graficando datos de una matriz grande, use la reducción mínima-mínima para evitar graficar cada punto de datos. Véase este artículo en inglés para más información: Memory Management for Large Data Sets .
  • Usa el perfil de rendimiento y memoria. Esta herramienta es para ayudar a reducir e identificar qué VIs son responsables del uso de la memoria .
  • Analice el gran conjunto de datos para determinar dónde está llena la memoria. Transfiera o escriba los datos en el disco y use una herramienta de análisis e informes de alto rendimiento, como los archivos TDMS y el software NI DIAdem .

 

Reducción del uso de memoria en aplicaciones

  • Para limitar la cantidad de veces que LabVIEW copia datos, reduzca la cantidad de variables globales y locales en su aplicación. En lugar de usar variables, considere usar un patrón de diseño de productor / consumidor , o la función New Data Value Reference para crear una referencia a los datos.
  • Separe grandes secciones de código en subVIs y use el Call By Reference Node para llamar a los subVI dinámicamente. Un subVI no está en la memoria hasta que un VI lo llama dinámicamente.
  • Configure los subVIs grandes como no reentrantes cuando sea posible. No reentrante es la configuración predeterminada para Windows y VIs en tiempo real).
  • Use el Kit de Profile Performance and Memory para identificar problemas que podrían afectar negativamente el rendimiento, como las pérdidas de memoria y las pérdidas de referencia. El kit de herramientas también puede recopilar información de bajo nivel, como la cadena de llamadas, el ID del hilo y la ubicación en la memoria virtual de seguimiento, así como los VIs de perfil, los ejecutables y las bibliotecas compartidas.

 

Incrementando la memoria en LabVIEW

Información adicional

Este mensaje es más común si LabVIEW no puede asignar un bloque de memoria lo suficientemente grande para una matriz. Por ejemplo, una matriz 2D de números de punto flotante de doble precisión de tamaño de 2,000 por 2,000 elementos utiliza aproximadamente 32 MB. Incluso si hay 32 MB de memoria disponible, es posible que no tenga un bloque de memoria contigua lo suficientemente grande para la matriz.

Este mensaje también se genera cuando se usa una matriz que contiene más de 2 ^ 31 elementos para indexar un For Loop. Las matrices pueden contener hasta 2 ^ 32 elementos, pero un For Loop solo puede indexar hasta 2 ^ 31 valores. Esto se debe a que el terminal N utiliza el tipo de datos numérico de entero de 32 bits (I32) con signo en lugar del tipo de datos de entero de 32 bits sin signo (U32). El bit más significativo del tipo de datos I32 se utiliza para especificar si el valor es positivo o negativo.