티스토리 뷰



[LabVIEW] 랩뷰 VI에 대한 메모리 사용에 대한 글


LabVIEW로 프로그래밍을 할 때 데이터를 많이 쓰고 받거나, 큰 파일을 처리할 때 메모리에 대한 문제가 많이 발생을 합니다. 이럴때는 메모리에 대한 최적화가 필요합니다. 이 글에서는 메모리 최적화에 가장 기본이 되는 VI에서 메모리를 어떻게 사용하는지에 대해서 알아보도록 하겠습니다. 


MemoryTest.vi라는 이름을 가진 For문으로 랜덤 데이터를 생성하여 Waveform Graph에 저장하는 코드를 만들었습니다. For문으로 100000회를 돌리고 이에 대한 결과를 WafveForm Graph라는 이름을 가진 그래프에 데이터를 넣습니다. 



UI는 아래와 같습니다. Waveform Graph 하나만 Front Panel에 있습니다.



이 vi 파일을 저장한 뒤, 메모리 사용내역을 살펴보았습니다. 메모리 사용내역(Memory Usage)는 VI 프로퍼티(단축키 : Ctrl + I)를 통해서 확인이 가능합니다. VI 프로퍼티 창을 연뒤에 카테고리를 메모리 사용으로 변경하시면 됩니다. 



메모리 사용내역을 살펴보도록 하겠습니다. LabVIEW의 메모리는 크게 Operation Buffer, Execution Buffer, Transfer Buffer 3가지로 구분이 됩니다. 각 내역에 대한 상세내용은 아래와 같습니다. 


  • Operation Buffer : Front Panel에서 사용하는 메모리로 컨트롤과 인디게이터에 들어가는 데이터에 대한 복사본을 메모리에 가지게 됩니다. Chart의 History를 늘리게 되면 Operation Buffer에 대한 메모리 할당이 늘어나게 됩니다.

  • Execution Buffer : Block Diagram에서 사용하는 메모리입니다. 여기서 사용하는 메모리는 Tools -> Profile -> Show Buffer Allocation을 통해서 확인이 가능합니다.

  • Transfer Buffer : Front Panel과 Block Diagram 사이의 데이터 전달이 되는것을 막기 위해서 LabVIEW는 중간에 Transfer Buffer를 두고 있습니다. 사용하지 않는 인디게이터를 Front Panel에 두는 것은 Transfer와 Operation 사이의 메모리 할당을 중복으로 하게 되므로 메모리 최적화를 위해서는 이에 대한 처리가 필요합니다.


메모리 사용 내역을 살펴보면 기존의 VI는 약 26.8K를 사용하고 있습니다. 



위의 UI를 살짝 변경해 보았습니다. 그리고 저장하지 않은 상태에서 메모리 사용내역을 살펴보겠습니다.



그래프가 크기가 커진것 밖에 없는데, 메모리 사용내역이 39.6K로 50% 증가한것을 확인할 수 있습니다. 이는 그래프에 대한 Front Panel의 메모리 영역도 커진 이유도 있지만, LabVIEW에서 가지고 있는 실행에 대한 히스토리(Undo 기능에서 사용)에 대한 내역이 VI에 포함이 되어 있기 때문에 메모리 영역이 급격히 증가하게 된것입니다. 



파일을 저장하고, VI를 실행해 보았습니다. For문을 통해서 데이터를 생성하였기 때문에 데이터 부분에서 메모리 사용내역이 커져서 약 824.0K를 사용하고 있습니다. 



생성한 결과에 대한 값을 그래프의 기본값으로 지정해 보았습니다. 



기본 값으로 지정하고 나서 메모리 사용내역을 확인하면 데이터 양이 거의 실행했을 때와 비교하여 2배정도 차이가 나는것을 확인할 수 있습니다. 이는 내부적으로 100,000개의 double 형에 대한 데이터를 저장할 공간을 메모리상에 따로 만들어 놓았기 때문에 발생합니다. 기본값으로 지정하는 값의 크기가 크면 클수록 메모리 사용 내역이 커지게 됩니다. 



이 글에서는 VI를 이용할 때 메모리를 급증시킬 수 있는 원인을 몇가지 알아보았습니다. 메모리 최적화에 참고하시기 바랍니다. 


이 글이 도움이 되셨나요?

그렇다면 아래의 그림을 클릭해주세요.



댓글