#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 Гигабайт, а вторая версия по-прежнему выдает сообщение о нехватке памяти.