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

Reduce GPU/CPU data transfer

parent 82be3ee3
Loading
Loading
Loading
Loading
+62 −37
Original line number Diff line number Diff line
@@ -21,10 +21,11 @@
#include "atom_masks.h"
#include "memory_kokkos.h"
#include "error.h"
#include "force.h"

using namespace LAMMPS_NS;

#define DELTA 10000
#define DELTA 16384

/* ---------------------------------------------------------------------- */

@@ -1763,55 +1764,79 @@ bigint AtomVecAngleKokkos::memory_usage()

void AtomVecAngleKokkos::sync(ExecutionSpace space, unsigned int mask)
{
  int nlocal = atom->nlocal;
  int nall = atom->nlocal + atom->nghost;

  // avoid unnecessary data transfer

  auto k_x = Kokkos::subview(atomKK->k_x,std::make_pair(0,nall),Kokkos::ALL);
  auto k_v = Kokkos::subview(atomKK->k_v,std::make_pair(0,nall),Kokkos::ALL);
  auto k_f = Kokkos::subview(atomKK->k_f,std::make_pair(0,(!force || force->newton)?nall:nlocal),Kokkos::ALL);
  auto k_tag = Kokkos::subview(atomKK->k_tag,std::make_pair(0,nall));
  auto k_type = Kokkos::subview(atomKK->k_type,std::make_pair(0,nall));
  auto k_mask = Kokkos::subview(atomKK->k_mask,std::make_pair(0,nall));
  auto k_image = Kokkos::subview(atomKK->k_image,std::make_pair(0,nall));
  auto k_molecule = Kokkos::subview(atomKK->k_molecule,std::make_pair(0,nall));
  auto k_nspecial = Kokkos::subview(atomKK->k_nspecial,std::make_pair(0,nall),Kokkos::ALL);
  auto k_special = Kokkos::subview(atomKK->k_special,std::make_pair(0,nall),Kokkos::ALL);
  auto k_num_bond = Kokkos::subview(atomKK->k_num_bond,std::make_pair(0,nall));
  auto k_bond_type = Kokkos::subview(atomKK->k_bond_type,std::make_pair(0,nall),Kokkos::ALL);
  auto k_bond_atom = Kokkos::subview(atomKK->k_bond_atom,std::make_pair(0,nall),Kokkos::ALL);
  auto k_num_angle = Kokkos::subview(atomKK->k_num_angle,std::make_pair(0,nall));
  auto k_angle_type = Kokkos::subview(atomKK->k_angle_type,std::make_pair(0,nall),Kokkos::ALL);
  auto k_angle_atom1 = Kokkos::subview(atomKK->k_angle_atom1,std::make_pair(0,nall),Kokkos::ALL);
  auto k_angle_atom2 = Kokkos::subview(atomKK->k_angle_atom2,std::make_pair(0,nall),Kokkos::ALL);
  auto k_angle_atom3 = Kokkos::subview(atomKK->k_angle_atom3,std::make_pair(0,nall),Kokkos::ALL);

  if (space == Device) {
    if (mask & X_MASK) atomKK->k_x.sync<LMPDeviceType>();
    if (mask & V_MASK) atomKK->k_v.sync<LMPDeviceType>();
    if (mask & F_MASK) atomKK->k_f.sync<LMPDeviceType>();
    if (mask & TAG_MASK) atomKK->k_tag.sync<LMPDeviceType>();
    if (mask & TYPE_MASK) atomKK->k_type.sync<LMPDeviceType>();
    if (mask & MASK_MASK) atomKK->k_mask.sync<LMPDeviceType>();
    if (mask & IMAGE_MASK) atomKK->k_image.sync<LMPDeviceType>();
    if (mask & MOLECULE_MASK) atomKK->k_molecule.sync<LMPDeviceType>();
    if (mask & X_MASK) k_x.sync<LMPDeviceType>();
    if (mask & V_MASK) k_v.sync<LMPDeviceType>();
    if (mask & F_MASK) k_f.sync<LMPDeviceType>();
    if (mask & TAG_MASK) k_tag.sync<LMPDeviceType>();
    if (mask & TYPE_MASK) k_type.sync<LMPDeviceType>();
    if (mask & MASK_MASK) k_mask.sync<LMPDeviceType>();
    if (mask & IMAGE_MASK) k_image.sync<LMPDeviceType>();
    if (mask & MOLECULE_MASK) k_molecule.sync<LMPDeviceType>();
    if (mask & SPECIAL_MASK) {
      atomKK->k_nspecial.sync<LMPDeviceType>();
      atomKK->k_special.sync<LMPDeviceType>();
      k_nspecial.sync<LMPDeviceType>();
      k_special.sync<LMPDeviceType>();
    }
    if (mask & BOND_MASK) {
      atomKK->k_num_bond.sync<LMPDeviceType>();
      atomKK->k_bond_type.sync<LMPDeviceType>();
      atomKK->k_bond_atom.sync<LMPDeviceType>();
      k_num_bond.sync<LMPDeviceType>();
      k_bond_type.sync<LMPDeviceType>();
      k_bond_atom.sync<LMPDeviceType>();
    }
    if (mask & ANGLE_MASK) {
      atomKK->k_num_angle.sync<LMPDeviceType>();
      atomKK->k_angle_type.sync<LMPDeviceType>();
      atomKK->k_angle_atom1.sync<LMPDeviceType>();
      atomKK->k_angle_atom2.sync<LMPDeviceType>();
      atomKK->k_angle_atom3.sync<LMPDeviceType>();
      k_num_angle.sync<LMPDeviceType>();
      k_angle_type.sync<LMPDeviceType>();
      k_angle_atom1.sync<LMPDeviceType>();
      k_angle_atom2.sync<LMPDeviceType>();
      k_angle_atom3.sync<LMPDeviceType>();
    }
  } else {
    if (mask & X_MASK) atomKK->k_x.sync<LMPHostType>();
    if (mask & V_MASK) atomKK->k_v.sync<LMPHostType>();
    if (mask & F_MASK) atomKK->k_f.sync<LMPHostType>();
    if (mask & TAG_MASK) atomKK->k_tag.sync<LMPHostType>();
    if (mask & TYPE_MASK) atomKK->k_type.sync<LMPHostType>();
    if (mask & MASK_MASK) atomKK->k_mask.sync<LMPHostType>();
    if (mask & IMAGE_MASK) atomKK->k_image.sync<LMPHostType>();
    if (mask & MOLECULE_MASK) atomKK->k_molecule.sync<LMPHostType>();
    if (mask & X_MASK) k_x.sync<LMPHostType>();
    if (mask & V_MASK) k_v.sync<LMPHostType>();
    if (mask & F_MASK) k_f.sync<LMPHostType>();
    if (mask & TAG_MASK) k_tag.sync<LMPHostType>();
    if (mask & TYPE_MASK) k_type.sync<LMPHostType>();
    if (mask & MASK_MASK) k_mask.sync<LMPHostType>();
    if (mask & IMAGE_MASK) k_image.sync<LMPHostType>();
    if (mask & MOLECULE_MASK) k_molecule.sync<LMPHostType>();
    if (mask & SPECIAL_MASK) {
      atomKK->k_nspecial.sync<LMPHostType>();
      atomKK->k_special.sync<LMPHostType>();
      k_nspecial.sync<LMPHostType>();
      k_special.sync<LMPHostType>();
    }
    if (mask & BOND_MASK) {
      atomKK->k_num_bond.sync<LMPHostType>();
      atomKK->k_bond_type.sync<LMPHostType>();
      atomKK->k_bond_atom.sync<LMPHostType>();
      k_num_bond.sync<LMPHostType>();
      k_bond_type.sync<LMPHostType>();
      k_bond_atom.sync<LMPHostType>();
    }
    if (mask & ANGLE_MASK) {
      atomKK->k_num_angle.sync<LMPHostType>();
      atomKK->k_angle_type.sync<LMPHostType>();
      atomKK->k_angle_atom1.sync<LMPHostType>();
      atomKK->k_angle_atom2.sync<LMPHostType>();
      atomKK->k_angle_atom3.sync<LMPHostType>();
      k_num_angle.sync<LMPHostType>();
      k_angle_type.sync<LMPHostType>();
      k_angle_atom1.sync<LMPHostType>();
      k_angle_atom2.sync<LMPHostType>();
      k_angle_atom3.sync<LMPHostType>();
    }
  }
}
+29 −31
Original line number Diff line number Diff line
@@ -25,7 +25,7 @@

