[Beowulf] g77 limits...
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.
Toon Moene toon at moene.indiv.nluug.nlThu Feb 23 11:40:21 PST 2006
- Previous message: [Beowulf] Short question on Multi Dual-Core UCP.
- Next message: [Beowulf] g77 limits...
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Robert G. Brown wrote:
> What are the current limits on the size of arrays that can be allocated
> in g77? I know that this is almost a FAQ, but I cannot look back at the
> archives because it is so time dependent an answer. In particular, can
> an x64 box with a modern linux kernel and a modern g77 allocate 4-8 GB
> arrays (presuming, of course, that one uses a long int for an index)? I
> have seen references to "using an offset" in a few google hits (that
> were not very informative) -- does that basically mean doing pointer
> arithmetic in fortran?
> (I know Toone works on this and am hoping he's paying attention so I can
> get a really authoritative and informative answer...:-)
Well (thanks), I did work on removing a rather silly limit whereby no
array could be larger than 2^32 *bits* in g77 (due to the backend
expressing every size in bits).
I was able to show that - due to the fact that the minimum *unit* in
Fortran indexing was a byte - that the real limit was 2^32 *bytes* (by
showing that constant folding in the compiler's backend would always
remove the bit size "limitation").
However, I never have been able to try out the limits of using a > 2
Gbyte array - while doing the indexing with INTEGER*8 - because my 64
bit machines are simply to small.
The following code works on my 0.5 Gbyte RAM / 1.5 Gbyte SWAP Athlon 64
laptop with gfortran (the new Fortran 95 GNU Fortran), albeit horribly
slowly:
INTEGER*8 I, NSIZE
PARAMETER (NSIZE = 100 000 000_8)
DIMENSION A(3*NSIZE), A1(NSIZE), A2(NSIZE), A3(NSIZE)
EQUIVALENCE (A( 1), A1(1))
EQUIVALENCE (A( NSIZE+1), A2(1))
EQUIVALENCE (A(2*NSIZE+1), A3(1))
DO I = 1, NSIZE
A1(I) = 0.0
A2(I) = 0.0
A3(I) = 0.0
ENDDO
DO I = 1, 3*NSIZE
A(I) = I
ENDDO
DO I = 1, NSIZE
IF (A1(I) .NE. A( I)) CALL ABORT
IF (A2(I) .NE. A( NSIZE+I)) CALL ABORT
IF (A3(I) .NE. A(2*NSIZE+I)) CALL ABORT
ENDDO
DO I = 1, NSIZE
A1(I) = 0.0
A2(I) = 0.0
A3(I) = 0.0
ENDDO
CALL SUB(A, 3*NSIZE)
DO I = 1, NSIZE
IF (A1(I) .NE. A( I)) CALL ABORT
IF (A2(I) .NE. A( NSIZE+I)) CALL ABORT
IF (A3(I) .NE. A(2*NSIZE+I)) CALL ABORT
ENDDO
END
SUBROUTINE SUB(A, N)
DIMENSION A(N)
DO I = 1, N
A(I) = I
ENDDO
END
This is the compiler that will be in GCC 4.1 (which will be out in about
a week). Perhaps you can jazz this up by increasing NSIZE so that you
go over the 4 Gbyte limit on a machine with enough memory ...
Hope this helps,
--
Toon Moene - e-mail: toon at moene.indiv.nluug.nl - phone: +31 346 214290
Saturnushof 14, 3738 XG Maartensdijk, The Netherlands
A maintainer of GNU Fortran 95: http://gcc.gnu.org/fortran/
My next laptop will have a crank
- Previous message: [Beowulf] Short question on Multi Dual-Core UCP.
- Next message: [Beowulf] g77 limits...
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Beowulf mailing list
