Personal tools

Difference between revisions of "Stacksize"

From MohidWiki

Jump to: navigation, search
(How-To)
 
(8 intermediate revisions by the same user not shown)
Line 5: Line 5:
 
Stacksize reserve is a problem in windows because windows OSes limit the use of code data and static data to 2GB only (even for x64 architectures). The best description found over this matter, to this date, on the internet is in this thread in intel forums
 
Stacksize reserve is a problem in windows because windows OSes limit the use of code data and static data to 2GB only (even for x64 architectures). The best description found over this matter, to this date, on the internet is in this thread in intel forums
  
[http://software.intel.com/en-us/articles/memory-limits-applications-windows/]
+
[http://software.intel.com/en-us/articles/memory-limits-applications-windows/ Intel Forum: memory-limits-applications-windows]
 
 
  
 
==Requirements==
 
==Requirements==
Line 15: Line 14:
 
or
 
or
  
* Visual Studio C++ 2010 Express (free software)
+
* [http://www.microsoft.com/express/Downloads/ Visual Studio C++ 2010 Express (free software)]
  
 
Visual Studio 2008 (or Visual Studio C++ 2010 Express) provides the [[dumpbin]] and the [[editbin]] command-line tools.
 
Visual Studio 2008 (or Visual Studio C++ 2010 Express) provides the [[dumpbin]] and the [[editbin]] command-line tools.
  
 
==How-To==
 
==How-To==
* Copy paste the following code and save it as a batchfile in your simulation ''\exe'' folder
+
* Copy paste the following code and save it as a batchfile in your simulation ''\exe'' folder under the name ''[[IncrementSizeOfStack]].bat'':
 
  @echo off
 
  @echo off
 +
REM IncrementSizeOfStack.bat
 
  REM ARG1 %1 is for example "MohidWater_x64_release_double_27-03-2011.exe"
 
  REM ARG1 %1 is for example "MohidWater_x64_release_double_27-03-2011.exe"
 
  set MOHID=%1
 
  set MOHID=%1
Line 29: Line 29:
 
  %MOHID%
 
  %MOHID%
 
  )
 
  )
 +
 +
* You also need to create a file containing a single column of integers ranging from 1 to 1000 (copy paste from  an excel column, for example) and save it as ''indexes.txt'' in your simulation ''\exe'' folder:
 +
1
 +
2
 +
3
 +
4
 +
...
 +
1000
  
 
* Open the special console ''Start-->All programs-->VS2008-->VS2008 Tools-->VS2008 Command prompt'' and type
 
* Open the special console ''Start-->All programs-->VS2008-->VS2008 Tools-->VS2008 Command prompt'' and type
Line 34: Line 42:
 
  > IncrementSizeOfStack.bat MohidWater_x64_release_double_DD-MM-YYYY.exe
 
  > IncrementSizeOfStack.bat MohidWater_x64_release_double_DD-MM-YYYY.exe
  
The batch file starts testing different stack sizes. Once you get the MohidWater running, edit the laststacksize.txt file to see what is the minium number of Stack reserve that made the model run.
+
The batch file starts testing different stack sizes.  
 +
 
 +
Once you get the MohidWater running, use ''Ctrl-C'' to break the batchfile from running and edit the ''laststacksize.txt'' file to see what is the minium number of Stack reserve that made the model run. Keep a note of it.
 +
 
 +
You now have a properly configured executable to run your simulation.
  
 
==See also==
 
==See also==
 +
*[[stack overflow]]
 
*[[dumpbin]]
 
*[[dumpbin]]
 
*[[editbin]]
 
*[[editbin]]
Line 42: Line 55:
  
 
[[Category:programming]]
 
[[Category:programming]]
 +
[[Category:Windows]]

Latest revision as of 11:39, 1 April 2011

Setting the stacksize reserve with the ifort compiler can be critical to run MOHIDWater without any stack exception or other stack overflow.

This article helps the developper to find the appropriate stacksize for its program to run.

Stacksize reserve is a problem in windows because windows OSes limit the use of code data and static data to 2GB only (even for x64 architectures). The best description found over this matter, to this date, on the internet is in this thread in intel forums

Intel Forum: memory-limits-applications-windows

Requirements

In order to find the optimal minimal stacksize reserve to run the software application one needs to install either one of:

  • Visual Studio 2008 (paid software)

or

Visual Studio 2008 (or Visual Studio C++ 2010 Express) provides the dumpbin and the editbin command-line tools.

How-To

  • Copy paste the following code and save it as a batchfile in your simulation \exe folder under the name IncrementSizeOfStack.bat:
@echo off
REM IncrementSizeOfStack.bat
REM ARG1 %1 is for example "MohidWater_x64_release_double_27-03-2011.exe"
set MOHID=%1
for /F %%i in (indexes.txt) do (
	editbin /STACK:%%i000000 %MOHID%.exe
	@echo %%i000000 > lastStackSize.txt
	%MOHID%
)
  • You also need to create a file containing a single column of integers ranging from 1 to 1000 (copy paste from an excel column, for example) and save it as indexes.txt in your simulation \exe folder:
1
2
3
4
...
1000
  • Open the special console Start-->All programs-->VS2008-->VS2008 Tools-->VS2008 Command prompt and type
> cd rootOfSim\exe
> IncrementSizeOfStack.bat MohidWater_x64_release_double_DD-MM-YYYY.exe

The batch file starts testing different stack sizes.

Once you get the MohidWater running, use Ctrl-C to break the batchfile from running and edit the laststacksize.txt file to see what is the minium number of Stack reserve that made the model run. Keep a note of it.

You now have a properly configured executable to run your simulation.

See also