[ncl-install] floating overflow with Periml

Johnny Chang Johnny.Chang at nasa.gov
Sun Mar 20 18:33:59 MDT 2011


Hi Jemma,

The floating overflow is most likely a "false positive."  The Intel compiler
does floating point speculation by default.  What this means is that if you
have an if-then-else-endif block, the compiler can issue instructions for
both branches to be executed *before* the if condition has been evaluated.
After the if condition has been resolved, then the floating point operations
in one of the branches is thrown away.

For example,

     if (cos(x) .ne. 0.0) then
        y = 1.0/cos(x)
     else
        y = cos(x)
     endif

When you turn on -fpe0 for your Fortran program, it turns off floating point
speculation for the Fortran program, but not for the ncarg libraries!!  So,
the divide by zero in the example above, which most likely is also present
in the ncarg library, will cause your program to stop even though it would not 
be used in the actual execution path of the program.

The solution is to build a version of ncarg with -fpe0 or -fp-speculation=safe 
for debugging purposes.  If you are interested in tracking down the actual
line in the ncarg source that's causing the problem, then rebuild ncarg with
the -traceback -g options (in addition to the other optimization options).
Then your stack trace below will give you the line number in the ncarg source
that's causing the floating overflow.

Johnny


On 3/20/11 4:44 PM, Jemma Wu wrote:
> Hi all,
>
> I have built and installed ncarg.v5.2.1 under OpenSUSE 11 with Intel compilers.
> Now I have a problem with calling Periml (Gridal package) in my fortran program.
> The program can be compiled and run (appears correctly) if I don't add the float
> point exception flag (fpe0). However, if I add the fpe0 flag and compile and run
> it, then it will stop with a floating overflow. I debugged it and found it is
> with the Periml call.
>
> I then found an example (tgrida) in ncarg with Periml and tested it with adding
> the fpe0 option, and it also have the float overflow problem. My compilation
> options are as follows.
>
> ifort –fpe0 -traceback -O0 -o tgrida tgrida.f -L/usr/local/ncarg_build/lib
> -lncarg -lncarg_gks -lncarg_c -lX11 -lXext,
>
> and the running results are
>
> ~/model/ncl_ncarg-5.2.1> ./tgrida
> forrtl: error (72): floating overflow
> Image              PC                Routine            Line        Source
> tgrida             00000000004FCDFB  Unknown               Unknown  Unknown
> tgrida             000000000040688E  Unknown               Unknown  Unknown
> tgrida             0000000000406330  Unknown               Unknown  Unknown
> tgrida             00000000004054FC  grida_                     85  tgrida.f
> tgrida             0000000000405339  MAIN__                     22  tgrida.f
> tgrida             000000000040529C  Unknown               Unknown  Unknown
> libc.so.6          00007F539004AB7D  Unknown               Unknown  Unknown
> tgrida             0000000000405199  Unknown               Unknown  Unknown
> Aborted
>
>
> Does anyone know what's wrong?
>
> Any comments would be appreciated.
>
> --
> Regards,
> Jemma
>


-- 
Johnny Chang
650-604-4356


More information about the ncl-install mailing list