Hi All,
I have a rather lengthy FORTRAN-77 code that compiles just fine using pgf90, using this version:
pgf90 13.5-0 64-bit target on x86-64 Linux -tp piledriver
Copyright 1989-2000, The Portland Group, Inc. All Rights Reserved.
Copyright 2000-2013, STMicroelectronics, Inc. All Rights Reserved.
I recently added some OpenMP directives to parallelize a loop, now I can’t compile the code:
pgf90 -Mextend -O2 -mcmodel=medium -tp piledriver -mp -o fred fred.for
The output is from this process is
/tmp/pgf902x2kIv4wst-z.s: Assembler messages:
/tmp/pgf902x2kIv4wst-z.s:29455: Error: junk$-2411111144' after expression /tmp/pgf902x2kIv4wst-z.s:29455: Error: number of operands mismatch for
vfmsubsd’
/tmp/pgf902x2kIv4wst-z.s:29456: Error: junk at end of line, first unrecognized character is%' /tmp/pgf902x2kIv4wst-z.s:29461: Error: junk
$-2411111136’ after expression
/tmp/pgf902x2kIv4wst-z.s:29461: Error: number of operands mismatch forvfmaddsd' /tmp/pgf902x2kIv4wst-z.s:29462: Error: junk at end of line, first unrecognized character is
%’
/tmp/pgf902x2kIv4wst-z.s:30069: Error: junk$-2411111064' after expression /tmp/pgf902x2kIv4wst-z.s:30069: Error: number of operands mismatch for
vfmsubsd’
/tmp/pgf902x2kIv4wst-z.s:30070: Error: junk at end of line, first unrecognized character is%' /tmp/pgf902x2kIv4wst-z.s:30075: Error: junk
$-2411111056’ after expression
/tmp/pgf902x2kIv4wst-z.s:30075: Error: number of operands mismatch forvfmaddsd' /tmp/pgf902x2kIv4wst-z.s:30076: Error: junk at end of line, first unrecognized character is
%’
/tmp/pgf902x2kIv4wst-z.s:33020: Error: junk$-2373976184' after expression /tmp/pgf902x2kIv4wst-z.s:33020: Error: number of operands mismatch for
vfmaddsd’
/tmp/pgf902x2kIv4wst-z.s:33021: Error: junk at end of line, first unrecognized character is(' /tmp/pgf902x2kIv4wst-z.s:33026: Error: junk
$-2373976184’ after expression
/tmp/pgf902x2kIv4wst-z.s:33026: Error: number of operands mismatch forvfmaddsd' /tmp/pgf902x2kIv4wst-z.s:33027: Error: junk at end of line, first unrecognized character is
(’
/tmp/pgf902x2kIv4wst-z.s:33038: Error: junk$-2373976184' after expression /tmp/pgf902x2kIv4wst-z.s:33038: Error: number of operands mismatch for
vfmaddsd’
/tmp/pgf902x2kIv4wst-z.s:33039: Error: junk at end of line, first unrecognized character is(' /tmp/pgf902x2kIv4wst-z.s:33456: Error: junk
$-2373976120’ after expression
/tmp/pgf902x2kIv4wst-z.s:33456: Error: number of operands mismatch forvfmsubsd' /tmp/pgf902x2kIv4wst-z.s:33457: Error: junk at end of line, first unrecognized character is
%’
/tmp/pgf902x2kIv4wst-z.s:33462: Error: junk$-2373976112' after expression /tmp/pgf902x2kIv4wst-z.s:33462: Error: number of operands mismatch for
vfmaddsd’
/tmp/pgf902x2kIv4wst-z.s:33463: Error: junk at end of line, first unrecognized character is `%’
The code actually compiles and runs (in parallel!) using gfortran
gfortran -O2 -mcmodel=medium -ffixed-line-length-132 -fopenmp -o fred fred.for
The code is a MonteCarlo fitter, but the first iteration has no random numbers. The output from that first loop agrees between the pgf90 serial version, the gfortran serial version, and the gfortran parallel version.
We have some older linux boxes with older PGI versions. I can compile the above code using the older compilers with the -mp flag, but then the program hangs. These older boxes have gfortran versions that are out of date, and gfortan won’t work on those boxes.
Any ideas?