Dear Antonin,
> I also did similar experiment with running eddy more times on the same subject (the purpose was to test whether there is an effect of ECC on GPU, I did this both on GPU with ECC and without ECC to see whether there is a difference between runs done on GPU without ECC). I used --s2v and also --initrand. I compared difference between runs on the same GPU. With --initrand the results are much more similar (without --initrand the maximal voxel-wise difference was ~100) but still not the same as I expected (with --initrand the maximal voxel-wise difference was ~1 regardless of ECC). Is here another random factor present despite using --initrand?
nothing that is intentionally non-determinstic (the fact that --initrand is not set as default is obviously intentional).
But there are operations, notably reductions, that may or may not be deterministic on a GPU. A “reduction” is GPU lingo for a sum/mean/etc. Implementing that effectively on a GPU is non-trivial. The overall strategy for summing N values is to have N/2 threads that all sum two values together, then use N/4 threads to sum two each of those N/2 sums together etc. Depending on on how the values are divided onto the threads the round-off errors will propagate slightly differently. I use the thrust implementation to do reductions in eddy. My guess is that is what you are seeing.
Jesper
>
> Antonin
|