Reduce DELTA and revert subview change

This commit is contained in:
Stan Moore 2019-04-09 14:40:20 -06:00
parent a01bce46bb
commit 618547b72e
8 changed files with 292 additions and 475 deletions

View File

@ -21,11 +21,10 @@
#include "atom_masks.h"
#include "memory_kokkos.h"
#include "error.h"
#include "force.h"
using namespace LAMMPS_NS;
#define DELTA 16384
#define DELTA 10
/* ---------------------------------------------------------------------- */
@ -60,7 +59,8 @@ AtomVecAngleKokkos::AtomVecAngleKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp)
void AtomVecAngleKokkos::grow(int n)
{
if (n == 0) nmax += DELTA;
int step = MAX(DELTA,nmax*0.01);
if (n == 0) nmax += step;
else nmax = n;
atomKK->nmax = nmax;
if (nmax < 0 || nmax > MAXSMALLINT)
@ -1764,79 +1764,55 @@ 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) 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 & 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 & SPECIAL_MASK) {
k_nspecial.sync<LMPDeviceType>();
k_special.sync<LMPDeviceType>();
atomKK->k_nspecial.sync<LMPDeviceType>();
atomKK->k_special.sync<LMPDeviceType>();
}
if (mask & BOND_MASK) {
k_num_bond.sync<LMPDeviceType>();
k_bond_type.sync<LMPDeviceType>();
k_bond_atom.sync<LMPDeviceType>();
atomKK->k_num_bond.sync<LMPDeviceType>();
atomKK->k_bond_type.sync<LMPDeviceType>();
atomKK->k_bond_atom.sync<LMPDeviceType>();
}
if (mask & ANGLE_MASK) {
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>();
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>();
}
} else {
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 & 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 & SPECIAL_MASK) {
k_nspecial.sync<LMPHostType>();
k_special.sync<LMPHostType>();
atomKK->k_nspecial.sync<LMPHostType>();
atomKK->k_special.sync<LMPHostType>();
}
if (mask & BOND_MASK) {
k_num_bond.sync<LMPHostType>();
k_bond_type.sync<LMPHostType>();
k_bond_atom.sync<LMPHostType>();
atomKK->k_num_bond.sync<LMPHostType>();
atomKK->k_bond_type.sync<LMPHostType>();
atomKK->k_bond_atom.sync<LMPHostType>();
}
if (mask & ANGLE_MASK) {
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>();
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>();
}
}
}

View File

@ -21,11 +21,10 @@
#include "atom_masks.h"
#include "memory_kokkos.h"
#include "error.h"
#include "force.h"
using namespace LAMMPS_NS;
#define DELTA 16384
#define DELTA 10
/* ---------------------------------------------------------------------- */
@ -56,7 +55,8 @@ AtomVecAtomicKokkos::AtomVecAtomicKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp)
void AtomVecAtomicKokkos::grow(int n)
{
if (n == 0) nmax += DELTA;
int step = MAX(DELTA,nmax*0.01);
if (n == 0) nmax += step;
else nmax = n;
atomKK->nmax = nmax;
if (nmax < 0 || nmax > MAXSMALLINT)
@ -898,35 +898,22 @@ 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) 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 & 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>();
} else {
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 & 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>();
}
}

View File

