memory - variable - potencia en mathematica
¿Forma correcta de limitar el uso de la memoria de Mathematica? (1)
En un sistema operativo de 32 bits, donde la memoria máxima asignada a cualquier programa es limitada, Mathematica termina el kernel con gracia y devuelve un error máximo de asignación de memoria.
Sin embargo, en un sistema operativo de 64 bits, Mathematica utilizará libremente toda la memoria disponible y detendrá el sistema. Por lo tanto, ¿cuál es la forma correcta de limitar el uso de la memoria? Se podría usar MemoryConstrained
combinado con $Pre
o CellEvaluationFunction
pero preferiría no atar ninguno de estos para este fin, o modificar los usos existentes para incorporar esta función.
¿Hay alguna otra forma de restringir globalmente el uso de la memoria, como un indicador de kernel, o $ Option del sistema?
En Mathematica 8 puedes iniciar un watchdog de memoria, algo como:
maxMemAllowed = 15449604;
intervalBetweenTests = 1; (*seconds*)
iAmAliveSignal = 0;
Dynamic[iAmAliveSignal]
RunScheduledTask[
If[MemoryInUse[] > maxMemAllowed , Quit[], iAmAliveSignal++],
intervalBetweenTests];
Recuerde correr
RemoveScheduledTask[ScheduledTasks[]];
para deshabilitarlo
Editar
Puede alertar o decidir interactivamente qué hacer antes de dejar de fumar. Según lo solicitado, aquí hay una versión de prueba con 1.3GB asignados. No puedo ir mucho más allá en esta máquina.
maxMemAllowed = 1.3 1024^3; (*1.3 GB*)
intervalBetweenTests = 1; (*Seconds*)
iAmAliveSignal = 0;
leyendToPrint = "";
Dynamic[leyendToPrint]
RunScheduledTask[
If[MemoryInUse[] > maxMemAllowed,
CreateDialog[CancelButton["Max Mem Reached", DialogReturn[]]];
Quit[],
Print["Memory in use: ", MemoryInUse[]];
leyendToPrint =
"Seconds elapsed = " <> ToString[iAmAliveSignal++]],
intervalBetweenTests];
IntegerPartitions[320, {15}];