Implement update groups
Performance of mdrun can be improved by using "update groups" as the smallest indivisible unit. There are planned to be groups of atoms connected by (H-bond only) constraints and virtual sites. By using such groups on the nbnxn grid and in the domain decomposition instead of individual atoms, update, constraints and vsites become completely independent tasks which don't require MPI communication and OpenMP barriers. This improves performance by itself. More performance can be gained by running the update out of sync on different domains to decrease the GPU idle time.
- Detect and store update groups for constraints
- Add support for atom groups in the nbnxn grid and search
- Add support for atom groups in the domain decomposition (reuse the charge-group code paths)
- Add virtual site support to update groups