I have a program that is compiled with Intel Fortran 15.4. First I executed it on my workstation (Windows 7) with Intel Fortran 15.4 redistributables installed (w_fcompxe_redist_ia32_2015.4.221.msi) and then I installed Intel Fortran 16.1 redistributables (ww_ifort_redist_ia32_2016.1.146.msi) on the same workstation and found that program results are different. The binary was the same, I didn't recompile it. The problem was reproduced on the server (Windows Server 2012 R2).
1. Is it a bug in compiler or expected/acceptable behavior?
2. Is it valid to run executable built with older version of compiler on a machine with newer version of redistributable? Or in this case results are unexpected? I supposed that there is compatibility between redistributable versions, but maybe it is only one way (newer binary on older redist but not vice-versa).
P.S. If it matters the program uses nested OpenMP loops and Fortran 15.4 have a bug with it that causes memory leak, the bug was fixed in 16.1, that is why I tried new redistributable. I'm not even sure now, which results are correct - old or new.
If your code is performing reductions (e.g. summing values produced by processing arrays),
and if the reduction values are not exactly representable in floating point (iow roundoff errors),
then the "exact" result is dependent upon the sequence in which the reductions are made (iow where/when the roundoff error occurs)
In a multi-threaded application, the factors affecting the results:
Number of threads
partition points made by the scheduler
thread completion order in the parallel regions (with reductions).
Any one or more differences between runs may result in different "exact" results in approximate numbers (with roundoff errors)
The above is in addition to the possibility of a bug.
Absolutely it is valid to run with newer redistributables, in fact we recommend using the latest redistributables. You should not use libraries older than the compiler. Most likely there was a change in the math library to improve accuracy of one of the routines - this is a continual process. It could also be that the math library was changed to use vectorization in the newer version that can change results slightly.