LabVIEW "Memory Is Full" 에러 발생

업데이트 됨 Dec 4, 2023

해당 제품

소프트웨어

  • LabVIEW

문의사항

LabVIEW에서 규모가 큰 어플리케이션을 개발할 때 다음과 같은 에러 메시지가 종종 나타납니다 :

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.

사용 가능한 RAM 용량이 많은데도 불구하고 오류 메시지가 나타나는 이유는 무엇입니까?

해결책

이러한 에러는 메지시는 일반적으로 대용량의 데이터 셋트를 배열, 클러스터 또는 파형을 사용하여 프로그램을 개발 할 때 주로 나타납니다. LabVIEW는 각 데이터 세트를 연속적인 메모리 블록에 저장하기 때문에 컴퓨터에서 사용할 수있는 메모리 블록은 많은 양의 데이터 세트를 저장하기에 충분하지 않을 수 있습니다.

다음은 이 오류 메시지가 나타나지 않도록하는 몇 가지 방법 입니다.

배열, 클러스터 및 파형에서 사용되는 메모리 줄이기

  • 대용량 데이터 세트가있는 어레이를 사용하는 경우 가능하면 작은 데이터 유형을 어레이에 연결하십시오. 예를 들어, 배열이 배정도 부동 소수점 [DBL]이고 0에서 100 범위의 정수를 저장한다면 이 정수를 부호없는 8비트 정수 [U8]로 변경 할 수 있습니다. U8 데이터 형식은 배정 밀도 부동 소수점 숫자가 사용하는 메모리 중 여덟 번째를 사용합니다.
  • LabVIEW 8.5 및 이후 버전의 경우, In Place Element Structure를 사용하여 배열, 클러스터 또는 웨이브 폼을 사용할 때 데이터의 복사본을 만들지 않도록 합니다.
  • 큰 배열의 데이터를 그래프로 표시하려면 max-min decimation을 사용하여 모든 데이터 포인트를 그래프로 표시하지 않도록하십시오. max-min decimation에 대한 더 자세한 정보는 Memory Management for Large Data Sets를 참조 하십시오.
  • 프로필 성능 및 메모리 사용 도구(Profile Performance and Memory)를 사용하여 메모리 사용을 담당하는 VI를(identify which VIs are responsible for the memory usage) 식별 할 수 있습니다 .
  • 데이터 양의 데이터 세트를 분석하여 메모리가 가득 찬 위치를 확인하십시오. 디스크에 데이터를 스트리밍하거나 기록하고 TDMS 파일 및 NI DIAdem 소프트웨어와 같은 고성능 분석 및 보고 툴을 사용하십시오. .

 

어플리케이션 프로그램 내부의 메모리 사용 줄이기

  • LabVIEW가 데이터를 복사하는 횟수를 제한하려면, 어플리케이션에서 전역 변수와 로컬 변수의 수를 줄이십시오. 변수를 사용하는 대신 producer/consumer design pattern (생산자/소비자 패턴)이나 새 데이터 값 참조 함수를 사용하여 데이터에 대한 참조를 만드는 것을 고려하십시오.
  • 코드의 큰 부분을 SubVI로 분리 (Creating SubVIs from Selections ) 하고 참조에 의한 호출 노드를 사용하여 SubVI를 동적으로 호출하십시오. VI가 VI를 동적으로 호출하기 전까지는 SubVI가 메모리에 없습니다.
  • 가능한 경우 큰 subVI를 재 호출이 아닌 실행으로 설정하십시오 (재 호출이 아닌 실행은 Windows 및 Real-time VI의 기본 설정입니다).  Reentrancy: Allowing Simultaneous Calls to the Same SubVI
  • NI LabVIEW Desktop Execution Trace Toolkit 을 사용하여 메모리 누수 및 참조 유출과 같은 성능에 부정적인 영향을 미칠 수있는 문제를 식별하십시오. 추적 중인 버추얼 메모리의 호출 체인, 스레드 ID, 위치와 같은 로우레벨 정보를 수집합니다. VI, 실행 파일 및 공유 라이브러리 프로파일을 포함합니다.

 

LabVIEW에서 메모리 늘리기

추가 정보

이 메시지는 LabVIEW가 배열에 충분한 메모리 블록을 할당 할 수없는 경우 가장 일반적입니다. 예를 들어, 2,000 x 2,000 요소의 배정 밀도 부동 소수점 배열에는 약 32MB가 사용됩니다. 32MB의 메모리를 사용할 수있는 경우에도 어레이에 충분한 크기의 메모리 블록이 없을 수 있습니다.

위의 특정 예제에서이 오류는 2 ^ 31 개보다 많은 요소가 포함 된 배열을 사용하여 For 루프를 인덱싱 할 때 생성됩니다. 배열은 최대 2 ^ 32 개의 요소를 포함 할 수 있지만 For 루프는 최대 2 ^ 31 개의 값만 인덱싱 할 수 있습니다. 이것은 N 터미널이 U32가 아닌 I32 데이터 유형을 사용하기 때문입니다. I32 데이터 유형의 최상위 비트는 값이 양수인지 음수인지를 지정하는 데 사용됩니다.