[Wien] Single precision corruption ???

John Pask pask1 at llnl.gov
Wed Mar 9 00:02:33 CET 2005


Dear Torsten,

It looks as if Peter has found the source of the problem -- some single 
precision in lcore (see his post)!

Thanks again so much for your help,

John

On Tue, 8 Mar 2005, Torsten Andersen wrote:

> Dear John,
> 
> I will try to be brief. Wien2k has never used single precision, as far 
> as I know.
> 
> I don't see any of the important programs having defined 
> single-precision reals or complexes. They are all defined as real*8, 
> double precision, complex*16, or double complex - all of which are 
> composed of 8-byte reals (thus also 16-byte complex). This should be 
> recognised by your compiler.
> 
> However, independent of this, any compiler options may alter the actual 
> code it generates compared to other options, changing the rounding 
> errors, etc., leading to slightly different results that will give you a 
> different termination point for the scf cycle.
> 
> And you are right, differences on 0.2mRy can be a problem, which also 
> means that comparing calculations on different architectures are like 
> comparing apples and oranges. Anyway your calculation is locked to the 
> size of your muffin-tins... just see what happens to the total energy if 
> you change the muffin-tin radius by 1 promille... AHAH... maybe it lies 
> in the differences you get when you read the input files?????? Try to 
> look at the coordinates (and the other numbers) that are printed in the 
> output files and compare them to those in your input files (case.struct, 
> case.in1c).... it might be that the rounding errors come from the 
> process of reading? Maybe add precision to the printing in the 
> initialization routines to see the effect...
> 
> Best regards,
> Torsten Andersen.
> 
> 
> 
> John Pask wrote:
> > Dear Peter and Torsten,
> > 
> > Thanks so much for your prompt replies.
> > 
> > Actually, I may have tried to put too much in my initial post and caused 
> > some confusion.
> > 
> > My observation is simply that the same code (WIEN2k_05.2) with the same
> > input (whatever the RKmax, k-points, etc.) on the *same* platform produces
> > different total energies, depending on compiler options (with -r8 vs.  
> > without). The information about other platforms/compilers was merely to
> > verify that the problem occurs on other platforms/compilers as well.
> > (Peter: my answer differs from yours due to the small k-mesh I used for
> > illustration; but the problem is independent of k-mesh.) So the code
> > produces different answers (~0.20 mRy / atom) depending on how you compile
> > it, and this difference is of an order (especially if random) that could
> > have consequences for the smoothness of E-V curves, accuracy of
> > derivatives thereof (more so), etc. This is the problem.
> > 
> > And since the particular change in compilation settings is simply to
> > promote any default constants/declarations which may occur to double
> > precision (8 bytes) [default reals are single precision (4 bytes) on the
> > standard platforms I discussed], one possibility for the different answers
> > is that there are inadvertent default or single precision
> > constants/declarations in the code. (According to the compiler
> > documentation, -r8 simply makes the default precision double rather than
> > single -- no other optimizations, etc.) But there are other possibilities
> > as well.
> > 
> > Also, I recompiled the code with -O0 to disable optimizations and found
> > the same thing -- different answers with and without -r8 (~0.20 mRy /
> > atom). So the problem does not appear to be optimization related and,
> > again, occurs also on other platforms and compilers, and so appears more
> > general.
> > 
> > So we have two different answers and both cannot be right.
> > 
> > Thanks so much for your help and, again, my apologies for any lack of
> > precision (;-)) in my initial post.
> > 
> > John
> > 
> > ------------------------------------------------------------
> > 
> > 
> >>Hi,
> >>
> >>If your information in your mail is correct (struct and input files), I 
> >>would not worry about a tenth of a mRy, but more about several mRy.
> >>
> >>My total energy for bcc W is     -32332.2513
> >>(For the parameter you specified in your mail)
> >>I do not specify more digits, because these numbers depend on the k-mesh
> >>(which you did not specify), but these 3-4 digits are correct for any 
> > 
> > mesh
> > 
> >>>1000 k-points.
> >>
> >>So first you should find out why your number is so different.
> >>
> >>About numerical problems: I just crosschecked, that WIEN2k_05 with an
> >>Intel P4 with ifc7.0, mkl 7.0, -FR -mp1 -w -prec_div -pc80 -pad -ip
> >>-DINTEL_VML
> >>(I think these are the recommended options of siteconfig)
> >>
> >>yields identical total energies (up to mycro Ry) than an old WIEN2k_03 
> > 
> > on
> > 
> >>an (old) IBM SP3, xlf90, essl,   -O3 -qarch=pwr3
> >>
> >>WIEN2k (at least in the scf programs) is pretty consistent with double 
> >>precission (and -r8 should not make much of a difference unless -r8
> >>implies also something else, see below !!!) and also
> >>optimization due to loop rearrangement,... usually is not critical.
> >>I do not believe that it is a "single precission" issue.
> >>
> >>However, many compiler have options (or defaults) which reduce the
> >>accuracy of some floating point operations (or trig.fuctions) (to gain 
> > 
> > speed). 
> > 
> >>I'm to lazy to look it up again, but as far as
> >>I can remember, you can "speed-up" the programs when you omitt or modify
> >>some of iforts  compiler options, and depending on your compiler 
> > 
> > installation,
> > 
> >>these options might even be the default!
> >>
> >>Please check the compiler documentation and apply first the IEEE 
> > 
> > standard
> > 
> >>(or "strict" or -O0 or whatever applies to your compiler). Once you
> >>have a benchmark number, you may increase "optimization" and gain lots
> >>of speed, but always crosscheck and compare the results.
> >>
> >>Regards
> >>
> > 
> > 
> > ----------------------------
> > On Mon, 7 Mar 2005, Torsten Andersen wrote:
> > 
> > 
> >>Dear John,
> >>
> >>It is well known that rounding errors come into play when the 
> >>optimization is increased, and I would not expect to get the exact same 
> >>solution on different architectures before you have a "converged" 
> >>calculation.
> >>
> >>By converged I do not mean that the scf cycle converged :-) It is 
> >>possible due to rounding errors to have a slightly different density in 
> >>the first cycles, and this affects the mixing, the next cycle, etc.
> >>
> >>Is your basis big enough? I believe that the standard settings for 
> >>calculations with W are too small (RMT*kmax should be about 9). Is it 
> >>converged with respect to the k-points? Also, "-ec anynumber" might be 
> >>too soft a convergence criterion for the scf cycle - it just means that 
> >>two consecutive cycles should be less than "anynumber" away from each 
> >>other in the total energy. Is the charge converged?
> >>
> >>BTW, default reals and complexes are 8-byte real and 16-byte complex 
> >>already, so it shouldn't really give you any difference unless the -r8 
> >>means something in addition in your compilers. I know for sure that both 
> >>Compaq (Digital) Fortran and IBM xlf do some tradeoffs in speed versus 
> >>accuracy at the higher optimization levels (loop unrolling, code 
> >>reordering, etc.), and you might need to add a "-qstrict" (IBM) or 
> >>something similar in order to keep the semantics of the program stable.
> >>
> >>What is the difference with, say, RMT*kmax=9 and about 500 k-points? 
> >>Needless to say, probably, but the Gamma-point should be included in 
> >>your k-point sampling.
> >>
> >>Best regards,
> >>Torsten Andersen.
> >>
> > 
> > --------------------------------------
> > Dr. John E. Pask
> > Lawrence Livermore National Laboratory
> > University of California
> > P.O. Box 808, L-045
> > Livermore, CA 94551 USA
> > phone/fax: +1 (925) 422-8392/2851
> > pask1 at llnl.gov
> > 
> > 
> > _______________________________________________
> > Wien mailing list
> > Wien at zeus.theochem.tuwien.ac.at
> > http://zeus.theochem.tuwien.ac.at/mailman/listinfo/wien
> > 
> 
> 

-- 
--------------------------------------
John E. Pask
Lawrence Livermore National Laboratory
University of California
P.O. Box 808, L-045
Livermore, CA 94551 USA
phone/fax: +1 (925) 422-8392/2851
pask1 at llnl.gov




More information about the Wien mailing list