@ -21,11 +21,10 @@
#include "atom_masks.h"
#include "memory_kokkos.h"
#include "error.h"
#include "force.h"
using namespace LAMMPS_NS;
#define DELTA 16384
#define DELTA 10
/* ---------------------------------------------------------------------- */
@ -57,7 +56,8 @@ AtomVecBondKokkos::AtomVecBondKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp)
void AtomVecBondKokkos::grow(int n)
{
if (n == 0) nmax += DELTA;
int step = MAX(DELTA,nmax*0.01);
if (n == 0) nmax += step;
else nmax = n;
atomKK->nmax = nmax;
if (nmax < 0 || nmax > MAXSMALLINT)
@ -1176,61 +1176,41 @@ 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) 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 & 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 & SPECIAL_MASK) {
k_nspecial.sync<LMPDeviceType>();
k_special.sync<LMPDeviceType>();
atomKK->k_nspecial.sync<LMPDeviceType>();
atomKK->k_special.sync<LMPDeviceType>();
}
if (mask & BOND_MASK) {
k_num_bond.sync<LMPDeviceType>();
k_bond_type.sync<LMPDeviceType>();
k_bond_atom.sync<LMPDeviceType>();
atomKK->k_num_bond.sync<LMPDeviceType>();
atomKK->k_bond_type.sync<LMPDeviceType>();
atomKK->k_bond_atom.sync<LMPDeviceType>();
}
} else {
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 & 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 & SPECIAL_MASK) {
k_nspecial.sync<LMPHostType>();
k_special.sync<LMPHostType>();
atomKK->k_nspecial.sync<LMPHostType>();
atomKK->k_special.sync<LMPHostType>();
}
if (mask & BOND_MASK) {
k_num_bond.sync<LMPHostType>();
k_bond_type.sync<LMPHostType>();
k_bond_atom.sync<LMPHostType>();
atomKK->k_num_bond.sync<LMPHostType>();
atomKK->k_bond_type.sync<LMPHostType>();
atomKK->k_bond_atom.sync<LMPHostType>();
}
}
}

View File

@ -21,11 +21,10 @@
#include "atom_masks.h"
#include "memory_kokkos.h"
#include "error.h"
#include "force.h"
using namespace LAMMPS_NS;
#define DELTA 16384
#define DELTA 10
/* ---------------------------------------------------------------------- */
@ -59,7 +58,8 @@ AtomVecChargeKokkos::AtomVecChargeKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp)
void AtomVecChargeKokkos::grow(int n)
{
if (n == 0) nmax += DELTA;
int step = MAX(DELTA,nmax*0.01);
if (n == 0) nmax += step;
else nmax = n;
atomKK->nmax = nmax;
if (nmax < 0 || nmax > MAXSMALLINT)
@ -1069,38 +1069,24 @@ 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) 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 & 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>();
} else {
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 & 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>();
}
}

View File

@ -21,11 +21,10 @@
#include "atom_masks.h"
#include "memory_kokkos.h"
#include "error.h"
#include "force.h"
using namespace LAMMPS_NS;
#define DELTA 16384
#define DELTA 10
/* ---------------------------------------------------------------------- */
@ -61,7 +60,8 @@ AtomVecDPDKokkos::AtomVecDPDKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp)
void AtomVecDPDKokkos::grow(int n)
{
if (n == 0) nmax += DELTA;
int step = MAX(DELTA,nmax*0.01);
if (n == 0) nmax += step;
else nmax = n;
atomKK->nmax = nmax;
if (nmax < 0 || nmax > MAXSMALLINT)
@ -1857,62 +1857,40 @@ 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) 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>();
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>();
} else {
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>();
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>();
}
}

View File

@ -21,11 +21,10 @@
#include "atom_masks.h"
#include "memory_kokkos.h"
#include "error.h"
#include "force.h"
using namespace LAMMPS_NS;
#define DELTA 16384
#define DELTA 10
/* ---------------------------------------------------------------------- */
@ -59,7 +58,8 @@ AtomVecFullKokkos::AtomVecFullKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp)
void AtomVecFullKokkos::grow(int n)
{
if (n == 0) nmax += DELTA;
int step = MAX(DELTA,nmax*0.01);
if (n == 0) nmax += step;
else nmax = n;
atomKK->nmax = nmax;
if (nmax < 0 || nmax > MAXSMALLINT)
@ -1652,126 +1652,89 @@ 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) 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 & 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 & SPECIAL_MASK) {
k_nspecial.sync<LMPDeviceType>();
k_special.sync<LMPDeviceType>();
atomKK->k_nspecial.sync<LMPDeviceType>();
atomKK->k_special.sync<LMPDeviceType>();
}
if (mask & BOND_MASK) {
k_num_bond.sync<LMPDeviceType>();
k_bond_type.sync<LMPDeviceType>();
k_bond_atom.sync<LMPDeviceType>();
atomKK->k_num_bond.sync<LMPDeviceType>();
atomKK->k_bond_type.sync<LMPDeviceType>();
atomKK->k_bond_atom.sync<LMPDeviceType>();
}
if (mask & ANGLE_MASK) {
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>();
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>();
}
if (mask & DIHEDRAL_MASK) {
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>();
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>();
}
if (mask & IMPROPER_MASK) {
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>();
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>();
}
} else {
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 & 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 & SPECIAL_MASK) {
k_nspecial.sync<LMPHostType>();
k_special.sync<LMPHostType>();
atomKK->k_nspecial.sync<LMPHostType>();
atomKK->k_special.sync<LMPHostType>();
}
if (mask & BOND_MASK) {
k_num_bond.sync<LMPHostType>();
k_bond_type.sync<LMPHostType>();
k_bond_atom.sync<LMPHostType>();
atomKK->k_num_bond.sync<LMPHostType>();
atomKK->k_bond_type.sync<LMPHostType>();
atomKK->k_bond_atom.sync<LMPHostType>();
}
if (mask & ANGLE_MASK) {
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>();
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>();
}
if (mask & DIHEDRAL_MASK) {
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>();
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>();
}
if (mask & IMPROPER_MASK) {
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>();
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>();
}
}
}

