Merge from master

This commit is contained in:
Stan Moore
2018-03-21 17:24:35 -06:00
5 changed files with 76 additions and 3 deletions

View File

@ -22,7 +22,6 @@ FixStyle(qeq/reax/kk/host,FixQEqReaxKokkos<LMPHostType>)
#ifndef LMP_FIX_QEQ_REAX_KOKKOS_H
#define LMP_FIX_QEQ_REAX_KOKKOS_H
#include <Kokkos_ScatterView.hpp>
#include "fix_qeq_reax.h"
#include "kokkos_type.h"
#include "neigh_list.h"

View File

@ -20,6 +20,9 @@
#include <Kokkos_DualView.hpp>
#include <impl/Kokkos_Timer.hpp>
#include <Kokkos_Vectorization.hpp>
#include <Kokkos_ScatterView.hpp>
enum{FULL=1u,HALFTHREAD=2u,HALF=4u,N2=8u}; // same as in neigh_list_kokkos.h
#if defined(KOKKOS_HAVE_CXX11)
#undef ISFINITE
@ -205,6 +208,77 @@ struct ExecutionSpaceFromDevice<Kokkos::Cuda> {
};
#endif
// Determine memory traits for force array
// Do atomic trait when running HALFTHREAD neighbor list style
template<int NEIGHFLAG>
struct AtomicF {
enum {value = Kokkos::Unmanaged};
};
template<>
struct AtomicF<HALFTHREAD> {
enum {value = Kokkos::Atomic|Kokkos::Unmanaged};
};
// Determine memory traits for force array
// Do atomic trait when running HALFTHREAD neighbor list style with CUDA
template<int NEIGHFLAG, class DeviceType>
struct AtomicDup {
enum {value = Kokkos::Experimental::ScatterNonAtomic};
};
#ifdef KOKKOS_ENABLE_CUDA
template<>
struct AtomicDup<HALFTHREAD,Kokkos::Cuda> {
enum {value = Kokkos::Experimental::ScatterAtomic};
};
#endif
#ifdef LMP_KOKKOS_USE_ATOMICS
#ifdef KOKKOS_ENABLE_OPENMP
template<>
struct AtomicDup<HALFTHREAD,Kokkos::OpenMP> {
enum {value = Kokkos::Experimental::ScatterAtomic};
};
#endif
#ifdef KOKKOS_ENABLE_THREADS
template<>
struct AtomicDup<HALFTHREAD,Kokkos::Threads> {
enum {value = Kokkos::Experimental::ScatterAtomic};
};
#endif
#endif
// Determine duplication traits for force array
// Use duplication when running threaded and not using atomics
template<class DeviceType>
struct DupF {
enum {value = Kokkos::Experimental::ScatterNonDuplicated};
};
#ifndef LMP_KOKKOS_USE_ATOMICS
#ifdef KOKKOS_ENABLE_OPENMP
template<>
struct DupF<Kokkos::OpenMP> {
enum {value = Kokkos::Experimental::ScatterDuplicated};
};
#endif
#ifdef KOKKOS_ENABLE_THREADS
template<>
struct DupF<Kokkos::Threads> {
enum {value = Kokkos::Experimental::ScatterDuplicated};
};
#endif
#endif
// define precision
// handle global precision, force, energy, positions, kspace separately

View File

@ -20,7 +20,7 @@
namespace LAMMPS_NS {
enum{FULL=1u,HALFTHREAD=2u,HALF=4u,N2=8u};
enum{FULL=1u,HALFTHREAD=2u,HALF=4u,N2=8u}; // same as in kokkos_type.h
class AtomNeighbors
{

View File

@ -812,6 +812,7 @@ void PairReaxCKokkos<DeviceType>::compute(int eflag_in, int vflag_in)
ndup_dDeltap_self = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterNonDuplicated>(d_dDeltap_self);
ndup_total_bo = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterNonDuplicated>(d_total_bo);
}
// Neighbor lists for bond and hbond
// try, resize if necessary

View File

@ -24,7 +24,6 @@ PairStyle(reax/c/kk/host,PairReaxCKokkos<LMPHostType>)
#define LMP_PAIR_REAXC_KOKKOS_H
#include <stdio.h>
#include <Kokkos_ScatterView.hpp>
#include "pair_kokkos.h"
#include "pair_reaxc.h"
#include "neigh_list_kokkos.h"