>2Gb data objects: pgf77 v5.2 -mcmodel=medium -Mlarge_arr

hardware - IBM amd64 single proc server 8Gb RAM
OS - suse8.0SLES 64bit (kernel 2.4.21-143-smp)

i have assembler issues with single arrays >2Gb.

the test prog on p47 of the 5.2 release notes works OK (obviously) : if you don’t use -mcmodel=medium &c then you get ‘relocation truncated’ error. however, if you increase the array param in this test prog a bit further, eg to 22000, you get a different class of error:

/tmp/pgf77aaaaasEeaD.s: Assembler messages:
/tmp/pgf77aaaaasEeaD.s:60: Error: .COMMon length (-2054967296.) <0! Ignored.
/tmp/pgf77aaaaasEeaD.s:60: Warning: rest of line ignored; first ignored character is `,’

(or similar). this also happens with my alternative test prog (see base of this post), this prog manifests this alternative error if you change the array limit between about 130M and 140M.

Q: the options suggested by 5.2 release notes (-mcmodel=medium &c) seem only to behave the same as -fpic used to do in v5.1. they get me slightly larger arrays than otherwise, as did -fpic in 5.1, but nothing like the proper 5.2 64bit addressing as described in the release-notes table.

in summary - 5.1 & 5.2 both get some mileage out of -fpic for large single arrays, but any extra features in 5.2 seem to add nothing.

do i need to upgrade binutils (in my suse8.0 SLES) or something, to go along with my 5.1–>5.2 upgrade? otherwise, it would seem that the documented 5.2 64bit addressing upgrade is essentially ineffective.



my test prog, which won’t assemble:

program TEST1
integer*4 i1(i_1,4)
do i=1,i_1
do j=1,4
i1(i,j) = 0
end do
end do

Hi Will,

You need to have at least binutils version installed for large array support. From our 5.2-1 release notes http://www.pgroup.com/support/new_rel.htm

The 5.2-1 release (and later) PGF90, PGF77 and PGCC compilers now allow individual data objects larger than 2GB, with the addition of the -Mlarge_arrays switch. Note that for the -Mlarge_arrays switch to work properly

  1. Options -mcmodel=medium and -Mlarge_arrays are used
  2. The ‘binutils’ version is at least (such as the binutils installed in SuSE 9.0)
  3. The swap space is ‘large’

Your sample program works on a SuSE9.0 and SuSE9.1 system.

Hope this helps,