forked from lijiext/lammps
Reduce GPU/CPU data transfer
This commit is contained in:
parent
82be3ee32c
commit
a01bce46bb
|
@ -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>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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>();
|
||||
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 {
|
||||
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>();
|
||||
} 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>();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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>();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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>();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
|
@ -1651,89 +1652,126 @@ bigint AtomVecFullKokkos::memory_usage()
|
|||
|
||||
void AtomVecFullKokkos::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);
|
||||
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);
|
||||
auto k_num_dihedral = Kokkos::subview(atomKK->k_num_dihedral,std::make_pair(0,nall));
|
||||
auto k_dihedral_type = Kokkos::subview(atomKK->k_dihedral_type,std::make_pair(0,nall),Kokkos::ALL);
|
||||
auto k_dihedral_atom1 = Kokkos::subview(atomKK->k_dihedral_atom1,std::make_pair(0,nall),Kokkos::ALL);
|
||||
auto k_dihedral_atom2 = Kokkos::subview(atomKK->k_dihedral_atom2,std::make_pair(0,nall),Kokkos::ALL);
|
||||
auto k_dihedral_atom3 = Kokkos::subview(atomKK->k_dihedral_atom3,std::make_pair(0,nall),Kokkos::ALL);
|
||||
auto k_dihedral_atom4 = Kokkos::subview(atomKK->k_dihedral_atom4,std::make_pair(0,nall),Kokkos::ALL);
|
||||
auto k_num_improper = Kokkos::subview(atomKK->k_num_improper,std::make_pair(0,nall));
|
||||
auto k_improper_type = Kokkos::subview(atomKK->k_improper_type,std::make_pair(0,nall),Kokkos::ALL);
|
||||
auto k_improper_atom1 = Kokkos::subview(atomKK->k_improper_atom1,std::make_pair(0,nall),Kokkos::ALL);
|
||||
auto k_improper_atom2 = Kokkos::subview(atomKK->k_improper_atom2,std::make_pair(0,nall),Kokkos::ALL);
|
||||
auto k_improper_atom3 = Kokkos::subview(atomKK->k_improper_atom3,std::make_pair(0,nall),Kokkos::ALL);
|
||||
auto k_improper_atom4 = Kokkos::subview(atomKK->k_improper_atom4,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 & Q_MASK) atomKK->k_q.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 & Q_MASK) k_q.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>();
|
||||
}
|
||||
if (mask & DIHEDRAL_MASK) {
|
||||
atomKK->k_num_dihedral.sync<LMPDeviceType>();
|
||||
atomKK->k_dihedral_type.sync<LMPDeviceType>();
|
||||
atomKK->k_dihedral_atom1.sync<LMPDeviceType>();
|
||||
atomKK->k_dihedral_atom2.sync<LMPDeviceType>();
|
||||
atomKK->k_dihedral_atom3.sync<LMPDeviceType>();
|
||||
atomKK->k_dihedral_atom4.sync<LMPDeviceType>();
|
||||
k_num_dihedral.sync<LMPDeviceType>();
|
||||
k_dihedral_type.sync<LMPDeviceType>();
|
||||
k_dihedral_atom1.sync<LMPDeviceType>();
|
||||
k_dihedral_atom2.sync<LMPDeviceType>();
|
||||
k_dihedral_atom3.sync<LMPDeviceType>();
|
||||
k_dihedral_atom4.sync<LMPDeviceType>();
|
||||
}
|
||||
if (mask & IMPROPER_MASK) {
|
||||
atomKK->k_num_improper.sync<LMPDeviceType>();
|
||||
atomKK->k_improper_type.sync<LMPDeviceType>();
|
||||
atomKK->k_improper_atom1.sync<LMPDeviceType>();
|
||||
atomKK->k_improper_atom2.sync<LMPDeviceType>();
|
||||
atomKK->k_improper_atom3.sync<LMPDeviceType>();
|
||||
atomKK->k_improper_atom4.sync<LMPDeviceType>();
|
||||
k_num_improper.sync<LMPDeviceType>();
|
||||
k_improper_type.sync<LMPDeviceType>();
|
||||
k_improper_atom1.sync<LMPDeviceType>();
|
||||
k_improper_atom2.sync<LMPDeviceType>();
|
||||
k_improper_atom3.sync<LMPDeviceType>();
|
||||
k_improper_atom4.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 & 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 & Q_MASK) k_q.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>();
|
||||
}
|
||||
if (mask & DIHEDRAL_MASK) {
|
||||
atomKK->k_num_dihedral.sync<LMPHostType>();
|
||||
atomKK->k_dihedral_type.sync<LMPHostType>();
|
||||
atomKK->k_dihedral_atom1.sync<LMPHostType>();
|
||||
atomKK->k_dihedral_atom2.sync<LMPHostType>();
|
||||
atomKK->k_dihedral_atom3.sync<LMPHostType>();
|
||||
atomKK->k_dihedral_atom4.sync<LMPHostType>();
|
||||
k_num_dihedral.sync<LMPHostType>();
|
||||
k_dihedral_type.sync<LMPHostType>();
|
||||
k_dihedral_atom1.sync<LMPHostType>();
|
||||
k_dihedral_atom2.sync<LMPHostType>();
|
||||
k_dihedral_atom3.sync<LMPHostType>();
|
||||
k_dihedral_atom4.sync<LMPHostType>();
|
||||
}
|
||||
if (mask & IMPROPER_MASK) {
|
||||
atomKK->k_num_improper.sync<LMPHostType>();
|
||||
atomKK->k_improper_type.sync<LMPHostType>();
|
||||
atomKK->k_improper_atom1.sync<LMPHostType>();
|
||||
atomKK->k_improper_atom2.sync<LMPHostType>();
|
||||
atomKK->k_improper_atom3.sync<LMPHostType>();
|
||||
atomKK->k_improper_atom4.sync<LMPHostType>();
|
||||
k_num_improper.sync<LMPHostType>();
|
||||
k_improper_type.sync<LMPHostType>();
|
||||
k_improper_atom1.sync<LMPHostType>();
|
||||
k_improper_atom2.sync<LMPHostType>();
|
||||
k_improper_atom3.sync<LMPHostType>();
|
||||
k_improper_atom4.sync<LMPHostType>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
|
@ -2049,87 +2050,123 @@ bigint AtomVecMolecularKokkos::memory_usage()
|
|||
|
||||
void AtomVecMolecularKokkos::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);
|
||||
auto k_num_dihedral = Kokkos::subview(atomKK->k_num_dihedral,std::make_pair(0,nall));
|
||||
auto k_dihedral_type = Kokkos::subview(atomKK->k_dihedral_type,std::make_pair(0,nall),Kokkos::ALL);
|
||||
auto k_dihedral_atom1 = Kokkos::subview(atomKK->k_dihedral_atom1,std::make_pair(0,nall),Kokkos::ALL);
|
||||
auto k_dihedral_atom2 = Kokkos::subview(atomKK->k_dihedral_atom2,std::make_pair(0,nall),Kokkos::ALL);
|
||||
auto k_dihedral_atom3 = Kokkos::subview(atomKK->k_dihedral_atom3,std::make_pair(0,nall),Kokkos::ALL);
|
||||
auto k_dihedral_atom4 = Kokkos::subview(atomKK->k_dihedral_atom4,std::make_pair(0,nall),Kokkos::ALL);
|
||||
auto k_num_improper = Kokkos::subview(atomKK->k_num_improper,std::make_pair(0,nall));
|
||||
auto k_improper_type = Kokkos::subview(atomKK->k_improper_type,std::make_pair(0,nall),Kokkos::ALL);
|
||||
auto k_improper_atom1 = Kokkos::subview(atomKK->k_improper_atom1,std::make_pair(0,nall),Kokkos::ALL);
|
||||
auto k_improper_atom2 = Kokkos::subview(atomKK->k_improper_atom2,std::make_pair(0,nall),Kokkos::ALL);
|
||||
auto k_improper_atom3 = Kokkos::subview(atomKK->k_improper_atom3,std::make_pair(0,nall),Kokkos::ALL);
|
||||
auto k_improper_atom4 = Kokkos::subview(atomKK->k_improper_atom4,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>();
|
||||
}
|
||||
if (mask & DIHEDRAL_MASK) {
|
||||
atomKK->k_num_dihedral.sync<LMPDeviceType>();
|
||||
atomKK->k_dihedral_type.sync<LMPDeviceType>();
|
||||
atomKK->k_dihedral_atom1.sync<LMPDeviceType>();
|
||||
atomKK->k_dihedral_atom2.sync<LMPDeviceType>();
|
||||
atomKK->k_dihedral_atom3.sync<LMPDeviceType>();
|
||||
atomKK->k_dihedral_atom4.sync<LMPDeviceType>();
|
||||
k_num_dihedral.sync<LMPDeviceType>();
|
||||
k_dihedral_type.sync<LMPDeviceType>();
|
||||
k_dihedral_atom1.sync<LMPDeviceType>();
|
||||
k_dihedral_atom2.sync<LMPDeviceType>();
|
||||
k_dihedral_atom3.sync<LMPDeviceType>();
|
||||
k_dihedral_atom4.sync<LMPDeviceType>();
|
||||
}
|
||||
if (mask & IMPROPER_MASK) {
|
||||
atomKK->k_num_improper.sync<LMPDeviceType>();
|
||||
atomKK->k_improper_type.sync<LMPDeviceType>();
|
||||
atomKK->k_improper_atom1.sync<LMPDeviceType>();
|
||||
atomKK->k_improper_atom2.sync<LMPDeviceType>();
|
||||
atomKK->k_improper_atom3.sync<LMPDeviceType>();
|
||||
atomKK->k_improper_atom4.sync<LMPDeviceType>();
|
||||
k_num_improper.sync<LMPDeviceType>();
|
||||
k_improper_type.sync<LMPDeviceType>();
|
||||
k_improper_atom1.sync<LMPDeviceType>();
|
||||
k_improper_atom2.sync<LMPDeviceType>();
|
||||
k_improper_atom3.sync<LMPDeviceType>();
|
||||
k_improper_atom4.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>();
|
||||
}
|
||||
if (mask & DIHEDRAL_MASK) {
|
||||
atomKK->k_num_dihedral.sync<LMPHostType>();
|
||||
atomKK->k_dihedral_type.sync<LMPHostType>();
|
||||
atomKK->k_dihedral_atom1.sync<LMPHostType>();
|
||||
atomKK->k_dihedral_atom2.sync<LMPHostType>();
|
||||
atomKK->k_dihedral_atom3.sync<LMPHostType>();
|
||||
atomKK->k_dihedral_atom4.sync<LMPHostType>();
|
||||
k_num_dihedral.sync<LMPHostType>();
|
||||
k_dihedral_type.sync<LMPHostType>();
|
||||
k_dihedral_atom1.sync<LMPHostType>();
|
||||
k_dihedral_atom2.sync<LMPHostType>();
|
||||
k_dihedral_atom3.sync<LMPHostType>();
|
||||
k_dihedral_atom4.sync<LMPHostType>();
|
||||
}
|
||||
if (mask & IMPROPER_MASK) {
|
||||
atomKK->k_num_improper.sync<LMPHostType>();
|
||||
atomKK->k_improper_type.sync<LMPHostType>();
|
||||
atomKK->k_improper_atom1.sync<LMPHostType>();
|
||||
atomKK->k_improper_atom2.sync<LMPHostType>();
|
||||
atomKK->k_improper_atom3.sync<LMPHostType>();
|
||||
atomKK->k_improper_atom4.sync<LMPHostType>();
|
||||
k_num_improper.sync<LMPHostType>();
|
||||
k_improper_type.sync<LMPHostType>();
|
||||
k_improper_atom1.sync<LMPHostType>();
|
||||
k_improper_atom2.sync<LMPHostType>();
|
||||
k_improper_atom3.sync<LMPHostType>();
|
||||
k_improper_atom4.sync<LMPHostType>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,10 +27,11 @@
|
|||
#include "memory.h"
|
||||
#include "error.h"
|
||||
#include "memory_kokkos.h"
|
||||
#include "force.h"
|
||||
|
||||
using namespace LAMMPS_NS;
|
||||
|
||||
#define DELTA 10000
|
||||
#define DELTA 16384
|
||||
|
||||
static const double MY_PI = 3.14159265358979323846; // pi
|
||||
|
||||
|
@ -2791,30 +2792,47 @@ bigint AtomVecSphereKokkos::memory_usage()
|
|||
|
||||
void AtomVecSphereKokkos::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_radius = Kokkos::subview(atomKK->k_radius,std::make_pair(0,nall));
|
||||
auto k_rmass = Kokkos::subview(atomKK->k_rmass,std::make_pair(0,nall));
|
||||
auto k_omega = Kokkos::subview(atomKK->k_omega,std::make_pair(0,nall),Kokkos::ALL);
|
||||
auto k_torque = Kokkos::subview(atomKK->k_torque,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 & RADIUS_MASK) atomKK->k_radius.sync<LMPDeviceType>();
|
||||
if (mask & RMASS_MASK) atomKK->k_rmass.sync<LMPDeviceType>();
|
||||
if (mask & OMEGA_MASK) atomKK->k_omega.sync<LMPDeviceType>();
|
||||
if (mask & TORQUE_MASK) atomKK->k_torque.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 & RADIUS_MASK) k_radius.sync<LMPDeviceType>();
|
||||
if (mask & RMASS_MASK) k_rmass.sync<LMPDeviceType>();
|
||||
if (mask & OMEGA_MASK) k_omega.sync<LMPDeviceType>();
|
||||
if (mask & TORQUE_MASK) k_torque.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 & RADIUS_MASK) atomKK->k_radius.sync<LMPHostType>();
|
||||
if (mask & RMASS_MASK) atomKK->k_rmass.sync<LMPHostType>();
|
||||
if (mask & OMEGA_MASK) atomKK->k_omega.sync<LMPHostType>();
|
||||
if (mask & TORQUE_MASK) atomKK->k_torque.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 & RADIUS_MASK) k_radius.sync<LMPHostType>();
|
||||
if (mask & RMASS_MASK) k_rmass.sync<LMPHostType>();
|
||||
if (mask & OMEGA_MASK) k_omega.sync<LMPHostType>();
|
||||
if (mask & TORQUE_MASK) k_torque.sync<LMPHostType>();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue