본문 바로가기
programming language/MATLAB

MATLAB 메모리와 속도

by __observer__ 2012. 10. 21.
반응형

C/C++ 과 같은 언어를 사용하다가 MATLAB 을 사용해보면 코딩이 굉장히 쉽다는 생각을 많이 하게 됩니다.

 

이는 여러 가지 이유가 있겠지만, 일단 변수의 타입을 지정해 줄 필요가 없다는 장점이 있습니다.

 

요즘 많은 사람들이 사용하는 스크립트 언어들은 변수 타입을 일일이 지정해 주지 않아도 되는 경우가 많은데, MATLAB 도 마찬가지 특징이 있는 거죠.

 

이러한 변수들이란 결국 memory 관리와 관계가 될 텐데, 코딩하는 사람이 일일이 memory 에 대해 생각 안하고 코딩 할 수 있다는 건, MATLAB 내부적으로 알아서 memory 관리를 한다는 뜻이겠죠.

 

하지만 MATLAB 코딩 시 잘 생각 안 해 봤던 memory 에 대한 부분도 조금만 생각을 하면서 코딩을 한다면 MATLAB 코드의 성능을 높일 수가 있습니다.

 

즉, Memory-bound code 가 되는 것을 피할 수 있다는 겁니다.

 

참조, Memory-bound code: CPU 속도가 아닌 메모리 속도에 따라 코드의 성능 한계가 결정되는 코드

 

아래 주소의 글에 이러한 내용이 잘 정리가 되어 있는데요.

 

http://www.mathworks.co.kr/company/newsletters/news_notes/june07/patterns.html

 

여기서는 위 주소의 글을 간단하게 정리만 해보겠습니다. 

1. 벡터 또는 매트릭스 사용시 그 크기에 대해 preallocation을 해서 사용해야 reallocation 을 막을 수 있고 이에 따라 속도가 향상된다. 위 주소에서의 실험 결과에 의하면, preallocation 을 하면 그렇지 않을때의 코드 속도에 비해 99.7% 정도 줄어든다 하는군요.


2. 벡터 또는 매트릭스의 column 방향으로 저장을 하거나 접근하는게 row 방향으로 접근하는 것보다 속도가 빠르다. MATLAB 은 데이터 저장시 column 방향의 데이터들을 cache 메모리에 단조증가 방향으로 저장하게 됩니다. 따라서 column 방향으로 메모리에 접근을 해야 cache 효율을 향상시킬 수 있다고 하는군요. 위 주소의 실험결과에서는 메모리에 대해 row 방향 접근을 했을 때에 비해 column 방향 접근을 할 때, 약 55% 의 속도 향상이 있었다고 하는군요.


3. 필요 없는 변수의 생성을 피하라. 이는 사람들이 흔히 하는 실수 들인데요. 쓸데없는 메모리의 사용은 해당 변수에 따른 메모리를 다시 잡아야 하고 이에 따라 코드의 속도를 더디게 만들죠. 위 주소의 예에서는 3000 X 3000 의 매트릭스에 대한 단순 곱셈의 예에서 y=1.2*x 라고 했을 때에 비해 x=1.2*x 라고 했을 때 40~59% 의 속도 향상이 있었다고 하는군요.

 


위에 정리한 부분들에 대해 조금만 신경써서 코딩 한다면 훨씬 더 효율적인 코드가 될 수 있을 것 같네요~


반응형

댓글