Week 7

This week, we did a lot of testing of the synthetic and MD codes.
  • We got a lot of confusing results, the drift would sometimes be fixed when our algorithms ran on the synthetic code, and sometimes not.
  • The drifting in the MD code never seemed to improve.
  • This led me to suspect that our issue may be with the numerical stability of the MD code and only has little to do with the lack of IEEE compliance in GPUs.
  • I made a CPU version of the synthetic code in Matlab
    • I've been able to simulate the GPU's rounding in floating point divisions.
    • With this in place, I've been able to completely reproduce all of the behavior we've observed on the GPU on the CPU with Matlab.
    • I hope Matlab will prove a more productive platform for developing and validating our algorithms.
    • However, the Matlab code confirms our observations that none of our algorithms properly correct the drifting.
  • We contacted Nvidia and asked them if their engineers can shed some light on this problem.
    • It turns out that their multiply-add instructions are not fused, making any iterative attempts to enhance the accuracy of single precision operations impossible.
    • But, it turns out that CUDA 2.3, released last week, includes single-precision floating point operations that are IEEE compliant (effectively making all our work to date obsolete).
    • Now, we're looking at another approach that uses a new data type, a composition of multiple floating point numbers.