Commit ed494b29 authored by Stan Moore's avatar Stan Moore
Browse files

WIP

parent dbc308f3
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -250,7 +250,7 @@ void FixQEqReaxKokkos<DeviceType>::pre_force(int vflag)
  k_t.template sync<DeviceType>();

  if (neighflag != FULL)
    red_o = Kokkos::Experimental::create_scatter_view<> (d_o); // allocate duplicated memory
    red_o = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum,DupF<DeviceType>::value> (d_o); // allocate duplicated memory

  // 1st cg solve over b_s, s
  cg_solve1();
+1 −2
Original line number Diff line number Diff line
@@ -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"
@@ -193,7 +192,7 @@ class FixQEqReaxKokkos : public FixQEqReax {
  HAT::t_ffloat_2d h_s_hist, h_t_hist;
  typename AT::t_ffloat_2d_randomread r_s_hist, r_t_hist;

  Kokkos::Experimental::ScatterView<F_FLOAT*, typename AT::t_ffloat_1d::array_layout, DeviceType> red_o;
  Kokkos::Experimental::ScatterView<F_FLOAT*, typename AT::t_ffloat_1d::array_layout,DeviceType,Kokkos::Experimental::ScatterSum,DupF<DeviceType>::value> red_o;

  void init_shielding_k();
  void init_hist();
+74 −0
Original line number Diff line number Diff line
@@ -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

+1 −1
Original line number Diff line number Diff line
@@ -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
{
+0 −70
Original line number Diff line number Diff line
@@ -48,76 +48,6 @@ struct DoCoul<1> {
  typedef CoulTag type;
};

// 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


//Specialisation for Neighborlist types Half, HalfThread, Full
template <class PairStyle, int NEIGHFLAG, bool STACKPARAMS, class Specialisation = void>
Loading