Reduce memory requirement of some vectorized operations

5 visualizaciones (últimos 30 días)
Christopher
Christopher el 27 de Nov. de 2015
Editada: Christopher el 27 de Nov. de 2015
In the following code, i perform some vectorized operations which happen to be highly memory intensive because my actual value of 'num' is 250. This is close to my limit, with 64 GB RAM. However, i would like to use a higher value. The goal of the code is to obtain the variable here called 'Energy_ind', which is only about 10 GB for num=250.
The main problem is the line:
Esiteindices = eindices(:,wbrdindic(:));
How can I do this same operation without the huge memory burden?
num = 100;
elnum = num^3;
brd = 4;
P = randi(4,[num num num]);
P_wbrd = padarray(P,[brd brd brd], 'circular');
elnum_wbrd = (num+brd*2)^3;
eoffsets = int32(randperm(171)');
%%%%%
allind = reshape(uint32(1:elnum),size(P));
allind_wbrd = padarray(allind,[brd brd brd],'circular');
eindices = repmat(eoffsets,1,elnum_wbrd);
for i=1:elnum_wbrd
eindices(:,i) = eindices(:,i)+i;
end
% get indices of O inside O_wbrd
wbrdindic_i = reshape(uint32(1:elnum_wbrd),size(P_wbrd));
wbrdindic = wbrdindic_i(1+brd:end-brd,1+brd:end-brd,1+brd:end-brd);
% Energy indices for elements in Owbrd(O)
Esiteindices = eindices(:,wbrdindic(:)); % BIG
clear eindices wbrdindic_i wbrdindic
Energy_ind = vec2mat(uint32(allind_wbrd(Esiteindices(:))),numel(eoffsets))';
clear Esiteindices
I am hoping this script can run without requiring significantly more memory than the total memory of 'Energy_ind'.

Respuestas (0)

Categorías

Más información sobre Performance and Memory en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by