View File

@ -21,11 +21,10 @@
#include "atom_masks.h"
#include "memory_kokkos.h"
#include "error.h"
#include "force.h"
using namespace LAMMPS_NS;
#define DELTA 16384
#define DELTA 10
/* ---------------------------------------------------------------------- */
@ -59,7 +58,8 @@ AtomVecMolecularKokkos::AtomVecMolecularKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp)
void AtomVecMolecularKokkos::grow(int n)
{
if (n == 0) nmax += DELTA;
int step = MAX(DELTA,nmax*0.01);
if (n == 0) nmax += step;
else nmax = n;
atomKK->nmax = nmax;
if (nmax < 0 || nmax > MAXSMALLINT)
@ -2050,123 +2050,87 @@ 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) 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 & 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 & SPECIAL_MASK) {
k_nspecial.sync<LMPDeviceType>();
k_special.sync<LMPDeviceType>();
atomKK->k_nspecial.sync<LMPDeviceType>();
atomKK->k_special.sync<LMPDeviceType>();
}
if (mask & BOND_MASK) {
k_num_bond.sync<LMPDeviceType>();
k_bond_type.sync<LMPDeviceType>();
k_bond_atom.sync<LMPDeviceType>();
atomKK->k_num_bond.sync<LMPDeviceType>();
atomKK->k_bond_type.sync<LMPDeviceType>();
atomKK->k_bond_atom.sync<LMPDeviceType>();
}
if (mask & ANGLE_MASK) {
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>();
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>();
}
if (mask & DIHEDRAL_MASK) {
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>();
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>();
}
if (mask & IMPROPER_MASK) {
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>();
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>();
}
} else {
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 & 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 & SPECIAL_MASK) {
k_nspecial.sync<LMPHostType>();
k_special.sync<LMPHostType>();
atomKK->k_nspecial.sync<LMPHostType>();
atomKK->k_special.sync<LMPHostType>();
}
if (mask & BOND_MASK) {
k_num_bond.sync<LMPHostType>();
k_bond_type.sync<LMPHostType>();
k_bond_atom.sync<LMPHostType>();
atomKK->k_num_bond.sync<LMPHostType>();
atomKK->k_bond_type.sync<LMPHostType>();
atomKK->k_bond_atom.sync<LMPHostType>();
}
if (mask & ANGLE_MASK) {
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>();
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>();
}
if (mask & DIHEDRAL_MASK) {
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>();
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>();
}
if (mask & IMPROPER_MASK) {
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>();
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>();
}
}
}

View File

@ -27,11 +27,10 @@
#include "memory.h"
#include "error.h"
#include "memory_kokkos.h"
#include "force.h"
using namespace LAMMPS_NS;
#define DELTA 16384
#define DELTA 10
static const double MY_PI = 3.14159265358979323846; // pi
@ -94,7 +93,8 @@ void AtomVecSphereKokkos::init()
void AtomVecSphereKokkos::grow(int n)
{
if (n == 0) nmax += DELTA;
int step = MAX(DELTA,nmax*0.01);
if (n == 0) nmax += step;
else nmax = n;
atom->nmax = nmax;
if (nmax < 0 || nmax > MAXSMALLINT)
@ -2792,47 +2792,30 @@ 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) 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>();
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>();
} else {
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>();
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>();
}
}