using namespace LAMMPS_NS;

#define DELTA 10
#define DELTA 16384

/* ---------------------------------------------------------------------- */

@@ -56,8 +56,7 @@ AtomVecAtomicKokkos::AtomVecAtomicKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp)

void AtomVecAtomicKokkos::grow(int n)
{
  int step = MAX(DELTA,nmax*0.01);
  if (n == 0) nmax += step;
  if (n == 0) nmax += DELTA;
  else nmax = n;
  atomKK->nmax = nmax;
  if (nmax < 0 || nmax > MAXSMALLINT)
@@ -899,36 +898,35 @@ bigint AtomVecAtomicKokkos::memory_usage()

void AtomVecAtomicKokkos::sync(ExecutionSpace space, unsigned int mask)
{
  int nlocal = atom->nlocal;
  int nall = atom->nlocal + atom->nghost;

  // avoid unnecessary data transfer

  auto k_x = Kokkos::subview(atomKK->k_x,std::make_pair(0,nall),Kokkos::ALL);
  auto k_v = Kokkos::subview(atomKK->k_v,std::make_pair(0,nall),Kokkos::ALL);
  auto k_f = Kokkos::subview(atomKK->k_f,std::make_pair(0,(!force || force->newton)?nall:nlocal),Kokkos::ALL);
  auto k_tag = Kokkos::subview(atomKK->k_tag,std::make_pair(0,nall));
  auto k_type = Kokkos::subview(atomKK->k_type,std::make_pair(0,nall));
  auto k_mask = Kokkos::subview(atomKK->k_mask,std::make_pair(0,nall));
  auto k_image = Kokkos::subview(atomKK->k_image,std::make_pair(0,nall));

  if (space == Device) {
    if (mask & X_MASK) atomKK->k_x.sync<LMPDeviceType>();
    if (mask & V_MASK) atomKK->k_v.sync<LMPDeviceType>();
    if (mask & F_MASK) {
      if (!force || force->newton) {
        atomKK->k_f.sync<LMPDeviceType>();
      } else { 
        auto k_f_nlocal = Kokkos::subview(atomKK->k_f,std::make_pair(0,atom->nlocal),Kokkos::ALL);
        k_f_nlocal.sync<LMPDeviceType>();
      }
    }
    if (mask & TAG_MASK) atomKK->k_tag.sync<LMPDeviceType>();
    if (mask & TYPE_MASK) atomKK->k_type.sync<LMPDeviceType>();
    if (mask & MASK_MASK) atomKK->k_mask.sync<LMPDeviceType>();
    if (mask & IMAGE_MASK) atomKK->k_image.sync<LMPDeviceType>();
  } else {
    if (mask & X_MASK) atomKK->k_x.sync<LMPHostType>();
    if (mask & V_MASK) atomKK->k_v.sync<LMPHostType>();
    if (mask & F_MASK) {
      if (!force || force->newton) {
        atomKK->k_f.sync<LMPHostType>();
    if (mask & X_MASK) k_x.sync<LMPDeviceType>();
    if (mask & V_MASK) k_v.sync<LMPDeviceType>();
    if (mask & F_MASK) k_f.sync<LMPDeviceType>();
    if (mask & TAG_MASK) k_tag.sync<LMPDeviceType>();
    if (mask & TYPE_MASK) k_type.sync<LMPDeviceType>();
    if (mask & MASK_MASK) k_mask.sync<LMPDeviceType>();
    if (mask & IMAGE_MASK) k_image.sync<LMPDeviceType>();
  } else {
        auto k_f_nlocal = Kokkos::subview(atomKK->k_f,std::make_pair(0,atom->nlocal),Kokkos::ALL);
        k_f_nlocal.sync<LMPHostType>();
      }
    }
    if (mask & TAG_MASK) atomKK->k_tag.sync<LMPHostType>();
    if (mask & TYPE_MASK) atomKK->k_type.sync<LMPHostType>();
    if (mask & MASK_MASK) atomKK->k_mask.sync<LMPHostType>();
    if (mask & IMAGE_MASK) atomKK->k_image.sync<LMPHostType>();
    if (mask & X_MASK) k_x.sync<LMPHostType>();
    if (mask & V_MASK) k_v.sync<LMPHostType>();
    if (mask & F_MASK) k_f.sync<LMPHostType>();
    if (mask & TAG_MASK) k_tag.sync<LMPHostType>();
    if (mask & TYPE_MASK) k_type.sync<LMPHostType>();
    if (mask & MASK_MASK) k_mask.sync<LMPHostType>();
    if (mask & IMAGE_MASK) k_image.sync<LMPHostType>();
  }
}

+48 −27
Original line number Diff line number Diff line
@@ -21,10 +21,11 @@
#include "atom_masks.h"
#include "memory_kokkos.h"
#include "error.h"
#include "force.h"

using namespace LAMMPS_NS;

#define DELTA 10000
#define DELTA 16384

/* ---------------------------------------------------------------------- */

@@ -1175,41 +1176,61 @@ bigint AtomVecBondKokkos::memory_usage()

void AtomVecBondKokkos::sync(ExecutionSpace space, unsigned int mask)
{
  int nlocal = atom->nlocal;
  int nall = atom->nlocal + atom->nghost;

  // avoid unnecessary data transfer

  auto k_x = Kokkos::subview(atomKK->k_x,std::make_pair(0,nall),Kokkos::ALL);
  auto k_v = Kokkos::subview(atomKK->k_v,std::make_pair(0,nall),Kokkos::ALL);
  auto k_f = Kokkos::subview(atomKK->k_f,std::make_pair(0,(!force || force->newton)?nall:nlocal),Kokkos::ALL);
  auto k_tag = Kokkos::subview(atomKK->k_tag,std::make_pair(0,nall));
  auto k_type = Kokkos::subview(atomKK->k_type,std::make_pair(0,nall));
  auto k_mask = Kokkos::subview(atomKK->k_mask,std::make_pair(0,nall));
  auto k_image = Kokkos::subview(atomKK->k_image,std::make_pair(0,nall));
  auto k_q = Kokkos::subview(atomKK->k_q,std::make_pair(0,nall));
  auto k_molecule = Kokkos::subview(atomKK->k_molecule,std::make_pair(0,nall));
  auto k_nspecial = Kokkos::subview(atomKK->k_nspecial,std::make_pair(0,nall),Kokkos::ALL);
  auto k_special = Kokkos::subview(atomKK->k_special,std::make_pair(0,nall),Kokkos::ALL);
  auto k_num_bond = Kokkos::subview(atomKK->k_num_bond,std::make_pair(0,nall));
  auto k_bond_type = Kokkos::subview(atomKK->k_bond_type,std::make_pair(0,nall),Kokkos::ALL);
  auto k_bond_atom = Kokkos::subview(atomKK->k_bond_atom,std::make_pair(0,nall),Kokkos::ALL);

  if (space == Device) {
    if (mask & X_MASK) atomKK->k_x.sync<LMPDeviceType>();
    if (mask & V_MASK) atomKK->k_v.sync<LMPDeviceType>();
    if (mask & F_MASK) atomKK->k_f.sync<LMPDeviceType>();
    if (mask & TAG_MASK) atomKK->k_tag.sync<LMPDeviceType>();
    if (mask & TYPE_MASK) atomKK->k_type.sync<LMPDeviceType>();
    if (mask & MASK_MASK) atomKK->k_mask.sync<LMPDeviceType>();
    if (mask & IMAGE_MASK) atomKK->k_image.sync<LMPDeviceType>();
    if (mask & MOLECULE_MASK) atomKK->k_molecule.sync<LMPDeviceType>();
    if (mask & X_MASK) k_x.sync<LMPDeviceType>();
    if (mask & V_MASK) k_v.sync<LMPDeviceType>();
    if (mask & F_MASK) k_f.sync<LMPDeviceType>();
    if (mask & TAG_MASK) k_tag.sync<LMPDeviceType>();
    if (mask & TYPE_MASK) k_type.sync<LMPDeviceType>();
    if (mask & MASK_MASK) k_mask.sync<LMPDeviceType>();
    if (mask & IMAGE_MASK) k_image.sync<LMPDeviceType>();
    if (mask & MOLECULE_MASK) k_molecule.sync<LMPDeviceType>();
    if (mask & SPECIAL_MASK) {
      atomKK->k_nspecial.sync<LMPDeviceType>();
      atomKK->k_special.sync<LMPDeviceType>();
      k_nspecial.sync<LMPDeviceType>();
      k_special.sync<LMPDeviceType>();
    }
    if (mask & BOND_MASK) {
      atomKK->k_num_bond.sync<LMPDeviceType>();
      atomKK->k_bond_type.sync<LMPDeviceType>();
      atomKK->k_bond_atom.sync<LMPDeviceType>();
      k_num_bond.sync<LMPDeviceType>();
      k_bond_type.sync<LMPDeviceType>();
      k_bond_atom.sync<LMPDeviceType>();
    }
  } else {
    if (mask & X_MASK) atomKK->k_x.sync<LMPHostType>();
    if (mask & V_MASK) atomKK->k_v.sync<LMPHostType>();
    if (mask & F_MASK) atomKK->k_f.sync<LMPHostType>();
    if (mask & TAG_MASK) atomKK->k_tag.sync<LMPHostType>();
    if (mask & TYPE_MASK) atomKK->k_type.sync<LMPHostType>();
    if (mask & MASK_MASK) atomKK->k_mask.sync<LMPHostType>();
    if (mask & IMAGE_MASK) atomKK->k_image.sync<LMPHostType>();
    if (mask & MOLECULE_MASK) atomKK->k_molecule.sync<LMPHostType>();
    if (mask & X_MASK) k_x.sync<LMPHostType>();
    if (mask & V_MASK) k_v.sync<LMPHostType>();
    if (mask & F_MASK) k_f.sync<LMPHostType>();
    if (mask & TAG_MASK) k_tag.sync<LMPHostType>();
    if (mask & TYPE_MASK) k_type.sync<LMPHostType>();
    if (mask & MASK_MASK) k_mask.sync<LMPHostType>();
    if (mask & IMAGE_MASK) k_image.sync<LMPHostType>();
    if (mask & MOLECULE_MASK) k_molecule.sync<LMPHostType>();
    if (mask & SPECIAL_MASK) {
      atomKK->k_nspecial.sync<LMPHostType>();
      atomKK->k_special.sync<LMPHostType>();
      k_nspecial.sync<LMPHostType>();
      k_special.sync<LMPHostType>();
    }
    if (mask & BOND_MASK) {
      atomKK->k_num_bond.sync<LMPHostType>();
      atomKK->k_bond_type.sync<LMPHostType>();
      atomKK->k_bond_atom.sync<LMPHostType>();
      k_num_bond.sync<LMPHostType>();
      k_bond_type.sync<LMPHostType>();
      k_bond_atom.sync<LMPHostType>();
    }
  }
}
+32 −17
Original line number Diff line number Diff line
@@ -21,10 +21,11 @@
#include "atom_masks.h"
#include "memory_kokkos.h"
#include "error.h"
#include "force.h"

using namespace LAMMPS_NS;

#define DELTA 10000
#define DELTA 16384

/* ---------------------------------------------------------------------- */

@@ -1068,24 +1069,38 @@ bigint AtomVecChargeKokkos::memory_usage()

void AtomVecChargeKokkos::sync(ExecutionSpace space, unsigned int mask)
{
  int nlocal = atom->nlocal;
  int nall = atom->nlocal + atom->nghost;

  // avoid unnecessary data transfer

  auto k_x = Kokkos::subview(atomKK->k_x,std::make_pair(0,nall),Kokkos::ALL);
  auto k_v = Kokkos::subview(atomKK->k_v,std::make_pair(0,nall),Kokkos::ALL);
  auto k_f = Kokkos::subview(atomKK->k_f,std::make_pair(0,(!force || force->newton)?nall:nlocal),Kokkos::ALL);
  auto k_tag = Kokkos::subview(atomKK->k_tag,std::make_pair(0,nall));
  auto k_type = Kokkos::subview(atomKK->k_type,std::make_pair(0,nall));
  auto k_mask = Kokkos::subview(atomKK->k_mask,std::make_pair(0,nall));
  auto k_image = Kokkos::subview(atomKK->k_image,std::make_pair(0,nall));
  auto k_q = Kokkos::subview(atomKK->k_q,std::make_pair(0,nall));

  if (space == Device) {
    if (mask & X_MASK) atomKK->k_x.sync<LMPDeviceType>();
    if (mask & V_MASK) atomKK->k_v.sync<LMPDeviceType>();
    if (mask & F_MASK) atomKK->k_f.sync<LMPDeviceType>();
    if (mask & TAG_MASK) atomKK->k_tag.sync<LMPDeviceType>();
    if (mask & TYPE_MASK) atomKK->k_type.sync<LMPDeviceType>();
    if (mask & MASK_MASK) atomKK->k_mask.sync<LMPDeviceType>();
    if (mask & IMAGE_MASK) atomKK->k_image.sync<LMPDeviceType>();
    if (mask & Q_MASK) atomKK->k_q.sync<LMPDeviceType>();
    if (mask & X_MASK) k_x.sync<LMPDeviceType>();
    if (mask & V_MASK) k_v.sync<LMPDeviceType>();
    if (mask & F_MASK) k_f.sync<LMPDeviceType>();
    if (mask & TAG_MASK) k_tag.sync<LMPDeviceType>();
    if (mask & TYPE_MASK) k_type.sync<LMPDeviceType>();
    if (mask & MASK_MASK) k_mask.sync<LMPDeviceType>();
    if (mask & IMAGE_MASK) k_image.sync<LMPDeviceType>();
    if (mask & Q_MASK) k_q.sync<LMPDeviceType>();
  } else {
    if (mask & X_MASK) atomKK->k_x.sync<LMPHostType>();
    if (mask & V_MASK) atomKK->k_v.sync<LMPHostType>();
    if (mask & F_MASK) atomKK->k_f.sync<LMPHostType>();
    if (mask & TAG_MASK) atomKK->k_tag.sync<LMPHostType>();
    if (mask & TYPE_MASK) atomKK->k_type.sync<LMPHostType>();
    if (mask & MASK_MASK) atomKK->k_mask.sync<LMPHostType>();
    if (mask & IMAGE_MASK) atomKK->k_image.sync<LMPHostType>();
    if (mask & Q_MASK) atomKK->k_q.sync<LMPHostType>();
    if (mask & X_MASK) k_x.sync<LMPHostType>();
    if (mask & V_MASK) k_v.sync<LMPHostType>();
    if (mask & F_MASK) k_f.sync<LMPHostType>();
    if (mask & TAG_MASK) k_tag.sync<LMPHostType>();
    if (mask & TYPE_MASK) k_type.sync<LMPHostType>();
    if (mask & MASK_MASK) k_mask.sync<LMPHostType>();
    if (mask & IMAGE_MASK) k_image.sync<LMPHostType>();
    if (mask & Q_MASK) k_q.sync<LMPHostType>();
  }
}

+56 −33
Original line number Diff line number Diff line
@@ -21,10 +21,11 @@
#include "atom_masks.h"
#include "memory_kokkos.h"
#include "error.h"
#include "force.h"

using namespace LAMMPS_NS;

#define DELTA 10000
#define DELTA 16384

/* ---------------------------------------------------------------------- */

@@ -1856,40 +1857,62 @@ bigint AtomVecDPDKokkos::memory_usage()

void AtomVecDPDKokkos::sync(ExecutionSpace space, unsigned int mask)
{
  int nlocal = atom->nlocal;
  int nall = atom->nlocal + atom->nghost;

  // avoid unnecessary data transfer

  auto k_x = Kokkos::subview(atomKK->k_x,std::make_pair(0,nall),Kokkos::ALL);
  auto k_v = Kokkos::subview(atomKK->k_v,std::make_pair(0,nall),Kokkos::ALL);
  auto k_f = Kokkos::subview(atomKK->k_f,std::make_pair(0,(!force || force->newton)?nall:nlocal),Kokkos::ALL);
  auto k_tag = Kokkos::subview(atomKK->k_tag,std::make_pair(0,nall));
  auto k_type = Kokkos::subview(atomKK->k_type,std::make_pair(0,nall));
  auto k_mask = Kokkos::subview(atomKK->k_mask,std::make_pair(0,nall));
  auto k_image = Kokkos::subview(atomKK->k_image,std::make_pair(0,nall));
  auto k_rho = Kokkos::subview(atomKK->k_rho,std::make_pair(0,nall));
  auto k_dpdTheta = Kokkos::subview(atomKK->k_dpdTheta,std::make_pair(0,nall));
  auto k_uCond = Kokkos::subview(atomKK->k_uCond,std::make_pair(0,nall));
  auto k_uMech = Kokkos::subview(atomKK->k_uMech,std::make_pair(0,nall));
  auto k_uChem = Kokkos::subview(atomKK->k_uChem,std::make_pair(0,nall));
  auto k_uCG = Kokkos::subview(atomKK->k_uCG,std::make_pair(0,nall));
  auto k_uCGnew = Kokkos::subview(atomKK->k_uCGnew,std::make_pair(0,nall));
  auto k_duChem = Kokkos::subview(atomKK->k_duChem,std::make_pair(0,nall));
  auto k_dvector = Kokkos::subview(atomKK->k_dvector,std::make_pair(0,nall),Kokkos::ALL);

  if (space == Device) {
    if (mask & X_MASK) atomKK->k_x.sync<LMPDeviceType>();
    if (mask & V_MASK) atomKK->k_v.sync<LMPDeviceType>();
    if (mask & F_MASK) atomKK->k_f.sync<LMPDeviceType>();
    if (mask & TAG_MASK) atomKK->k_tag.sync<LMPDeviceType>();
    if (mask & TYPE_MASK) atomKK->k_type.sync<LMPDeviceType>();
    if (mask & MASK_MASK) atomKK->k_mask.sync<LMPDeviceType>();
    if (mask & IMAGE_MASK) atomKK->k_image.sync<LMPDeviceType>();
    if (mask & DPDRHO_MASK) atomKK->k_rho.sync<LMPDeviceType>();
    if (mask & DPDTHETA_MASK) atomKK->k_dpdTheta.sync<LMPDeviceType>();
    if (mask & UCOND_MASK) atomKK->k_uCond.sync<LMPDeviceType>();
    if (mask & UMECH_MASK) atomKK->k_uMech.sync<LMPDeviceType>();
    if (mask & UCHEM_MASK) atomKK->k_uChem.sync<LMPDeviceType>();
    if (mask & UCG_MASK) atomKK->k_uCG.sync<LMPDeviceType>();
    if (mask & UCGNEW_MASK) atomKK->k_uCGnew.sync<LMPDeviceType>();
    if (mask & DUCHEM_MASK) atomKK->k_duChem.sync<LMPDeviceType>();
    if (mask & DVECTOR_MASK) atomKK->k_dvector.sync<LMPDeviceType>();
    if (mask & X_MASK) k_x.sync<LMPDeviceType>();
    if (mask & V_MASK) k_v.sync<LMPDeviceType>();
    if (mask & F_MASK) k_f.sync<LMPDeviceType>();
    if (mask & TAG_MASK) k_tag.sync<LMPDeviceType>();
    if (mask & TYPE_MASK) k_type.sync<LMPDeviceType>();
    if (mask & MASK_MASK) k_mask.sync<LMPDeviceType>();
    if (mask & IMAGE_MASK) k_image.sync<LMPDeviceType>();
    if (mask & DPDRHO_MASK) k_rho.sync<LMPDeviceType>();
    if (mask & DPDTHETA_MASK) k_dpdTheta.sync<LMPDeviceType>();
    if (mask & UCOND_MASK) k_uCond.sync<LMPDeviceType>();
    if (mask & UMECH_MASK) k_uMech.sync<LMPDeviceType>();
    if (mask & UCHEM_MASK) k_uChem.sync<LMPDeviceType>();
    if (mask & UCG_MASK) k_uCG.sync<LMPDeviceType>();
    if (mask & UCGNEW_MASK) k_uCGnew.sync<LMPDeviceType>();
    if (mask & DUCHEM_MASK) k_duChem.sync<LMPDeviceType>();
    if (mask & DVECTOR_MASK) k_dvector.sync<LMPDeviceType>();
  } else {
    if (mask & X_MASK) atomKK->k_x.sync<LMPHostType>();
    if (mask & V_MASK) atomKK->k_v.sync<LMPHostType>();
    if (mask & F_MASK) atomKK->k_f.sync<LMPHostType>();
    if (mask & TAG_MASK) atomKK->k_tag.sync<LMPHostType>();
    if (mask & TYPE_MASK) atomKK->k_type.sync<LMPHostType>();
    if (mask & MASK_MASK) atomKK->k_mask.sync<LMPHostType>();
    if (mask & IMAGE_MASK) atomKK->k_image.sync<LMPHostType>();
    if (mask & DPDRHO_MASK) atomKK->k_rho.sync<LMPHostType>();
    if (mask & DPDTHETA_MASK) atomKK->k_dpdTheta.sync<LMPHostType>();
    if (mask & UCOND_MASK) atomKK->k_uCond.sync<LMPHostType>();
    if (mask & UMECH_MASK) atomKK->k_uMech.sync<LMPHostType>();
    if (mask & UCHEM_MASK) atomKK->k_uChem.sync<LMPHostType>();
    if (mask & UCG_MASK) atomKK->k_uCG.sync<LMPHostType>();
    if (mask & UCGNEW_MASK) atomKK->k_uCGnew.sync<LMPHostType>();
    if (mask & DUCHEM_MASK) atomKK->k_duChem.sync<LMPHostType>();
    if (mask & DVECTOR_MASK) atomKK->k_dvector.sync<LMPHostType>();
    if (mask & X_MASK) k_x.sync<LMPHostType>();
    if (mask & V_MASK) k_v.sync<LMPHostType>();
    if (mask & F_MASK) k_f.sync<LMPHostType>();
    if (mask & TAG_MASK) k_tag.sync<LMPHostType>();
    if (mask & TYPE_MASK) k_type.sync<LMPHostType>();
    if (mask & MASK_MASK) k_mask.sync<LMPHostType>();
    if (mask & IMAGE_MASK) k_image.sync<LMPHostType>();
    if (mask & DPDRHO_MASK) k_rho.sync<LMPHostType>();
    if (mask & DPDTHETA_MASK) k_dpdTheta.sync<LMPHostType>();
    if (mask & UCOND_MASK) k_uCond.sync<LMPHostType>();
    if (mask & UMECH_MASK) k_uMech.sync<LMPHostType>();
    if (mask & UCHEM_MASK) k_uChem.sync<LMPHostType>();
    if (mask & UCG_MASK) k_uCG.sync<LMPHostType>();
    if (mask & UCGNEW_MASK) k_uCGnew.sync<LMPHostType>();
    if (mask & DUCHEM_MASK) k_duChem.sync<LMPHostType>();
    if (mask & DVECTOR_MASK) k_dvector.sync<LMPHostType>();
  }
}

Loading