Re: Does MemoryConstrained count stack space?
- To: mathgroup at smc.vnet.net
- Subject: [mg117425] Re: Does MemoryConstrained count stack space?
- From: Leonid Shifrin <lshifr at gmail.com>
- Date: Fri, 18 Mar 2011 05:59:57 -0500 (EST)
Alexey, My impression of the memory consumption by the stack has been that it is (usually?) much smaller than memory typically used for computations. In other words, you have just a relatively small amount of memory allowed to be used by the stack until the kernel crashes: In[1]:= MaxMemoryUsed[] Out[1]= 18009584 In[2]:= Quiet@Module[{f, n = 0}, f[x_] := (n += 1; f[x + 1]); TimeConstrained[Block[{$RecursionLimit = 65000}, f[0]], 0.5, n]]; In[3]:= MaxMemoryUsed[] Out[3]= 29857584 It is about 10 Mb only, and on my system (AMD Phenom X6, Win7, M8.0, 8Gb RAM) setting the $RecursionLimit to a slightly larger value results in a crash for this particular function. Given that generally the Mathematica's memory-constraining functions are working approximately at best, and given also that the stack space seems to often be only a small fraction of the total memory used in a computation, the memory-based method of avoiding crashes does not seem promising to me. If it is the crashes that you want to prevent, I'd set a fixed finite $RecursionLimit, or, even better, look carefully at your functions to see why they need such a deep recursion and whether you can rewrite the code to use iterations. OTOH, if you want to prevent the large memory consumption, evaluation stack seems to not be the main contributing factor. If your goal is to prevent excessive swapping, in this thread http://groups.google.com/group/comp.soft-sys.math.mathematica/browse_thread/thread/bc41b4a5f51fbcb8 a function is developed which you may find useful. Regards, Leonid On Thu, Mar 17, 2011 at 2:34 PM, Alexey <lehin.p at gmail.com> wrote: > Hello, > > On the Documentation page for $RecursionLimit we read: > > "MemoryInUse and related functions do not count stack space. " > > And also: > > "On most computers, each level of recursion uses a certain amount of > stack space. $RecursionLimit allows you to control the amount of stack > space that Mathematica can use from within Mathematica. On some > computer systems, your whole Mathematica session may crash if you > allow it to use more stack space than the computer system allows. " > > Does MemoryConstrained count stack space? If not, is there another > function that fulfills the following statement taken from the > documentation page for MemoryConstrained: > > "MemoryConstrained generates an interrupt to stop the evaluation of > expr if the amount of additional memory requested during the > evaluation of expr exceeds b bytes." > > ? > > I mean a function that will count ALL additional memory requested > during evaluation, including stack space. > >