Mark Abraham [Fri, 8 Jan 2016 01:35:59 +0000 (02:35 +0100)]
Merge branch release-5-1
Ported the change from enum_name returning UNDEFINED to "no name
defined" to the new implementation.
Change-Id: I39ded9be8a49d3ff7de7c5e7c9d05eefbd385727
Mark Abraham [Thu, 7 Jan 2016 17:21:59 +0000 (18:21 +0100)]
Fix some mdrun header dependencies
md_support.h, sim_util.h and update.h should not depend on each other
since any symbols they declare can be forward-declared by the others.
Updated some names for types - in particular, gmx_update_t is now a
struct, rather than an opaque pointer to a struct.
Also removed two orphaned function declarations used by the
now-removed SD2 integrator.
Change-Id: I84c0f8d7b90b5f68bbf940e5854834bb9d000c9f
Mark Abraham [Thu, 7 Jan 2016 17:31:11 +0000 (18:31 +0100)]
Avoid more C++ bindings for MPI
This avoids picking up the C++ bindings from SGI's MPT.
Change-Id: Ie8d30a6d59f04a6b69ac9ccf29aa5db631a2b3cb
Mark Abraham [Tue, 5 Jan 2016 18:20:40 +0000 (19:20 +0100)]
Document how potential-switch works
Adjusted the notation in the force-switch section to make clear the
difference between the two.
Change-Id: Iadd62faefe94726fd33a0d429950e9525b23bf98
Mark Abraham [Thu, 7 Jan 2016 10:51:15 +0000 (11:51 +0100)]
Stop using UNDEFINED as name of a symbol
Apparently SGI's MPT MPI library defines this symbol, breaking the
compilation. We don't need to use it anyway.
Change-Id: I2b795252937339de49a75ba497c6741ec8019a74
Mark Abraham [Thu, 7 Jan 2016 09:02:46 +0000 (10:02 +0100)]
Remove fields used only for SD2
Change-Id: I998f579ccd1e4cbd8dccf2f49115b1eec1fe9c2b
Mark Abraham [Thu, 24 Dec 2015 10:24:38 +0000 (21:24 +1100)]
Remove SD2 integrator
This integrator has known problems, and is in all ways inferior to
sd. It has no tests, and was deprecated in GROMACS 5.0. There are no
plans to replace it.
Old checkpoint files written by sd2 integrators will no longer be
readable, but this is not a problem since continuing an MD simulation
across minor versions is not supported, and sd2 has no replacement
implementation anyway.
Refs #1137
Change-Id: I71b688a67a80e1f55134e81dab7a11a66942cff4
David van der Spoel [Wed, 30 Sep 2015 18:06:13 +0000 (20:06 +0200)]
Made normal modes work with shells and vsites
Implement shells and vsites in normal mode analysis (do_nm routine)
and analysis of eigenvalues and frequencies. The normal mode analysis
is done on real atoms only and the shells are minimized at each step
of the analysis.
Fixes #879
Change-Id: Iac127f51ef4ebd246c9d2417e039778b5952122f
Michael Shirts [Tue, 29 Dec 2015 03:13:26 +0000 (20:13 -0700)]
Fixes two problems related to restarts for vv.
The first problem is more serious; in addition to causing problems
with restarts in most cases for vv + either berendsen or v-rescale,
temperature coupling was called twice, which makes the distribution of
kinetic energies too broad (but with the correct average). Affected
vv + either v-rescale berendsen T-controls, other choices were unaffected.
In the second problem, the initial step after restarts with vv +
v-rescale and berendsen temperature control had too high a pressure
because an empty virial matrix that was only filled with MTTK pressure
control. The effects of this bug are very small; it only affected the
volume integration for one step on restarts.
Refs #1883
Change-Id: I8d807c8430bf4c18b0a4800af62d7f10839b7d59
Mark Abraham [Mon, 4 Jan 2016 09:00:14 +0000 (10:00 +0100)]
Fix spurious gcc warning
tab_elemsize cannot actually be used when undefined, but gcc thinks it
might be, just like tabscale, so we can just initialize it.
Change-Id: I8b44a1abff8e98bd983e15458e49e55f93677a13
Teemu Murtola [Sat, 2 Jan 2016 12:26:53 +0000 (14:26 +0200)]
Update packaging build
Use write_package_info() to create the summary file to centralize that
logic into releng. This makes it much easier to create builds that use
the tarball as the input.
Change-Id: Iaae962e1476a226a496db122a3ccd6fab579ab94
Mark Abraham [Tue, 5 Jan 2016 11:45:39 +0000 (12:45 +0100)]
Fix logic for DD missing-interactions check
The logic for the active part of this check got broken in
90aa9d65e0c3
before v4.5. Historically, there was no significant effect, because
all that patch changed is that we sum a double whose result won't
always be read. For all integrators, there's eventually a call where
CGLO_ENERGY is set and the sum is read, so the check is active and
works correctly. Thus, the worst-case result was that interaction(s)
were missing and not flagged until the next global-energies
communication step.
However, cleanup for #1793 moved the responsibility for the check out
to do_md, exposing the fact that for VV integrators (only),
CGLO_ENERGY isn't set for the "global signalling + leapfrog" call to
compute_globals. Thus the sum wasn't read, so the check failed when
totalNumberOfBondedInteractions still had the value -1 with which it
was initialized. Apparently, the regressiontests don't have enough
coverage of VV integrators to find this.
This also made me realise that this DD check has also been inactive
for the calls to compute_globals after initial DD, DD after replica
exchange, and DD during reruns, because none of those cases set
CGLO_ENERGY.
Fixes #1882. Refs #1793.
Change-Id: I0b5cc448175873ec0e5cee3c3d5023654b4f1b27
Szilard Pall [Thu, 2 Jul 2015 18:38:14 +0000 (20:38 +0200)]
remove duplicate macros and enable Wundef in CUDA
Commit
adbada4 left a checks of the host-side undefined __CUDA_ARCH__
undefined macro behind in nbnxn_cuda.cu as well as some unused macros.
This change cleans up these leftovers.
Additionally, this change enables -Wundef for CUDA files, but only for
CUDA >=v7.5 as prior versions come with a header that uses a macro check
without checking.
As the host-side code still includes kernels with __CUDA_ARCH__ which is
not defined in the host compilation pass, we need create our own copy
of this arch macro in a new header that is meant to contain CUDA
arch-specific stuff.
Refs #1855
Change-Id: Ibab891eaee11ea8952a67125f7ac4cc620b88d1c
Mark Abraham [Sun, 3 Jan 2016 17:20:54 +0000 (18:20 +0100)]
Use EXPECT_TRUE and EXPECT_FALSE in new SIMD tests
gcc 4.7.3 has a bug that means it warns about converting false to a
pointer type (see https://github.com/google/googletest/issues/322), so
we should just use the normal approach in GoogleTest and avoid
problems.
Change-Id: Ic700ded4a645af1e45fc66fde8fffae692ce33ec
Erik Lindahl [Thu, 31 Dec 2015 12:12:52 +0000 (13:12 +0100)]
Fix unnecessary SIMD warning
The change to warn about possible crashes had the
side effect of always warning about SIMD architectures
since the second block caught the matching case too.
Change-Id: I7017df387721d62bef0101f99a8c99522e3dddb7
Mark Abraham [Mon, 16 Nov 2015 16:29:35 +0000 (17:29 +0100)]
Change GMX_DOUBLE to be always defined
Also documented use of precision-related CMake variables
There may be some references in the SIMD documentation that still
refer to GMX_DOUBLE being defined, but we should solve that
separately, given the other changes at the moment.
Some abuse that un-defined GMX_DOUBLE was hard-coding some use of
single precision in mdebin_bar.cpp, so made that explicit.
Removed GMX_CPT_BUILD_DP, which can now be replaced by GMX_DOUBLE.
Removed some #ifdef in QM code, because floating-point arguments to
printf are automatically promoted to double. scanf still needs
versioning, though.
Refs #1855
Change-Id: I59b6874739d528603a86e0b6ab9bcadd67fdd3fa
Szilard Pall [Wed, 30 Dec 2015 16:42:29 +0000 (17:42 +0100)]
Fix xlc+CUDA workaround in gmxManageNvccConfig
The string replace invocation contained obvious syntax errors.
Change-Id: Id0998a08587ba01d4acdd74aa6b03f0d437092fa
Teemu Murtola [Wed, 30 Dec 2015 05:33:47 +0000 (07:33 +0200)]
Report used defines in check-source
If check-source complains about missing config.h include, it will now
also report the names of defines it thinks are used in the file (up to
three, with dots indicating more than three).
Change-Id: I5abe00291d049e155fb28806bf4e59c9dd5385f4
Berk Hess [Tue, 24 Nov 2015 10:20:55 +0000 (11:20 +0100)]
Correct vector check of gmx check
The check of vector components relative to the RMS vector component
incorrectly scaled the absolute tolerance instead of the relative.
Also different vectors were compared in several different ways.
Now all vectors are checked with the same procedure.
Change-Id: If7c188c9ce433fbd4aa9bb5051197de4bfa6edaf
Teemu Murtola [Sun, 27 Dec 2015 11:51:19 +0000 (13:51 +0200)]
Packaging build script for web site
Extend the documentation.py script to create a tarball of the
documentation when run as JobType.RELEASE. This does essentially the
same thing as Build_website_5_1, except that it reuses the existing
script. A few build targets that are otherwise part of the
documentation build are skipped with this job type, since they are
included in the source packaging build instead.
Change-Id: Ic44d544ef3015b3de59af880a3e6edc502b080c7
Teemu Murtola [Mon, 28 Dec 2015 20:02:54 +0000 (22:02 +0200)]
Reduce inputrec.h dependencies
Remove all #includes for inputrec.h from headers, and add corresponding
includes to source files that need it.
The main benefit is that now the remaining C code no longer depends on
inputrec.h.
Change-Id: I6a8768243f11d401394995ed2e22cba295de06d5
Mark Abraham [Wed, 9 Sep 2015 13:09:52 +0000 (15:09 +0200)]
Create invertmatrix.h
Named matrix-inversion routines less cryptically. "ur0" meant that the
upper-right triangle was all zero, because the matrix was a
well-formed box-vector matrix, per docs in vec.h. Added unit tests and
Doxygen. There's not actually a maths module yet, but it's better
than it used to be.
Change-Id: I4fe53acef07c6710c3a6ee49fc344d312694cf2c
Mark Abraham [Mon, 28 Dec 2015 00:24:52 +0000 (11:24 +1100)]
Merge branch release-5-1
Change-Id: Ife0732459cf9d438347c94b88efb5aca7a81bca1
Erik Lindahl [Mon, 6 Jul 2015 20:10:43 +0000 (22:10 +0200)]
Extended SIMD, implementation for Intel MIC
Passes both unit and regression tests in both single and double
with icc-16 and MPSS 3.5, although the unit tests result in a
bunch of warnings about undefined preprocessing identifiers in GTEST.
Change-Id: If032d760322ff397596090172871f3faba74048d
Teemu Murtola [Tue, 22 Dec 2015 20:33:07 +0000 (22:33 +0200)]
Improve text writing in help output
- Use new facilities in TextWriter for ensuring consistent line breaks
in the output, removing the need to carefully track where empty lines
are written out to produce valid reStructuredText and to not produce
too many empty lines in console output. Replace most explicit
newlines with ensureEmptyLine() and friends.
- Use TextWriter consistently in the help writing, making the caller
responsible of creating the single writer used for the output. This
makes all the output share the same writer (and thus the same state),
and removes the need to access the underlying stream for the writer.
Change-Id: I9d6a54dbb1dbb64fbd6ac95667d6ed9988288a60
Roland Schulz [Fri, 25 Dec 2015 18:18:10 +0000 (13:18 -0500)]
Fix G++ 4.7.0
Used e.g. by MIC MPSS
Change-Id: I21e6a07f3d1778ee138321ad96759e4c53479f52
Teemu Murtola [Fri, 25 Dec 2015 14:23:18 +0000 (16:23 +0200)]
Source packaging with new releng
Add build script for creating the source package using the new releng
scripts. Simplify the approach used by configuring the default
package_source target to only create the tarball we want. Otherwise,
this is a straightforward conversion of Source_tarball_5_1 job, with
some simplifications.
Change-Id: I3b09162f3647b9ec9f0120ff6284f27d72bf216f
Teemu Murtola [Thu, 24 Dec 2015 13:52:11 +0000 (15:52 +0200)]
Further vec.h cleanup
Now that vec.h is C++ code, replace gmx_cxx_const with a simple const,
and use inline instead of gmx_inline.
Change-Id: I9c60ccaec39c304fd5063541f7a9faff6d6abe58
Mark Abraham [Tue, 8 Dec 2015 03:01:33 +0000 (04:01 +0100)]
Fix some OpenCL issues
Added routine to convert error codes into more helpful
diagnostics. Called it in one place that needed some troubleshooting,
but an overhaul of OpenCL error handling is needed (in master branch).
Introduced new OpenCL control variable to indicate when there is a
non-local event upon which it is valid to wait, since it is an error
to wait upon an ocl_event that was never returned by an API call.
Converted mdrun integration tests to rely on the improved automated
resource assignment in 5.1, because that copes better with the
limitations of the OpenCL implementation.
Worked around limitation where real MPI + OpenCL can't use more than
one GPU on a node, by disabling GPU support for that test case.
Fixed inappropriate use of mdrun -nt, where the number of thread-MPI
ranks was intended.
Updated install guide.
Fixes #1871
Change-Id: I11e6b2bdb6f7f91489f3ec0d671081d99661fa62
Berk Hess [Tue, 2 Dec 2014 20:51:15 +0000 (21:51 +0100)]
Reorganized domdec initialization
The number of external domain decomposition initialization calls
has been reduced from 5 to 2. The zone setup has been moved up,
in preparation for vacuum support for the Verlet scheme.
The number of PME ranks now get passed to init_domain_decomposition
as an argument instead of setting cr->npmenodes in mdrun.cpp.
Removed the (buggy) option for sorting cgs less frequently.
Also added const qualifiers for parameters in all domdec functions.
Change-Id: Icf320ff3b9c86b782ddbde5ed6dd5013dff8c2a8
Erik Lindahl [Sat, 26 Dec 2015 11:21:50 +0000 (12:21 +0100)]
Avoid using aligned member variables in SIMD tests
gcc fails to align types to 64-byte boundaries when targeting AVX-512,
and we have seen this for other cases too, so use vectors with
properly aligned allocation on the heap instead.
Change-Id: I7f2984f72f0c520838c90c9cf4b66f45ffba4848
Alexey Shvetsov [Wed, 25 Nov 2015 11:25:49 +0000 (14:25 +0300)]
Make moleculetype case sensitive
This is useful in case you have more than 36 chains
in your system with chain IDs set. PDB allows to use both
uppercase letters, lowercase letters and numbers for chain
identifiers. Now we can use the maximum of 62 chains.
We search for a case sensitive match first and if not found, for a
unique case insensitive match. The latter is done to not break old
topology files. The couple-moltype option is now case sensitive.
Change-Id: Ibbc7116740d573780020227a5a526e149bb9c5fe
Szilard Pall [Fri, 18 Dec 2015 15:58:34 +0000 (16:58 +0100)]
Improve documentation on OpenCL issue with NVIDIA
Added reference to the known to be buggy OpenCL runtime versions (r349)
and version of the single release that has been shown to not exhibit the
issues.
Change-Id: I2a1d9bee988824df22d3b1e5a362a653c1d041cc
TODO: Wait for feedback from NVIDIA before merge.
Teemu Murtola [Wed, 23 Dec 2015 14:55:43 +0000 (16:55 +0200)]
Clean up vec.h
- Remove cos_angle_no_table() and unitv_no_table(), since they are now
essentially identical to the normal versions.
- Replace all uses of cos_angle_no_table() with gmx_angle(), since all
were used in a numerically unstable way.
- Replace uses of m_rveccopy() with copy_rvecn(), which does the same
thing.
- Move some functions that are not related to operations on rvec/friends
to other files.
- Remove #includes made unnecessary by the above changes, and add them
to source files that previously got them transitively.
- Remove extern "C" guards from the header, since it anyways does not
compile as C.
Change-Id: I933e7257601ee6f0e9ccf516e0bdcb1a85834a51
Mark Abraham [Sat, 12 Dec 2015 10:30:10 +0000 (21:30 +1100)]
Moved responsibility for f_global
This was only used when writing a trajectory, so made it local to the
code and data structures there.
Change-Id: I2e39ab1c7cfd9809eaa10e37376e4d079a465394
Mark Abraham [Sat, 12 Dec 2015 12:22:12 +0000 (23:22 +1100)]
Shell code cleanup
Relocated some shell-related data and code to its source file.
Removed calls to shell code from DD routines, since it isn't
supported.
Removed confusing code that meant that the initial prediction of shell
positions for non-continuation runs was actually done twice.
Used std::int64_t for a variable that was using a double for fear of
integer overload.
Change-Id: I95b01d20fceea6643b21b79d2d39d25c1090c8f4
Erik Lindahl [Mon, 6 Jul 2015 21:57:31 +0000 (23:57 +0200)]
Extended SIMD, implementation for IBM Power7/8 VSX
Adds the extended/v2 SIMD layer. This version has been
tested on big-endian Power7 and little-endian Power8 with
gcc-4.9 in both single and double. The inline assembly
for gcc has been improved based on the proposals in
redmine.
Fixes #1808.
Change-Id: I0e52e847a5925a0329ae4be0cb04eb9fe6122fd9
Erik Lindahl [Wed, 6 May 2015 23:32:19 +0000 (01:32 +0200)]
IBM Power6 VMX extended SIMD
This is mostly for reference since VMX is one of the most difficult SIMD
instruction sets (only aligned memory ops), and because some embedded
PowerPC platforms might still use the clunkier VMX/Altivec SIMD.
Tested with gcc-4.9 on Power7 big-endian hardware.
Change-Id: Id254fd3e0fb814757474827cebf264b3825fcf74
Erik Lindahl [Mon, 6 Jul 2015 20:32:41 +0000 (22:32 +0200)]
Extended SIMD, impl for Arm Neon and 64-bit Neon Asimd
Tested with gcc-4.9 and 5.3, using Neon on Jetson
TK1 and TX1 (both in 32-bit mode) and Neon asimd on
APM X-Gene (64-bit mode).
Change-Id: I4b9f0da49b1dda3b199eeec8e45688d49a43783e
Teemu Murtola [Sun, 20 Dec 2015 18:54:24 +0000 (20:54 +0200)]
Add functionality to TextWriter
Make TextWriter track the status of the output stream such that it is
possible to provide methods that ensure the next output starts at the
beginning of a line or after an empty line, without adding extra line
breaks if they are already present. This makes it simpler to produce
clean output when multiple places in the code write to the same writer.
Change-Id: I73b18d33b790f0c1d6882fa05aca912e39157621
Erik Lindahl [Mon, 6 Jul 2015 21:23:40 +0000 (23:23 +0200)]
Extended SIMD, implementation for BlueGene/Q
Tested with bgclang in both single and double precision.
bgclang has fixed a bug (reported by us) in the nightly
release
20150511; this influenced the single precision
load operations, which previously generated incorrect
code. xlc cannot be used for now, since Gromacs requires
C++11 support.
Change-Id: If25ddb703b6c3786bf5144e2a69244177b16d610
Erik Lindahl [Tue, 28 Apr 2015 21:02:39 +0000 (17:02 -0400)]
Extended SIMD implementation for 256-bit AVX and AVX2
Added support for nonbonded kernel utilities,
gather-transpose and transpose-store operations. Most
routines have been optimized to reduce cross-lane
shuffling which is more expensive on Haswell (AVX2).
Change-Id: Ia9b3733051410355ed9d4a68cbdb9646c9d3e41d
Erik Lindahl [Thu, 23 Apr 2015 10:07:55 +0000 (12:07 +0200)]
Next-generation SIMD, for SSE2, SSE4.1 and 128-bit AVX
This adds the same functionality that was previously done for the
reference SIMD implementation This includes all the 128-bit x86
flavors, since SSE4.1 and AVX-128 only overrides a few SSE2
instructions/functions. Performance appears to be identical to the
state before the new SIMD code on x86 when using SSE2. For the most
performance-sensitive functions I expect we will later test a few
different alternative implementations once we can benchmark the
routines inside actual kernels using them.
Change-Id: I59d5741df345b38745f9a6d1ea3a4d27b0a66034
Teemu Murtola [Fri, 18 Dec 2015 19:56:34 +0000 (21:56 +0200)]
Fix most warnings with Doxygen 1.8.10
- Fix several \copydoc uses.
- Work around problems where inherited virtual functions within
templates did not get documentation from their parent (this used to
work with Doxygen 1.8.5).
- Doxygen now writes relative paths to xml output, so adjust the Python
scripts used to parse them to accept both.
Change-Id: I56ca8d6af44e042f96bf2cb0efc923ca9ebac8df
Berk Hess [Sat, 19 Dec 2015 14:27:09 +0000 (15:27 +0100)]
Merge release-5-1 into master
Mostly trivial conflicts, some C++ fixes in perf_est.cpp.
Change-Id: Iacdc7629deeef20db9554f9a880681d1ae6f1e10
Berk Hess [Mon, 30 Nov 2015 16:50:19 +0000 (17:50 +0100)]
Bring performance estimation up to date
The performance estimation code for estimating the PME/PP load
and the optimal DD grid setup used outdated numbers.
We now estimate using actual cycle counts on Haswell and esimate
for other architectures through a scaling factor that takes into
account the SIMD width and FMA.
The DD grid automation now ignores PBC cost for exclusions with
the Verlet scheme and the for angles and dihedrals with SIMD.
The effect of this is a more reliable PME load estimate that's
now a factor 1.4 to 1.7 higher on Haswell.
The DD grid automation will now often choose a setup that better
matches the PME `decomposition and reduce the PME redist cost.
Change-Id: I5daa6a6856f2b09ba6d17fda0eea800b816d21e4
Erik Lindahl [Fri, 18 Dec 2015 12:30:45 +0000 (13:30 +0100)]
Fix compiler warning in cpuinfo for non-x86 architectures
To make the code cleaner executeX86CpuID() is always defined,
but we should make sure to always return a result code even
on non-x86 (even though it will never be called there).
Change-Id: Ic302945c7794576aa931250a513120c72be62d21
Teemu Murtola [Thu, 17 Dec 2015 10:44:07 +0000 (12:44 +0200)]
Update versioning for new scheme
Make versioning use the new YYYY[.P] scheme that was decided quite a
while back.
Also, remove the literal "VERSION" prefix from the return value of
gmx_version() to give caller better control for deciding on the usage of
the version string.
Change-Id: I1ed171502a4a900c87988faabf48fafeef735c4f
Berk Hess [Wed, 25 Nov 2015 09:31:53 +0000 (10:31 +0100)]
Removed topology pointers from DD struct
The reverse topology struct in the domain decomposition data used
pointers to the global and local topologies for printing errors.
Since the call now the error function can now pass those pointers,
these pointers no longer need to be copied.
Also added const qualifiers to some data structures.
Change-Id: I5d2236982748214591aa5d19f77f0ab8d27553ab
Mark Abraham [Mon, 3 Aug 2015 22:13:23 +0000 (00:13 +0200)]
Simplified energy-summation code
We need to check that the DD has the correct number of bonded
interactions being handled across all domains. The old check would
happen at every call for computing energies, which was unnecessary
because the number of domain-local bonds can change only at DD
steps. It also required log file, global state and global topology to
be passed into every call to global_stat to handle the rare error case.
This patch moves the check for correct DD of bonded interactions up to
do_md, where it can be scheduled to happen only once per DD lifetime.
global stat now does not need to be passed parameters that only needed
for reporting in the case of a failed check.
The dispersion correction code now gets the global number of atoms
from a field in forcerec. This should really be set up when a
dispersion-correction object was created, but this approach will do
for now (particularly because dispersion correction code is probably
being called too often, so there's bigger problems to fix).
Together, mdrun energy-summation code no longer needs to be passed the
global topology, reducing code complexity.
Fixed documentation of global_stat.
Refs #1793
Change-Id: I595b4eff8f4cbb0bbaf295c386041a0966e4a094
Teemu Murtola [Wed, 16 Dec 2015 11:27:25 +0000 (13:27 +0200)]
Move calcgrid.* to fft/
One more file out of gmxlib/. These are related to selecting an FFT grid
size, and contain some numbers coming from performance measurements, so
fft/ should be a natural place.
Change-Id: I386965665a92bc47d4c0c3ca0201a6a4b13b5886
Berk Hess [Fri, 11 Dec 2015 13:37:09 +0000 (14:37 +0100)]
Add one element to state rvec arrays
Because the next generation SIMD interface can use (unaligned) 4-wide
SIMD loads to load rvecs from the state, we need one extra element
allocated at the end of the arrays.
Note: This is a temporary, fragile code that should be replaced.
One can easily forgot to allocate an extra element in state and
someone could pass an rvec pointer not from state to one of the
routines that uses SIMD loads.
Change-Id: Ib359355909c3e380ebd36a3ec2a3015a3cb6c9b8
Erik Lindahl [Sun, 1 Nov 2015 21:01:15 +0000 (22:01 +0100)]
Next-generation SIMD module, reference implementation
This moves the SIMD implementation to C++, and extends it
to put all architecture-specific code in the SIMD module
and make the nonbonded kernels fully generic. A number
of other features has also been added, with the hope that
we should be able to largely freeze the features after
this expansion.
- SIMD variables are now always unique types, and all
names have been changed to C++ standard in the gmx
namespace.
- All SIMD functions are now functions and not defines.
- Function names have been modified to correspond as much
as possible to the C++ standard library for normal
floating-point types.
- The alignment routines have been removed and replaced
with the AlignedAllocator and GMX_ALIGNED() attribute
for stack variables. The latter is now defined on all archs,
either to MSVC- or GNU-specific versions or the C++11
standard alignas/alignof, with a new basedefinition test
that will catch at least some bad alignment routines.
- About 10 higher-level routines have been added to
perform the operations necessary for full-SIMD-width
nonbonded kernels.
- There are new defines to indicate that wide SIMD
implementations support half-SIMD-width operations, and
a handful of utility functions that are required to
use this in the nonbonded kernels.
- Masked operations for multiply, reciprocals and
inverse square roots have been added. In the future
this will make it possible to improve the kernel
efficiency, in particular on platforms with native
support for masked operations.
- We no longer use defines to check availability
of the basic integer SIMD type, but implementations
that do not support this at all should implement it
through the floating-point types, i.e. it will always
be present from the user perspective.
- A transpose operation has been added for SIMD4.
- Gather/scatter operations have been added for
triplets. This will make it easier to use SIMD
even for routines with non-SIMD-friendly data layout.
- Memory alignment asserts are used when compiling with
asserts enabled.
- The nbnxn kernels no longer use any architecture-
specific files, but rely entirely on the simd module.
This also fixes a float-to-double conversion bug
for Xeon Phi that was detected with a new unit test
for the conversions. Those routines have never been
used in GROMACS, so it is harmless.
Change-Id: Ic882df80b21e8a70a9585c2dc4dd1e87fae1a9d8
Erik Lindahl [Thu, 29 Oct 2015 17:13:59 +0000 (18:13 +0100)]
C++ math function cleanup
math/functions.h now implements a number of old and new math
functions with either float, double, or integer arguments.
Manual SIMD versions of 1/sqrt have been tested with gcc and icc
on x86, Power8, Arm32 and Arm64, but with correct 'f' suffixes
on constants there is only 10-15% performance difference, so for
now we always use the system versions to avoid having this file
depend on config.h. Functions for third and sixth roots have
been introduced to replace many of our pow() calls, and the code
has been cleaned up to use the new functions.
Refs #1111.
Change-Id: I74340987fff68bc70d268f07dbddf63eb706db32
Teemu Murtola [Mon, 14 Dec 2015 19:02:10 +0000 (21:02 +0200)]
Move main.*, splitter.*, gmx_omp_nthreads.* to mdlib
Remove unused #includes for these headers, and remove some incorrect
uses, which showed that they are not actually used outside mdrun.
listed-forces -> mdlib dependency becomes slightly stronger with this,
but internal structure of mdrun code anyways needs a lot of work to
remove the dependency cycles.
Change-Id: If326c8da5a732ee725aa16ffad0ec72f9fefb371
Teemu Murtola [Mon, 14 Dec 2015 18:43:26 +0000 (20:43 +0200)]
Move readinp.* and warninp.* to fileio/
These are related to reading certain file formats, so they naturally fit
there.
Change-Id: Ie39f853be580d2d0cf7f2ffd989aaaf2b7c82eb0
Teemu Murtola [Mon, 14 Dec 2015 18:25:41 +0000 (20:25 +0200)]
Move hardware detection to hardware/
This may not be the best place for all of the code, since there are
also, e.g., functions that return information about implementation
limitations of mdrun, and for checking mdrun input parameter
consistency. But it would make sense for as much of the actual
detection code as possible to be in a single location, and this would be
the most natural place.
There are several cyclic dependencies suppressed for now to get forward
with breaking up gmxlib/.
Change-Id: Ie73d0a18530082d3a2b9f26a655706b33bf58a8a
Teemu Murtola [Sun, 13 Dec 2015 10:20:21 +0000 (12:20 +0200)]
Move some mdrun code out of gmxlib/
- Move sighandler.* to mdlib, since it is specific to mdrun.
- Move thread_affinity.* to mdrunutility, since it is only used from
runner.cpp. Convert existing comments to rudimentary Doxygen
documentation to avoid check-source and Doxygen warnings.
Change-Id: I83d431497480bcfa2b2edf8f347708a0c1832005
Teemu Murtola [Sun, 13 Dec 2015 08:07:20 +0000 (10:07 +0200)]
Move gpu_utils etc. out of gmxlib
Make gpu_utils/ a top-level directory in an effort to break up gmxlib,
and merge cuda_tools/ and ocl_tools/ there to avoid multiple very small
modules. Remove complicated globbing from the build system in favor of
listing the source files explicitly.
Change-Id: Id48a3ac89e1fa8fd8b8cf6eb8b9512a7d4519f97
Teemu Murtola [Mon, 14 Dec 2015 19:20:54 +0000 (21:20 +0200)]
Install baseversion.h
At least gmx_version() could be useful for external code.
Change-Id: I62c8e3af728f3ff844a5e1e611ed96927d44d676
Szilard Pall [Sat, 5 Dec 2015 02:06:29 +0000 (03:06 +0100)]
OpenCL code cleanup
Removed leftover comments and dead code, added some notes on what needs
to be reviewed later and fixed formatting in a few really bad cases.
Only in one cases did minor refactoring by moving some code into a
function (nbnxn_ocl_init_const) to eliminate some leftover TODOs and
make the code more in sync with the CUDA code structure.
Change-Id: I69d4a5a85bcadfa6f97282c02016fea31e52729a
Teemu Murtola [Fri, 11 Dec 2015 10:38:13 +0000 (12:38 +0200)]
Create separate module for trajectory data
Move trx.h from fileio/ to a new trajectory/ module, and rename it to be
more descriptive. This directory can then evolve to have the basic data
structures and operations on trajectory information, similarly to the
topology module for structure information. This removes a
pbcutil <-> fileio cyclic dependency, and also makes the selection code
independent of fileio.
Moved energy.h from mdtypes/ to the same place, since it is used for
representing energy information during the trajectory. This makes
mdtypes at least slightly more mdrun-specific.
Part of #1854.
Change-Id: I4c266d78daefc3be9adefb56cd7cce8d9548634b
Berk Hess [Thu, 10 Dec 2015 19:55:40 +0000 (20:55 +0100)]
Removed unused mdrun option -dn
Change-Id: I1814258c9f7e60e3ef4fef0f6def918d2bf50e4a
Teemu Murtola [Fri, 11 Dec 2015 07:21:49 +0000 (09:21 +0200)]
Move disre.* and orires.* to listed-forces/
This removes topology -> gmxlib dependency, and moves code out of gmxlib
to a more appropriate location.
Convert existing comments to very rudimentary Doxygen documentation to
avoid Doxygen warnings.
Part of #1854.
Change-Id: I1aa56dd8f14eff90e035f1c69d59bb19a8dcb7ed
Teemu Murtola [Fri, 11 Dec 2015 06:58:10 +0000 (08:58 +0200)]
Move ifunc.* to topology/
This does not solve the main cyclic dependency that comes from
interaction_function definition depending on all the functions that
evaluate the interactions, but it does centralize this dependency to
topology: pbcutil -> gmxlib dependency is now removed.
Part of #1854.
Change-Id: Iaed05348cf663db7faeb7154a2838ea84d8bde1b
Teemu Murtola [Fri, 11 Dec 2015 07:01:30 +0000 (09:01 +0200)]
Move put_atoms_in_box_omp() to sim_util.*
This contributed to pbcutil -> gmxlib cyclic dependency, and it could
anyways be better to have mdrun-specific code outside the generic
modules.
Change-Id: Ibc453a290dc124b1f83adf0c3385e9907581e377
Teemu Murtola [Thu, 10 Dec 2015 19:29:43 +0000 (21:29 +0200)]
Remove topology -> fileio dependency
There is no particular reason why .ndx reading/writing would need to use
gmxfio.h for I/O, instead of the simpler routines from futil.h. For
now, removing the use of gmxfio.h makes the dependencies much cleaner.
Part of #1854.
Change-Id: I86ed5dea88a230fbd337acb3a47048c9ab6e7fbe
Mark Abraham [Wed, 11 Nov 2015 21:23:35 +0000 (22:23 +0100)]
Broke up copyright.*
Split unrelated content into binaryinformation.* and pleasecite.*, and
move them to utility/. This removes functionality from fileio that does
not really belong there, and helps in removing cyclic dependencies.
One new cyclic dependency suppressed for now; it will disappear with
simplification of gmx_invsqrt().
Part of #1415.
Change-Id: I65f07768d46852783d30cf1a28dd22d614dde125
Mark Abraham [Mon, 30 Nov 2015 22:25:40 +0000 (23:25 +0100)]
Require Nose-Hoover with MTTK
Nothing else was ever supported, and could segfault if reference
temperatures in the .mdp file were zero because there was no
thermostat.
Change-Id: Id0dc1302832c306d43dc809f032b850236849580
Christoph Junghans [Mon, 30 Nov 2015 18:06:05 +0000 (11:06 -0700)]
AdResS: lost performance tweak
Change-Id: I164bc6a60f62d117fef83844da74c3707455a980
Berk Hess [Fri, 11 Dec 2015 15:36:43 +0000 (16:36 +0100)]
Fix bug with pull group weights
Using pull-group?-weights would set all pull indices to 0.
Fixes #1878
Change-Id: Iff4c4ef9814313f948fbec3279d5815ce96216ef
Mark Abraham [Mon, 23 Nov 2015 16:01:00 +0000 (17:01 +0100)]
Stop global communication depending on integrator
In
488464e7, we removed the iterative case for the md-vv
integrator. This exposed a bug that I suspect has been there ever
since the first implementation of md-vv. Whether we do reduction on
the force virial should depend only on whether the main loop asked for
it, because we're planning to calculate quantities that need it,
e.g. pressure. Further discussion on Redmine.
Fixes #1858
Change-Id: I0fbce62a9732dac186aec687445dcb848151c4fd
Teemu Murtola [Fri, 11 Dec 2015 06:27:45 +0000 (07:27 +0100)]
Merge "Merge branch 'origin/release-5-1'"
Mark Abraham [Thu, 10 Dec 2015 01:36:16 +0000 (12:36 +1100)]
Merge branch 'origin/release-5-1'
Change-Id: Ib28050b54b93ee5eabb12414a92424987b769693
Teemu Murtola [Thu, 3 Dec 2015 20:06:47 +0000 (22:06 +0200)]
Split txtdump.*, part 2
Move basic txtdump.* to utility. To avoid introducing more cyclic
dependencies, move some contents closer to declaration of the types
being dumped:
- Move pr_inputrec() to mdtypes/inputrec.*.
- Move pr_*() functions operating on vectypes.h types to math/vecdump.*.
One additional cycle suppressed for now; on the other side, this removes
nearly all pbcutil -> fileio and topology -> fileio dependencies,
getting us closer to removing those cycles.
Add basic comments for remaining txtdump.h functions to avoid Doxygen
warnings.
Change-Id: I8ec5b34f6d5af8e63f9716e782943e75cb06b5b5
Teemu Murtola [Thu, 3 Dec 2015 19:22:37 +0000 (21:22 +0200)]
Split txtdump.*, part 1
- Move routines to print various data structures to the file that
declares the data structure, mostly to topology/.
- Rename pr_header() to pr_tpxheader() to clarify its use.
- Remove unused pr_commrec() and some commented-out code.
- Remove unnecessary uses of txtdump.h.
This helps avoiding dependency cycles coming from this (because in its
old form, any code that wanted to use these routines for, e.g., debug
output, would need to be above all the data structures for which this
printing was supported). Also, it makes it easier to find the code that
needs changing because of a data structure change easier when it is
close to the declaration of the data structure.
Follow-up commit will move txtdump.* out of fileio to resolve existing
cyclic dependencies, but split that into a separate commit to keep the
size manageable.
Change-Id: I2665f6d25cd095f4c7d11d32bcaec38601ff8d8b
Robert McGibbon [Wed, 14 Oct 2015 08:36:46 +0000 (01:36 -0700)]
Implement parse_digits_from_csv_string
Allow -gpu_id and GMX_GPU_ID to use a comma separated list of digits,
to support specification of >10 GPUs per node.
Change-Id: I62e6b54476efadd24aef00ed63d29c98e4d15c38
Mark Abraham [Fri, 20 Nov 2015 16:10:02 +0000 (17:10 +0100)]
Update use of preprocessor in managing GPU support
Once CMake has done detection of GPU library support, within CMake we
now use GMX_USE_CUDA and GMX_USE_OPENCL to handle details such as
which source code files should be compiled. This makes code in
CMakeLists.txt files slightly more clear.
To configure the GROMACS build via config.h, CMake sets GMX_GPU_TYPE
to match the name of one of three hard-coded defines in
config.h.cmake.in, and configures GMX_GPU with the value represented
by that name. This ensures GMX_GPU always has a value in source code,
so various kinds of mis-use will found by the compiler. It also means
we can use GMX_GPU and the values of those defines to simplify the
parts of high-level code that are different according to which GPU
configuration is in use - mostly in reporting to the user what is
going on. This reduces the number of complex preprocessor conditionals
that might want documenting or indenting, and makes it harder to write
a syntax error that can only be found with a particular build
configuration.
Minor change to the start-of-run reporting. Rather than show that GPU
is disabled/enabled, and OpenCL likewise, show disabled or which of
CUDA or OpenCL is enabled for GPU acceleration. The OpenCL library
name will make clear whether AMD or NVIDIA libraries is providing the
OpenCL runtime.
No changes to user interface of CMake. Removed redundant declaration
of option(GMX_GPU) from main CMakeLists.txt, since gmxManageGpu()
already did that.
No changes required to current or future compute code, since CMake
still handles whether such code is compiled at all.
Refs #1855
Change-Id: I3448fe284ac526eb2b185e915b95fcc84f3d469a
Roland Schulz [Sun, 29 Nov 2015 15:47:55 +0000 (10:47 -0500)]
Remove old MSVC references
Change-Id: I32100e53a0a6dc76febaedeb47dd7e9efa25ba4d
Mark Abraham [Tue, 8 Dec 2015 07:45:22 +0000 (18:45 +1100)]
Merge branch 'release-5-0' into release-5-1
Conflicts:
src/gromacs/mdlib/coupling.cpp
Trivial conflict from removing unused variables in release-5-1, but
adding one in release-5-0, resolved by combining both logical changes.
Change-Id: Ib3e762bec8699465d47cbc364fecb424b23aec11
Mark Abraham [Tue, 1 Dec 2015 03:11:04 +0000 (04:11 +0100)]
Fix Trotter integration
Re-using the iteration variable in an inner scope could have produced
any manner of nonsense. Luckily it was only broken for md-vv with NPT
and more than one temperature-coupling group.
Fixes #1872
Change-Id: If22849e40a0253ba1fa4bbc1dba78b80d17cf4d1
Berk Hess [Thu, 26 Nov 2015 20:55:41 +0000 (21:55 +0100)]
Moved pull params to mdtypes/pull-params.h
Change-Id: Ib49f78d4e2b8e25cdbca727c36abca74a3c11611
Magnus Lundborg [Thu, 26 Nov 2015 10:50:59 +0000 (11:50 +0100)]
Write forces and velocities to compressed TNG.
If there is no uncompressed coordinate output write forces
and velocities to the TNG file with compressed coordinate
output. If there is uncompressed coordinate output to a
TNG file forces and velocities will be written to it.
Use a greatest common divisor to set the frequency of some TNG
data output to ensure lambdas and box shape are written at least
as often as anything else.
This commit closes #1863.
Change-Id: I61bb5513f5080847f9098ff4fd7f01c8d1415a8f
Mark Abraham [Thu, 26 Nov 2015 18:31:22 +0000 (19:31 +0100)]
Remove mdrun -compact
This defaulted to true, and was otherwise always hard-coded to true in
print_ebin() when in eprNORMAL mode, and always hard-coded to false in
eprAVER mode. The data printed looks like it should always be in the
energy file, which is how we should approach analysis tasks that might
make use of the non-compact data if it was written in eprNORMAL mode.
Change-Id: I1b7912cc6e87712cf71854bcd18b00e9ad25a9be
Teemu Murtola [Wed, 2 Dec 2015 04:35:40 +0000 (06:35 +0200)]
Move strdb.* to utility/
These are more similar to the low-level I/O routines already present in
utility (most uses would be easy to replace with TextReader alone, after
some minor extensions), rather than to the other fileio/ stuff.
This, in part, helps breaking the fileio <-> topology cyclic dependency.
Remove unused or duplicate functions or make them private to the source
file.
Convert existing comments to rudimentary Doxygen to avoid warnings.
Change-Id: I3f5262112fabe2bffa16c14c20d987e2e63dcb4f
Teemu Murtola [Tue, 1 Dec 2015 20:16:49 +0000 (22:16 +0200)]
Move filenm.* to commandline
These are really related to command-line parsing instead of file I/O, so
they belong here. Move opt2fn_master() to network.* to avoid an
commandline -> mdtypes dependency.
Convert existing comments to rudimentary Doxygen documentation to avoid
warnings.
Change-Id: Idd1a088a70f4687f1929075f14b5ac63564a1f9b
Teemu Murtola [Tue, 1 Dec 2015 20:08:36 +0000 (22:08 +0200)]
Split filenm.*
- Split the declaration of recognized file types into a separate file
(filetypes.*) from filenm.*. The latter now only contains the
t_filenm structure and functions related to it. This can later move
to the command-line module.
- Do not include filenm.h from other headers, except for pargs.h, where
all users will anyways require it.
- Include filenm.h from source files that need it.
- Replace uses of filenm.h with filetypes.h where only the latter is
needed.
Change-Id: Ic125e4fe209fba9dbb238daa4ae8ee72451a64c9
Berk Hess [Wed, 2 Dec 2015 11:50:29 +0000 (12:50 +0100)]
Increase pdb chain ids to 62 in output
We used to only use uppercase chain identifiers for chain ids in
output to pdb. Now we can use all 62 alphanumeric characters.
Change-Id: Ic56ef95354d247cb0129606d24c5df8644722573
Berk Hess [Tue, 1 Dec 2015 10:45:12 +0000 (11:45 +0100)]
Refactored set_pbc_dd
Made set_pbc_dd more understandable and updates its documentation.
Made all input pointers to the pbc code const, this also required
all pointer arguments in txtdump to be const.
Change-Id: I40db5532502e647e821c0bf083614fbc586df44e
Berk Hess [Fri, 20 Nov 2015 09:16:45 +0000 (10:16 +0100)]
Made t_inputrec const in PME load balancing
Now that the twin-range scheme is gone, inputrec is no longer
modified during PME load balancing. Added a const qualifier to make
this clear and enforce this during future changes.
Also added const for all const arguments in domdec_box.cpp.
Change-Id: Ie063fe3d5846e1f9565634c4561c09f3cc9b5bae
Mark Abraham [Mon, 16 Nov 2015 23:53:35 +0000 (00:53 +0100)]
Remove twin-range scheme
Only the group scheme supports this, and the Verlet scheme will not
support it in the foreseeable future.
Removed many uses of rlistlong, but replaced some appropriate uses
with rlist. We now have the explicit requirement that rlist >=
max(rcoulomb,rvdw).
Didn't rename variables that contain "shortrange" or "SR" since
they'll mostly disappear with the group scheme
Retained energy components that need to be retained for .edr
compatibility.
gmx compare and dump ignore the old fields
Change-Id: I6ab2ea93bfcea8510969b43e7f06f55d5f350840
Berk Hess [Fri, 17 Apr 2015 18:10:08 +0000 (20:10 +0200)]
Pull group count for coords stored in tpr
Added a parameter ngroup to the pull coord parameters. This is now
also stored in the tpr file. This simplifies code in several places,
since we now only need to determine ngroup is one place. This change
also makes the pull geometry forward compatible, which is useful
since it avoid bumping tpx_version with every new geometry and
we expect that users want to experiment with new geometries.
Change-Id: I7fc0032e439a5ac329f3260d5a6c775295a61bfc
Erik Lindahl [Tue, 1 Dec 2015 00:27:08 +0000 (01:27 +0100)]
Fixed null-dereferencing bug in vsites
set_pbc_dd() would be called with the argument
cr->dd->nc even when cr->dd was NULL. Fixed to
use a NULL pointer argument instead.
Change-Id: I19c3cb5be2a48d063323c7daf9f1b203d988279b
Teemu Murtola [Mon, 30 Nov 2015 15:19:52 +0000 (17:19 +0200)]
Remove topology -> mdtypes dependency
This only existed because of a single use of t_inputrec in mtop_util.
Replaced the access to t_inputrec.efep with an equivalent check in the
callers. Not ideal, but can possibly be improved futher by moving code
around once the desired structure is clearer.
Change-Id: Ieb777f6fd11b15c4fecaf391b22293439097f2fa
Teemu Murtola [Mon, 30 Nov 2015 10:57:59 +0000 (12:57 +0200)]
Remove obsolete references to legacyheaders/
Change-Id: I076f0809314d894b9322d369c675e37ad321d02a
Teemu Murtola [Mon, 30 Nov 2015 10:52:22 +0000 (12:52 +0200)]
Merge remaining legacyheaders/types/ to mdtypes/
One cyclic dependency suppressed for now.
legacyheaders/ is no more.
Closes #1415 (but this just moves us to the next phase of the clean-up)
Change-Id: Ie80d24d347acb61216002a309cb4118f8dc99b6b
Teemu Murtola [Mon, 30 Nov 2015 10:39:49 +0000 (12:39 +0200)]
Move ifunc.h to gmxlib
This is where the source file currently resides. There are some cyclic
dependencies introduced by this, but these already existed. Should be
sorted out separately.
Change-Id: I4353da8820b37a10508147ffdf1cbe731b8e3361
Teemu Murtola [Mon, 30 Nov 2015 10:31:43 +0000 (12:31 +0200)]
Move force_flags.h to mdlib/
One more header out of legacyheaders, only a few remaining.
Change-Id: I02397a5e5664179174e73646ffb11f4b186bdf41
Teemu Murtola [Mon, 30 Nov 2015 10:23:03 +0000 (12:23 +0200)]
libgromacs CMake source file management cleanup
- Remove obsolete globbing for *.c files.
- Do not install anything remaining in legacyheaders/, which makes it
possible to remove the whole CMakeLists.txt files from there.
- Add gmx_add_libgromacs_sources() as an alternative to globbing, and
use it in places where we were only using the globbing to get full
paths (so that they work where we want).
Change-Id: I654b84b6f48b7991faa3d7a349d5118be932493d
Teemu Murtola [Mon, 30 Nov 2015 10:04:23 +0000 (12:04 +0200)]
Move hardware info structs to hardware/
Move hw_info.h and gpu_hw_info.h to hardware/, removing more code from
legacyheaders/types/.
Change-Id: Id324f8b517beb9cfd4e9d517f9e704efc55a4096