Использование памяти Matlab

#matlab

#matlab

Вопрос:

Я запускаю код Matlab в HPC моего университета. У меня есть две версии кода. Вторая версия, несмотря на создание меньшего массива, похоже, требует больше памяти. Я хотел бы получить вашу помощь, чтобы понять, так ли это на самом деле и почему.

Позвольте мне начать с некоторых предварительных строк:

 clear
rng default
%Some useful components
n=7^4;
vectors{1}=[1,20,20,20,-1,Inf,-Inf];
vectors{2}=[-19,19,19,19,-20,Inf,-Inf];
vectors{3}=[-19,0,0,0,-20,Inf,-Inf];
vectors{4}=[-19,0,0,0,-20,Inf,-Inf];
T_temp = cell(1,4);
[T_temp{:}] = ndgrid(vectors{:}); 
T_temp = cat(4 1, T_temp{:});
T = reshape(T_temp,[],4); %all the possible 4-tuples from vectors{1}, ..., vectors{4}
  

Это первая версия 1 кода: я создаю матрицу, D1 перечисляющую все возможные пары неупорядоченных строк из T

 indices_pairs=pairIndices(n);
D1=[T(indices_pairs(:,1),:) T(indices_pairs(:,2),:)];
  

Это вторая версия кода: я создаю матрицу, D2 перечисляющую случайный набор m=10^6 неупорядоченных пар строк из T

 m=10^6;
p=n*(n-1)/2;
random_indices_pairs = randperm(p, m).';
[C1, C2] = myind2ind (random_indices_pairs, n);
indices_pairs=[C1 C2];
D2=[T(indices_pairs(:,1),:) T(indices_pairs(:,2),:)];
  

Мой вопрос: при генерации D2 HPC заканчивается память. При генерации D1 HPC работает нормально, несмотря на то, что D1 массив больше, чем D2 . Почему это так?


Это дополнительные функции, использованные выше:

 function indices = pairIndices(n)
  [y, x] = find(tril(logical(ones(n)), -1)); %#ok<LOGL>
  indices = [x, y];
end


function [R , C] = myind2ind(ii, N)
    jj = N * (N - 1) / 2   1  - ii;
    r = (1   sqrt(8 * jj)) / 2;
    R = N  -floor(r);
    idx_first = (floor(r   1) .* floor(r)) / 2;
    C = idx_first-jj   R   1;
end
  

Комментарии:

1. Что такое myind2ind ?

2. Спасибо и извините, я забыл добавить это.

3. используйте profile -memory on , чтобы убедиться в этом сами. Во втором случае вы выделяете много дополнительных массивов. Вы можете уменьшить ее до небольших массивов, относительное масштабирование должно остаться прежним.

4. При запуске второй версии в octave используется только 199 Мб памяти, что относительно мало. Вы проверили доступную память?

5. Я не знаю, что происходит: я запросил 7 Гигабайт, а вторая версия по-прежнему выдает сообщение о нехватке памяти.