Отобразите использование памяти

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.

Используйте строку состояния

Объем памяти, доступный на вашем компьютере, может значительно влиять на ваши символьные вычисления. Во-первых, некоторые вычисления не могут запуститься без достаточной памяти. В этом случае вы добираетесь “из памяти” ошибка. Во-вторых, если механизм MuPAD® использует виртуальную память путем свопинга данных по и от устройства хранения данных, вычисления могут запуститься намного медленнее, чем они запускаются, если система не использует виртуальную память. Наблюдение использования памяти при выполнении кода может помочь вам понять, использует ли ваш код доступную память эффективно.

Самый простой инструмент для наблюдения использования памяти является строкой состояния. Можно найти строку состояния в нижней части блокнота MuPAD. Если вы не видите строку состояния, выберите View > Status Bar. Крайне левый конец строки состояния отображает текущее состояние механизма, включая память и время, используемое во время новых вычислений. В то время как вычисление все еще запускается, информация о строке состояния продолжает изменяться.

Если механизм не соединяется с вашим блокнотом, строка состояния отображает Not Connected. Для получения дополнительной информации о строке состояния, смотрите Информацию о статусе Просмотра.

Примечание

Когда вы выполняете вычисления в нескольких блокнотах MuPAD, каждый блокнот запускает свой собственный двигатель. В этом случае см. за общей суммой памяти, используемой всеми механизмами MuPAD (процессы mupkern.exe).

Генерируйте отчеты использования памяти периодически

Когда вычисление занимает много времени, чтобы запуститься, может быть полезно отобразить информацию о прогрессе. В этом случае MuPAD может выпустить периодические сообщения, показывающие использование активной памяти, зарезервированную память, и время оценки. Можно управлять частотой, с которой MuPAD распечатывает такие сообщения.

Чтобы установить частоту этих периодических сообщений, используйте функцию Pref::report. По умолчанию значение Pref::report 0; MuPAD не распечатывает периодические сообщения о состоянии. Если вы увеличиваете значение к 1, MuPAD распечатывает сообщения о состоянии приблизительно каждый час. (Точная частота зависит от вашей машины.) Максимальное значение, принятое Pref::report, равняется 9.

Предположим, что вы хотите сгенерировать и отсортировать список 10 000 000 случайных целых чисел. Эти операции занимают много времени из-за огромного числа элементов. Если вы устанавливаете значение Pref::report к 4, MuPAD отображает несколько сообщений о состоянии при выполнении этих операций:

Pref::report(4):
sort([random() $ i = 1..10^7]):
 [used=167852k, reserved=168579k, seconds=30]
[used=294614k, reserved=295370k, seconds=60] [used=421376k, reserved=422161k,
seconds=90] 

Если вы увеличиваете значение Pref::report к 6, MuPAD распечатывает сообщения о состоянии более часто:

Pref::report(6):
sort([random() $ i = 1..10^7]):
 [used=84035k, reserved=84661k, seconds=10]
[used=126987k, reserved=127664k, seconds=21] [used=169940k, reserved=170600k,
seconds=32] [used=212892k, reserved=213537k, seconds=43] [used=255844k,
reserved=256540k, seconds=54] [used=298797k, reserved=299476k, seconds=65]
[used=341749k, reserved=342413k, seconds=76] [used=384701k, reserved=385416k,
seconds=87] [used=427654k, reserved=428352k, seconds=98] [used=470606k,
reserved=471355k, seconds=109] 

Каждый раз, когда вы выполняете этот пример, MuPAD добавляет новый список 107 случайных чисел и хранилищ, которые перечисляют в таблице истории. По умолчанию таблица истории содержит до 20 элементов. В то время как этот список остается в таблице истории, MuPAD не может выпустить память, должен был сохранить 107 целых чисел. Чтобы выпустить эту память, используйте одну из этих альтернатив:

  • Продолжите вычисления, ожидая, пока MuPAD не запишет 20 новых элементов в таблицу истории. Выполнение вычислений с уменьшаемой суммой доступной памяти может быть очень медленным.

  • Отключите механизм MuPAD, соединенный с блокнотом путем выбора Notebook > Disconnect. Новый механизм запускается, когда вы оцениваете любую команду в блокноте.

  • Очистите таблицу истории путем устанавливания значения переменной HISTORY к 0. Эта переменная задает максимальное количество элементов в таблице истории. Чтобы восстановить значение по умолчанию HISTORY, введите delete HISTORY:

HISTORY := 0:
delete HISTORY:
HISTORY

Для получения дополнительной информации о механизме истории в MuPAD, смотрите Механизм Истории.

Для дальнейших вычислений также восстановите значение по умолчанию Pref::report:

Pref::report(NIL):

Сгенерируйте отчеты использования памяти для вызовов процедуры

MuPAD может распечатать информацию об использовании памяти, когда вы выполняете процедуру в режиме трассировки. В этом случае система сообщает об использовании памяти относительно каждого шага вызова процедуры.

Например, создайте рекурсивную процедуру juggler, который вычисляет последовательность номера Жонглера для любого начального положительного целочисленного n:

juggler := proc(n:Type::PosInt)
begin
  J := append(J, n);
  if n = 1 then
    return(J)
  end_if:
  if testtype(n, Type::Even) then
    juggler(floor(n^(1/2)))
  else
    juggler(floor(n^(3/2)))
  end_if
end_proc:

Предположим, что вы хотите видеть отчет использования памяти для каждого вызова этой процедуры. Сначала вызовите функцию prog::trace с опцией Mem. Затем переключите осуществление процедуры juggler к режиму трассировки:

prog::trace(Mem):
prog::trace(juggler)

Теперь, когда вы вызываете процедуру juggler, отчет трассировки показывает использование памяти для каждого вызова juggler:

J := []:
juggler(7)
enter
juggler(7) [mem: 5338408]   enter juggler(18) [mem: 5373600]     enter
juggler(4) [mem: 5374080]       enter juggler(2) [mem: 5374584]  
      enter juggler(1) [mem: 5375064]         computed [7, 18, 4,
2, 1] [mem: 5375032]       computed [7, 18, 4, 2, 1] [mem: 5374648]
    computed [7, 18, 4, 2, 1] [mem: 5374264]   computed [7, 18, 4,
2, 1] [mem: 5373880] computed [7, 18, 4, 2, 1] [mem: 5373524] 

Опция Mem независима от прослеженной процедуры. Теперь, если вы используете prog::trace, чтобы проследить какую-либо другую процедуру, prog::trace отображает использование памяти на каждом шаге той процедуры. Удалите эту глобальную опцию для дальнейших вычислений:

prog::trace(Mem = FALSE)

Чтобы прекратить прослеживать процедуру juggler, используйте функцию prog::untrace:

prog::untrace(juggler):