Molecular dynamics with double precision This exist?

Molecular dynamics with double precision and Lenard-Jones potentia (no need for polimers and other ).
This exist?
The HOOMD provide only single precision.
Accurately, with compiling option “Double Precision” it don’t uses GPU.

Last I heard, NAMD uses doubles for force accumulation, but singles for everything else. And HOOMD will be getting such a mixed precision mode just as soon as I have enough free time to implement it.

A full double precision implementation would be completely overkill and take a massive amount of work rewriting/retuning most of the kernels (CUDA cannot read double4’s from a texture). The performance loss will likely also be staggering (probably a factor of 2-4x lost). I’m not about to undertake such an endeavor without a specific example of a simulation that runs with such horrible numerical stability in single precision that double precision is an absolute requirement.

I’m not aware of any other CUDA based MD apps except folding@home, and I don’t think they use doubles. I could be wrong though, they don’t publish much about what they do.

Is it possible to simply do as it is written in the FAQ?


  1. How do I get double precision floating point to work in my kernel?

You need to add the switch “-arch sm_13” to your nvcc command line, otherwise doubles will be silently demoted to floats. See the “Mandelbrot” sample in the CUDA SDK for an example of how to switch between different kernels based on the compute capability of the GPU.

You should also be careful to suffix all floating point literals with “f” (for example, “1.0f”) otherwise they will be interpreted as doubles by the compiler.

[/quoteAnd rebuild HOOMD?

No, that would only work if HOOMD’s kernels were written with double precision support, and you’d been compiling for one of the earlier single-precision-only architectures. Like MisterAnderson said though, they are all written for single precision, so the compiler couldn’t know how to compile/optimize them for double precision, even if you added the flag.

Yes. And even searching and replacing all floats to doubles won’t solve it either, because all texture reads (of which there are a lot in HOOMD) will have to be rewritten because CUDA can’t read doubles from texture.