Conversation
|
How does this approach compares to https://github.com/ECP-copa/Cabana? |
Cabana seems to provide a more generalized way of representing Struct-of-Arrays and Array-of-Struct-of-Arrays (where attributes are template arguments) similar to how the data are stored in |
…claration warnings" This reverts commit 374b824.
Cabana has support for GPU data layouts, too. |
jkrajniak
left a comment
There was a problem hiding this comment.
LGTM, however please adjust the copyright years in the file headers. Also, I've pointed out some places where there is room for small adjustments.
|
It seems the CI failures all result from What do you guys think would be the best way to remove or suppress the warnings? |
|
Let's try with |
I placed that flag in the Dockerfile before but reverted it on advice of @junghans Can we also place that flag directly in |
You can try; These warnings are related to boost library, I wouldn't care too much about switching this off. |
|
@jnvance see https://github.com/votca/tools/blob/master/include/votca/tools/eigen.h#L34-L55 for an example on how to disable warning from an included header. |
| @@ -1,4 +1,6 @@ | |||
| /* | |||
| Copyright (C) 2018-2019 | |||
There was a problem hiding this comment.
@junghans do you think this copyright of VOTCA team should be placed here?
This PR adds a preliminary version of the
vectorizationsubmodule which speeds up the calculation of short-range pair interactions targeting Intel CPUs that support AVX2 and AVX-512.When the
espressopp.vectorization.Vectorizationclass is instantiated, it connects some of its methods to the integrator and storage objects (currently, only VelocityVerlet and DomainDecomposition are supported).During every time step of
integrator.run(), theVectorizationclass copies the necessary data from theParticlelists in the cells (currently only position) intoParticleArray, performs the force calculation, and then copies back the forces to theParticlelists. The data inParticleArrayare stored in a structure of arrays (SOA) layout. This enables the vectorization of the neighbor-list construction and force calculation using only#pragma vectordirectives (no intrinsics), similar to how it is done in the LAMMPS-INTEL package.Most of the additional source code is contained in the directory
src/vectorization, except for two new Boost signals:integrator.runafter calcForces and just before exchanging ghost forces with neighboring subdomainsVectorized versions of the VerletList and LennardJones classes are implemented in the vectorization submodule. So to use these on current scripts, one only needs to add the
vectorizationkeyword and pass the correct arguments, e.g.In this version, the energy and virial calculations still rely on the previous VerletList layout, so the Verlet list rebuild has to be manually triggered before calling any analysis functions, e.g.
An example script is provided in
examples/vectorization/lennard_jones.pywhich shows the minimal modifications needed for theexamples/lennard_jones/lennard_jones.pyscript to use vectorized versions of the routines (currently only for the equilibration phase since LennardJonesCapped is not yet implemented).A test was also added in
testsuite/vectorizationto verify that particle trajectories resulting from the MD integration are almost equal whether the vectorized or the non-vectorized version is used.Development of the submodule is optimized for the Intel 2018 compiler with
-O3 -xHost -restrictflags for Broadwell, and-O3 -xSKYLAKE-AVX512 -qopt-zmm-usage=highfor Skylake. Improvements can also be observed with GCC as long as the appropriate optimization flags are used.