Hi, Maybe you can leverage some of the techniques outlined in:
Robert W. Robey, Jonathan M. Robey, and Rob Aulwes. 2011. In search of numerical consistency in parallel programming. Parallel Comput. 37, 4-5 (April 2011), 217-229. DOI=10.1016/j.parco.2011.02.009 http://dx.doi.org/10.1016/j.parco.2011.02.009 Hope that helps, Samuel K. Gutierrez Los Alamos National Laboratory On Sep 20, 2011, at 6:25 AM, Reuti wrote: > Am 20.09.2011 um 13:52 schrieb Tim Prince: > >> On 9/20/2011 7:25 AM, Reuti wrote: >>> Hi, >>> >>> Am 20.09.2011 um 00:41 schrieb Blosch, Edwin L: >>> >>>> I am observing differences in floating-point results from an application >>>> program that appear to be related to whether I link with OpenMPI 1.4.3 or >>>> MVAPICH 1.2.0. Both packages were built with the same installation of >>>> Intel 11.1, as well as the application program; identical flags passed to >>>> the compiler in each case. >>>> >>>> I’ve tracked down some differences in a compute-only routine where I’ve >>>> printed out the inputs to the routine (to 18 digits) ; the inputs are >>>> identical. The output numbers are different in the 16th place (perhaps a >>>> few in the 15th place). These differences only show up for optimized >>>> code, not for –O0. >>>> >>>> My assumption is that some optimized math intrinsic is being replaced >>>> dynamically, but I do not know how to confirm this. Anyone have guidance >>>> to offer? Or similar experience? >>> >>> yes, I face it often but always at a magnitude where it's not of any >>> concern (and not related to any MPI). Due to the limited precision in >>> computers, a simple reordering of operation (although being equivalent in a >>> mathematical sense) can lead to different results. Removing the anomalies >>> with -O0 could proof that. >>> >>> The other point I heard especially for the x86 instruction set is, that the >>> internal FPU has still 80 bits, while the presentation in memory is only 64 >>> bit. Hence when all can be done in the registers, the result can be >>> different compared to the case when some interim results need to be stored >>> to RAM. For the Portland compiler there is a switch -Kieee -pc64 to force >>> it to stay always in 64 bit, and a similar one for Intel is -mp (now >>> -fltconsistency) and -mp1. >>> >> Diagnostics below indicate that ifort 11.1 64-bit is in use. The options >> aren't the same as Reuti's "now" version (a 32-bit compiler which hasn't >> been supported for 3 years or more?). > > In the 11.1 documentation they are also still listed: > > http://software.intel.com/sites/products/documentation/hpc/compilerpro/en-us/fortran/lin/compiler_f/index.htm > > I read it in the way, that -mp is deprecated syntax (therefore listed under > "Alternate Options"), but -fltconsistency is still a valid and supported > option. > > -- Reuti > > >> With ifort 10.1 and more recent, you would set at least >> -assume protect_parens -prec-div -prec-sqrt >> if you are interested in numerical consistency. If you don't want >> auto-vectorization of sum reductions, you would use instead >> -fp-model source -ftz >> (ftz sets underflow mode back to abrupt, while "source" sets gradual). >> It may be possible to expose 80-bit x87 by setting the ancient -mp option, >> but such a course can't be recommended without additional cautions. >> >> Quoted comment from OP seem to show a somewhat different question: Does >> OpenMPI implement any operations in a different way from MVAPICH? I would >> think it probable that the answer could be affirmative for operations such >> as allreduce, but this leads well outside my expertise with respect to >> specific MPI implementations. It isn't out of the question to suspect that >> such differences might be aggravated when using excessively aggressive ifort >> options such as -fast. >> >> >>>> libifport.so.5 => >>>> /opt/intel/Compiler/11.1/072/lib/intel64/libifport.so.5 >>>> (0x00002b6e7e081000) >>>> libifcoremt.so.5 => >>>> /opt/intel/Compiler/11.1/072/lib/intel64/libifcoremt.so.5 >>>> (0x00002b6e7e1ba000) >>>> libimf.so => /opt/intel/Compiler/11.1/072/lib/intel64/libimf.so >>>> (0x00002b6e7e45f000) >>>> libsvml.so => /opt/intel/Compiler/11.1/072/lib/intel64/libsvml.so >>>> (0x00002b6e7e7f4000) >>>> libintlc.so.5 => >>>> /opt/intel/Compiler/11.1/072/lib/intel64/libintlc.so.5 (0x00002b6e7ea0a000) >>>> >> >> -- >> Tim Prince >> _______________________________________________ >> users mailing list >> us...@open-mpi.org >> http://www.open-mpi.org/mailman/listinfo.cgi/users >> > > > _______________________________________________ > users mailing list > us...@open-mpi.org > http://www.open-mpi.org/mailman/listinfo.cgi/users