Poprawny sposób na wykorzystanie pamięci Mathematica?
W 32-bitowym systemie operacyjnym, gdzie maksymalna ilość pamięci przydzielonej do dowolnego programu jest ograniczona, Mathematica z wdziękiem kończy jądro i zwraca błąd maksymalnej alokacji pamięci.
Jednak na 64-bitowym systemie operacyjnym Mathematica będzie swobodnie wykorzystywać całą dostępną pamięć i zatrzymywać system. W związku z tym, jaki jest prawidłowy sposób ograniczenia zużycia pamięci? Można by użyćMemoryConstrained
w połączeniu z $Pre
lub CellEvaluationFunction
, ale wolałbym nie wiązać żadnego z nich w tym celu, albo muszę zmodyfikuj istniejące zastosowania, aby włączyć tę funkcję.
Czy istnieje inny sposób globalnego ograniczenia użycia pamięci, taki jak flaga jądra lub system $Option?
21
Author: Dr. belisarius, 2011-10-22
1 answers
W } Mathematica 8 można uruchomić pamięć, coś w stylu:
maxMemAllowed = 15449604;
intervalBetweenTests = 1; (*seconds*)
iAmAliveSignal = 0;
Dynamic[iAmAliveSignal]
RunScheduledTask[
If[MemoryInUse[] > maxMemAllowed , Quit[], iAmAliveSignal++],
intervalBetweenTests];
Pamiętaj, aby uruchomić
RemoveScheduledTask[ScheduledTasks[]];
Aby go wyłączyć.
Edit
Możesz ostrzegać lub interaktywnie decydować, co zrobić przed rzuceniem palenia. Zgodnie z życzeniem, oto próba z przydzielonym 1.3 GB. W tej maszynie nie mogę pójść dalej.
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}];
14
Author: Dr. belisarius,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-26 21:54:46
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-26 21:54:46