Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.
29249 Discussions

severe (41): insufficient virtual memory

felipin85
Beginner
1,516 Views
Hi everybody, I'm using ubuntu 10.04 32 bits and I work in Intel Fortran Composer XE 2011.I work with mkl and I using mkl_dss.f90. I created a problem that uses enough memory, but I have a cuestion. I have enough virtual memory (and RAM) and it seems that the system does not use anything. Monitor the system and shows that non-use or 1.5 Gb of RAM and 50 MB of Virtual, but I get the following message:

forrtl: severe (41): insufficient virtual memory
Image PC Routine Line Source
PROGRAMA30102010 088F9153 Unknown Unknown Unknown
PROGRAMA30102010 088F7E70 Unknown Unknown Unknown
PROGRAMA30102010 088C10AE Unknown Unknown Unknown
PROGRAMA30102010 088A230C Unknown Unknown Unknown
PROGRAMA30102010 088B1CC9 Unknown Unknown Unknown
PROGRAMA30102010 08053EA5 Unknown Unknown Unknown
PROGRAMA30102010 08053594 Unknown Unknown Unknown
libc.so.6 40133BD6 Unknown Unknown Unknown
PROGRAMA30102010 080534A1 Unknown Unknown Unknown

Any way to fix it?

Thanks,

Felipe Rodriguez

Note: VIRTUAL MEMORY 2.8 Gb, RAM 3.2 Gb
0 Kudos
3 Replies
Martyn_C_Intel
Employee
1,516 Views
You should not expect to use more than 2 GB of memory, real or virtual,for your application on a 32 bit OS.More memory may allow more processes to run, but it won'thelp a single process to use more.If you need more, you should go to a 64 bit OS and compiler.
0 Kudos
felipin85
Beginner
1,516 Views
Firts, thanks for your response. But, I don't understand why does not use any virtual memory and never uses little of the ram. The program is a program for solver plates, and when I study a plate 12x12 meters don't problem,for example:

PLATES 12 X 12:

RAM USE: 1.4 Gb (free 3.2-1.4= 1.8)
SWAP USE: 0%

PLATES 13X13:

The program breaks before you start calculating.


0 Kudos
Martyn_C_Intel
Employee
1,516 Views
I ran your program, with the necessary chenges to paths. It failed with "insufficient virtual memory" at line 55, ALLOCATE (VALORES(total*total)). It was trying to allocate an array of about 300,000,000 elements, or 2.4 GB. You can't do that on IA-32, however much physical memory and virtual memory you may have. The virtual address space is limited the 2**32 by the 32 bit OS, and your program's share is normally limited to 2**31. That includes the whole of your program, code plus data, not just this one data array. If you need arrays this large, you need to go to a 64 bit OS and compiler, if your processor supports these.

I haven't tried to understand your program in detail, and I don't have all the files that it asks for. Maybe some other combinations of input data would ask for smaller arrays. What I saw was a=b=13.0, pasox=0.1, which led to an array size of ((13/0.1)+1)**4. But an error message about insufficient virtual memory simply means that you have exceeded the available address space, whether the limit comes from the OS or from your actual physical memory + swap space.

Incidentally, if you build with -traceback, you should get a traceback for the parts of your program that you yourself compiled, that shows where the failure occurred.
0 Kudos
Reply