[Beowulf] Re:Fortran Array size question

Gus Correa gus at ldeo.columbia.edu
Tue Nov 3 12:38:36 PST 2009

Hi Prentice, list

Intel Fortran (at least the 10. and 11.something versions I have)
has different "memory models" for compilation.  The default is "small".
The PGI compiler has a similar feature, IIRR.

Have you tried -mcmodel=medium or large?
I never used large, but medium helped a few times on x86_64/i64em.

Of course your available RAM may be restriction,
as David pointed out.

An excerpt from "man ifort" is enclosed below.

I hope this helps,
Gus Correa
Gustavo Correa
Lamont-Doherty Earth Observatory - Columbia University
Palisades, NY, 10964-8000 - USA

 From "man ifort":

        -mcmodel= <mem_model> (i64em only; L*X only)
               Tells the compiler to use a specific memory  model  to 
               code  and store data.  This option can affect code size 
and per-

               You can specify one of the following values for <mem_model>:

               · small

                 Restricts code and data to the first 2GB of address 
space. All
                 accesses of code and data can be done with Instruction 
                 (IP)-relative addressing.  This is the default.

               · medium

                 Restricts code to the first 2GB; it places no memory 
                 tion  on  data.  Accesses of code can be done with 
                 addressing, but accesses of data must be  done  with 

               · large

                 Places  no memory restriction on code or data. All 
accesses of
                 code and data must be done with absolute addressing.

               If your program has COMMON blocks and local data  with  a 
               size  smaller  than  2GB, -mcmodel=small is sufficient. 
               larger  than  2GB  require  -mcmodel=medium  or 
               Allocation  of  memory larger than 2GB can be done with 
any set-
               ting of -mcmodel.

               IP-relative addressing requires only 32 bits,  whereas 
               addressing requires 64-bits.  IP-relative addressing is 
               faster. So, the small memory model has the least impact 
on  per-

               Note:  When the medium or large memory models are 
specified, you
               must also specify option -shared-intel to ensure that 
the  cor-
               rect  dynamic versions of the Intel run-time libraries 
are used.

               When shared objects (.so files) are built, 
               code  (PIC)  is  specified so that a single .so file can 
               all three memory models. The compiler driver adds  option 
               to implement PIC.

               However,  you must specify a memory model for code that 
is to be
               placed in a static library or code that will  be  linked 

David Mathog wrote:
> Prentice Bisbal <prentice at ias.edu> wrote:
>> Question: What is the maximum number of elements you can have in a
>> double-precision array in Fortran? I have someone creating a
>> 4-dimensional double-precision array. When they increase the dimenions
>> of the array to ~200 million elements, they get this error:
>> compilation aborted (code 1).
> The two things that come immediately to mind are:
> 1.  The compiler ran out of memory.  (In addition to the size of the
> memory in the machine, check ulimit.)
> 2.  The compiler is trying to build the program with 32 bit pointers and
> it cannot address this array, or perhaps all memory accessed, with a
> pointer of that size.  If that is the issue using 64 bit pointers should
> solve the problem, but I can't tell you what compiler switches are
> needed to do this.
> Regards,
> David Mathog
> mathog at caltech.edu
> Manager, Sequence Analysis Facility, Biology Division, Caltech
> _______________________________________________
> Beowulf mailing list, Beowulf at beowulf.org sponsored by Penguin Computing
> To change your subscription (digest mode or unsubscribe) visit http://www.beowulf.org/mailman/listinfo/beowulf

More information about the Beowulf mailing list