요즘 RAM 과의 전쟁이다. 오늘 두대의 32G RAM도 한계에 달해 일단 1대의 64G RAM 조립 컴튜터를 주문했고, 다음주에 학교에서 승인이 나면 나의 연구비로 1대를 더 구매예정이다. 12개 Thread의 i7이다.
여기에 추가해서 RAM의 크기가 큰 불필요한 변수들을 지우는 방법을 개발했고, 여기에 다시 2GB등 대형변수들은 자릿수 조정을 통한 RAM용량을 줄여보고자 한다. 사실 C++에서는 변수지정이 필수라서 문제가 되질 않지만, 그게 헝렁한 Matlab/R등에서는 조정을 통한 메모리 저감이 가능하다. 사실 이게 기초이론인데 나는 사실 이 기본을 간과했다.
http://www.mathworks.com.au/help/matlab/numeric-types.html
1,092,083,726,576 byte라면 1은 Tera (1TB), 2는 Giga (2GB), 3은 Mega (MB), 6은 Kilo (6KB)가 단위다. 1000배씩이나 크기가 증가한다.
이제껏 Workspace에서 Name, Value, Min, Max만 표시를 했었는데 같은 줄의 빈공간에 오른 마우스 클릭을 하니 더 많은 옵션들이 있다. 그중 하나가 Bytes다. 이런 중요한 기능을 사장시키다니...
그리고 놀란 것은 현재 값이 {-1,0,1}의 값을 가지는 SSS라는 변수의 Byte수가 2GB를 넘는다. 헉~~
SA=double(SSS); 2.08G로 동일, 이말은 Matlab의 default가 "double"이란 말씀!!
SB=single(SSS); 1.04G로 50% 감소
SC=int32(SSS); 1.04G로 동일
SD=int16(SSS); 0.52G로 50% 감소
SE=int8(SSS); 0.26G로 50% 감소
8배나 RAM이 작아졌다.
더우기 중요한 것은 SSS=int8(SSS); 로 만들어서 기존의 SSS에 덮어 써야 한다.
그리고 소숫점 4자리까지만 보고 싶으면
s=sqrt(2)
s =
1.4142
더 길게 보고 싶으면
format long
s=
1.414213562373095
다시 원위치 하려면
format short
s =
1.4142
http://www.mathworks.com.au/help/matlab/ref/format.html#inputarg_Style
어쩜 이 방법을 잘 연구하면 64G RAM PC를 구매하지 않아도 될 듯....