В 32-битной операционной системе, где максимальный объем памяти, выделенной для любой программы, ограничен, Mathematica изящно завершает работу ядра и возвращает ошибку максимального выделения памяти.
Однако в 64-битной ОС Mathematica будет свободно использовать всю доступную память и остановит систему. Следовательно, как правильно ограничить использование памяти? Можно было бы использовать MemoryConstrained
в сочетании с $Pre
или CellEvaluationFunction
, но я бы предпочел не связывать ни один из них для этой цели или изменить существующие варианты использования, чтобы включить эту функцию.
Есть ли другой способ глобально ограничить использование памяти, например, флаг ядра или системный $Option?
MemoryConstrained
, но я ищу другой способ применить его. Если вы говорите, что операционная система не должна устанавливать жестких ограничений для программы, я не понимаю; Я бы предпочел, чтобы ОС сказала, что MathKernel использует слишком много оперативной памяти и была завершена. Прощай, чем запирать всю систему. Я понимаю, что истинное использование ОЗУ во многих случаях не будет таким же, как расчетное использование ОЗУ, но я могу с этим согласиться. - person Mr.Wizard   schedule 22.10.2011$Pre
. - person Brett Champion   schedule 22.10.2011NETLink
. - person Alexey Popkov   schedule 22.10.2011totalMemoryConstrained
) здесь: stackoverflow.com/questions/6405304/ . У меня сложилось впечатление, что это не всегда решает проблему. Посмотрите, может ли это сработать для вас. - person Leonid Shifrin   schedule 22.10.2011Job
. Но я могу отослать вас к основной страницеNETLink
документации: Установка приоритета процесса ядра. Вы увидите, что манипулировать приоритетом процесса ядра очень просто. И также легко получить информацию о текущем использовании памяти ядром. Таким образом, можно написать простую программу мониторинга, которая будет проверять, сколько памяти в данный момент использует этот процесс. Но, наверное, идея сJob
объектами намного лучше. - person Alexey Popkov   schedule 22.10.2011FreeMemoryConstrained
функциональность. Но он действительно очень сложный и на данный момент работает полностью корректно только с версией 7. Я не могу опубликовать его как ответ, потому что он огромен. Но я могу привести несколько фрагментов кода, демонстрирующих основные идеи. Обратите внимание, что для этого требуется запустить два процесса MathKernel: (1) главный, который отслеживает текущее использование памяти (2) подчиненный процесс, в котором выполняются все целевые вычисления. - person Alexey Popkov   schedule 22.10.2011RunScheduledTask
- person Dr. belisarius   schedule 22.10.2011