[Beowulf] Quick question... on Fortran
Many of your questions may have already been answered in earlier discussions or in the FAQ. The search results page will indicate current discussions as well as past list serves, articles, and papers.
Lombard, David N dnlombar at ichips.intel.comFri May 11 06:51:37 PDT 2007
- Previous message: [Beowulf] Quick question... on Fortran
- Next message: [Beowulf] Quick question... on Fortran
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Thu, May 10, 2007 at 12:01:34PM -0400, Robert G. Brown wrote: > I am (as you may well know) extremely fortran averse. However, a > researcher in our department has recently asked what the current limits > are on the size of an array in modern fortran(s) under linux. I suppose > he'd like an answer for both 32 and 64 bit systems. From what I have > been able to google out, it looks like the answer is 2^31 bytes in 32 > bit systems and as big as the hardware permits less maybe a GB in 64 bit > systems. Is this correct? Any fortran experts out there? I'd be happy > for answers for more than one compiler, of course -- I'd guess that e.g. > pathscale might have a greater capacity than e.g. gfortran than g77 > legacy... In *theory*, the limits are as you described. However, that theory doesn't acknowledge memory layouts, shared libraries, memory-mapped space, &etc. Clearly, these details are mostly (only) significant on a 32-bit system. The gross 32-bit layout, from bottom to top is: program & data, shared libs & mmap, heap, and stack; with the space between the code/data and shared libs controlled by brk(2). Getting to Fortran, the next interesting bit is where the array is located. If in a common, the array is going to be in the break-controlled region between the program and the shared libraries & mmap. I don't think this varies among compilers, but could be wrong here; it's true for gcc. The kernel location TASK_UNMAPPED_BASE figures in this, as that's the base for the shared libraries & mmap(2) space. On i386, this is defined as TASK_SIZE/3, where TASK_SIZE is the top of the process address space, at 3GB, i.e., TASK_UNMAPPED_BASE=1GB. See the source at include/<arch>/processor.h for these values. Shared library positioning can be tweaked via prelink(8), so max common-resident array size may well depend on the specific system. Otherwise, the array's going to be in heap or stack, and that's somewhere between TASK_UNMAPPED_BASE and TASK_SIZE. I think I recall that malloc(3) will also return stuff below TASK_UNMAPPED_BASE if there's not enough space above. On a 64-bit system, the 32-bit limits apply to a 32-bit code, otherwise, well the limitation is not likely the system. -- David N. Lombard, Intel, Irvine, CA I do not speak for Intel Corporation; all comments are strictly my own.
- Previous message: [Beowulf] Quick question... on Fortran
- Next message: [Beowulf] Quick question... on Fortran
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Beowulf mailing list
