2015-06-02 3 views
2

Я пытаюсь вычислить память, используемую процессом MATLAB до и после решения большой разреженной матрицы. Я использую memory и прямой решатель A\b.Matlab - использование памяти после решения большой системы

То, что я хочу, - это просто mesaure, контролируя в некотором роде память, используемую MATLAB, и вычислить разницу между памятью, используемой сразу после загрузки файла, содержащего разреженную матрицу, и память, используемую сразу после решения разреженной системы.

Вот код, я использую

% load and store the sparse matrix into A 
A = load('very_large_sparse_matrix.mat'); 

% store memory used after loading 
usr = memory; 
memory_after_load = usr.MemUsedMATLAB; 

% solve the system 
% no matter where b comes from 
x = A\b 

% store memory used after solving 
usr = memory; 
memory_after_solve = usr.MemUsedMATLAB; 

% print the difference 
disp(memory_after_solve - memory_after_load); 

Но разница всегда 0 или отрицательное целое число. Я думаю, потому что MATLAB предварительно распределяет память перед запуском кода (я ошибаюсь?), И он не меняет распределение динамически, если не для чрезвычайной ситуации.

Я ожидаю увеличения используемой памяти, потому что через прямые решатели заполнение увеличивает количество ненулевых элементов.

Как его рассчитать? Я видел whos, который дает размер в байтах переменной, но то, что я ищу, - это память, используемая процессом.

спасибо.

EDIT

Я только что нашел, что MATLAB заранее распределяет свои ресурсы. Тогда эквивалентный вопрос может быть Есть ли способ отключить предопределяющую систему?

+0

Интересный вопрос. С нетерпением ждем ответа на вопрос. – rayryeng

+1

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

+0

Я тоже подумал о сравнении информации о системе. Мне не нужен точный результат, тогда он будет хорошим рабочим (временным) решением. – Firaja

ответ

0

Благодаря @horchler, я нашел решение.

Даже если MATLAB предварительно выделяет всю память, необходимую для ее выполнения до завершения, spparams('spunomi', 3) показывает пики внутри выделения.

Кроме того, делая [L,U,P,Q,R] = lu(A), а затем вычисления разности между числом ненулевых элементов в L и количество ненулевых элементов в A, функция whos приводит к тем же результатам!

Смежные вопросы