Как проверить доступную память в Matlab 2010b или более поздней версии на Mac OSX? - PullRequest
4 голосов
/ 09 мая 2011

У меня есть копия Matlab от 2004 года (забыл, какой будет номер версии, но она, конечно, старая), и я мог бы использовать команду «features memstat», чтобы посмотреть, сколько памяти доступно Matlab.Команда больше не работает для меня в Matlab 2010b, что мне делать, чтобы увидеть доступную память?Спасибо.

PS Я попробовал команду "memory", как предложено @Rasman, но получил следующую ошибку:

???Ошибка при использовании ==> памяти Функция MEMORY недоступна на этой платформе.

Я использую Matlab 2010b для Mac OS X 64-bit.

Ответы [ 2 ]

13 голосов
/ 09 мая 2011

Используйте unix('vm_stat'); в MATLAB на Mac.Это дает, например:

Mach Virtual Memory Statistics: (page size of 4096 bytes)
Pages free:                        1580152.
Pages active:                       184679.
Pages inactive:                      64572.
Pages speculative:                   63389.
Pages wired down:                   203816.
"Translation faults":              3906655.
Pages copy-on-write:                301846.
Pages zero filled:                 1899205.
Pages reactivated:                       0.
Pageins:                            107102.
Pageouts:                                0.
Object cache: 15 hits of 32166 lookups (0% hit rate)

Результаты представлены на страницах размером 4096 байт, поэтому умножьте результаты на 4096, и вы получите значения, совместимые с Activity Monitor (вам нужно добавить «умозрительный» в «свободный», чтобы получитьточное согласие).Если вам просто нужна доступная память, вы можете использовать unix('vm_stat | grep free');.Если вам нужен номер, вы можете использовать что-то вроде:

[s,m]=unix('vm_stat | grep free');
spaces=strfind(m,' ');
str2num(m(spaces(end):end))*4096

РЕДАКТИРОВАТЬ: в ответ на комментарий ниже: «Он не говорит вам, сколько использовалось MATLAB и сколько еще можно использовать MATLAB».Вот что я делаю для этого дополнительного вопроса.

По моему опыту, 64-битная MATLAB может использовать всю свободную память (и даже больше, но она сильно замедляется, если вы начинаете много менять).Одна из моих систем имеет 22 Гб, и она без проблем использует все это.Если вы используете 32-битную MATLAB, вы ограничены 2 ГБ.

Чтобы увидеть общий объем памяти, вы можете добавить «свободный» + «активный» + «неактивный» + «умозрительный» + «проводной» из vm_stat (и умножить на 4096).Или, если вам нужен только общий объем памяти, вы можете использовать unix('sysctl hw.memsize | cut -d: -f2') (в байтах).

Чтобы получить память, используемую MATLAB, это немного сложнее.Память используется процессом управления.Если вы просто используете unix('ps'), вы получите память, используемую matlab_helper.Поэтому я использую:

% get the parent process id
[s,ppid] = unix(['ps -p $PPID -l | ' awkCol('PPID') ]); 
% get memory used by the parent process (resident set size)
[s,thisused] = unix(['ps -O rss -p ' strtrim(ppid) ' | awk ''NR>1 {print$2}'' ']); 
% rss is in kB, convert to bytes 
thisused = str2double(thisused)*1024 

Выше я использовал небольшую функцию awk, которая выбирает именованный столбец:

function theStr = awkCol(colname)
theStr  = ['awk ''{ if(NR==1) for(i=1;i<=NF;i++) { if($i~/' colname '/) { colnum=i;break} } else print $colnum }'' '];

Небольшое руководство по команде unix дляобъясните выше, на случай, если это кому-нибудь поможет.unix('command') сам по себе показывает вывод и возвращает статус.Если вы хотите обработать вывод, используйте [s,w] = unix('command') и обработайте вывод строки в w.Если вы хотите игнорировать вывод s, в более поздних версиях MATLAB вы можете использовать [~,w] = unix('command'), но я избегаю этого, поскольку у меня неизбежно будут разные версии на разных компьютерах.

0 голосов
/ 09 мая 2011

вы пробовали память

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...