191 lines
8.8 KiB
Diff
191 lines
8.8 KiB
Diff
diff --git a/src/KOKKOS/atom_vec_kokkos.cpp b/src/KOKKOS/atom_vec_kokkos.cpp
|
|
index d54cc2c3af..f81add90f1 100644
|
|
--- a/src/KOKKOS/atom_vec_kokkos.cpp
|
|
+++ b/src/KOKKOS/atom_vec_kokkos.cpp
|
|
@@ -824,10 +824,12 @@ void AtomVecKokkos::unpack_reverse_kokkos(const int &n,
|
|
// Choose correct reverse UnPackReverse kernel
|
|
|
|
if (lmp->kokkos->reverse_comm_on_host) {
|
|
+ atomKK->sync(Host,F_MASK);
|
|
struct AtomVecKokkos_UnPackReverse<LMPHostType> f(atomKK->k_f,buf,list);
|
|
Kokkos::parallel_for(n,f);
|
|
atomKK->modified(Host,F_MASK);
|
|
} else {
|
|
+ atomKK->sync(Device,F_MASK);
|
|
struct AtomVecKokkos_UnPackReverse<LMPDeviceType> f(atomKK->k_f,buf,list);
|
|
Kokkos::parallel_for(n,f);
|
|
atomKK->modified(Device,F_MASK);
|
|
diff --git a/src/KOKKOS/fix_property_atom_kokkos.cpp b/src/KOKKOS/fix_property_atom_kokkos.cpp
|
|
index 10cea48e90..a38af04f07 100644
|
|
--- a/src/KOKKOS/fix_property_atom_kokkos.cpp
|
|
+++ b/src/KOKKOS/fix_property_atom_kokkos.cpp
|
|
@@ -83,16 +83,19 @@ void FixPropertyAtomKokkos::grow_arrays(int nmax)
|
|
for (int nv = 0; nv < nvalue; nv++) {
|
|
if (styles[nv] == MOLECULE) {
|
|
atomKK->sync(Device,MOLECULE_MASK);
|
|
- memoryKK->grow_kokkos(atomKK->k_molecule,atom->molecule,nmax,"atom:molecule");
|
|
atomKK->modified(Device,MOLECULE_MASK);
|
|
+ memoryKK->grow_kokkos(atomKK->k_molecule,atom->molecule,nmax,"atom:molecule");
|
|
+ atomKK->sync(Host,MOLECULE_MASK);
|
|
} else if (styles[nv] == CHARGE) {
|
|
atomKK->sync(Device,Q_MASK);
|
|
- memoryKK->grow_kokkos(atomKK->k_q,atom->q,nmax,"atom:q");
|
|
atomKK->modified(Device,Q_MASK);
|
|
+ memoryKK->grow_kokkos(atomKK->k_q,atom->q,nmax,"atom:q");
|
|
+ atomKK->sync(Host,Q_MASK);
|
|
} else if (styles[nv] == RMASS) {
|
|
atomKK->sync(Device,RMASS_MASK);
|
|
- memoryKK->grow_kokkos(atomKK->k_rmass,atom->rmass,nmax,"atom:rmass");
|
|
atomKK->modified(Device,RMASS_MASK);
|
|
+ memoryKK->grow_kokkos(atomKK->k_rmass,atom->rmass,nmax,"atom:rmass");
|
|
+ atomKK->sync(Host,RMASS_MASK);
|
|
} else if (styles[nv] == TEMPERATURE) {
|
|
memory->grow(atom->temperature, nmax, "atom:temperature");
|
|
size_t nbytes = (nmax - nmax_old) * sizeof(double);
|
|
@@ -107,9 +110,10 @@ void FixPropertyAtomKokkos::grow_arrays(int nmax)
|
|
memset(&atom->ivector[index[nv]][nmax_old],0,nbytes);
|
|
} else if (styles[nv] == DVEC) {
|
|
atomKK->sync(Device,DVECTOR_MASK);
|
|
+ atomKK->modified(Device,DVECTOR_MASK);
|
|
memoryKK->grow_kokkos(atomKK->k_dvector,atom->dvector,atomKK->k_dvector.extent(0),nmax,
|
|
"atom:dvector");
|
|
- atomKK->modified(Device,DVECTOR_MASK);
|
|
+ atomKK->sync(Host,DVECTOR_MASK);
|
|
} else if (styles[nv] == IARRAY) {
|
|
memory->grow(atom->iarray[index[nv]], nmax, cols[nv], "atom:iarray");
|
|
size_t nbytes = (size_t) (nmax - nmax_old) * cols[nv] * sizeof(int);
|
|
diff --git a/src/KOKKOS/fix_reaxff_species_kokkos.cpp b/src/KOKKOS/fix_reaxff_species_kokkos.cpp
|
|
index 757ba42c52..773c836243 100644
|
|
--- a/src/KOKKOS/fix_reaxff_species_kokkos.cpp
|
|
+++ b/src/KOKKOS/fix_reaxff_species_kokkos.cpp
|
|
@@ -38,13 +38,17 @@ using namespace FixConst;
|
|
FixReaxFFSpeciesKokkos::FixReaxFFSpeciesKokkos(LAMMPS *lmp, int narg, char **arg) :
|
|
FixReaxFFSpecies(lmp, narg, arg)
|
|
{
|
|
- kokkosable = 1;
|
|
+ // not all functions in FixReaxFFSpecies are ported to KOKKOS
|
|
+ // so set kokkosable flag to zero
|
|
+
|
|
+ kokkosable = 0;
|
|
+
|
|
atomKK = (AtomKokkos *) atom;
|
|
|
|
// NOTE: Could improve performance if a Kokkos version of ComputeSpecAtom is added
|
|
|
|
- datamask_read = X_MASK | V_MASK | Q_MASK | MASK_MASK;
|
|
- datamask_modify = EMPTY_MASK;
|
|
+ datamask_read = X_MASK | V_MASK | Q_MASK | MASK_MASK | DVECTOR_MASK | TYPE_MASK | RMASS_MASK | TAG_MASK;
|
|
+ datamask_modify = DVECTOR_MASK;
|
|
}
|
|
|
|
/* ---------------------------------------------------------------------- */
|
|
diff --git a/src/KOKKOS/fix_shake_kokkos.cpp b/src/KOKKOS/fix_shake_kokkos.cpp
|
|
index 05873120d7..505ab6b25b 100644
|
|
--- a/src/KOKKOS/fix_shake_kokkos.cpp
|
|
+++ b/src/KOKKOS/fix_shake_kokkos.cpp
|
|
@@ -1437,6 +1437,10 @@ void FixShakeKokkos<DeviceType>::stats()
|
|
template<class DeviceType>
|
|
void FixShakeKokkos<DeviceType>::grow_arrays(int nmax)
|
|
{
|
|
+ k_shake_flag.sync_device();
|
|
+ k_shake_atom.sync_device();
|
|
+ k_shake_type.sync_device();
|
|
+
|
|
memoryKK->grow_kokkos(k_shake_flag,shake_flag,nmax,"shake:shake_flag");
|
|
memoryKK->grow_kokkos(k_shake_atom,shake_atom,nmax,4,"shake:shake_atom");
|
|
memoryKK->grow_kokkos(k_shake_type,shake_type,nmax,3,"shake:shake_type");
|
|
diff --git a/src/KOKKOS/mliap_descriptor_so3_kokkos.cpp b/src/KOKKOS/mliap_descriptor_so3_kokkos.cpp
|
|
index 815d2696a9..55537f456b 100644
|
|
--- a/src/KOKKOS/mliap_descriptor_so3_kokkos.cpp
|
|
+++ b/src/KOKKOS/mliap_descriptor_so3_kokkos.cpp
|
|
@@ -24,6 +24,7 @@
|
|
#include "mliap_data_kokkos.h"
|
|
#include "mliap_so3_kokkos.h"
|
|
#include "pair_mliap.h"
|
|
+#include "atom_masks.h"
|
|
|
|
using namespace LAMMPS_NS;
|
|
|
|
@@ -70,7 +71,9 @@ void MLIAPDescriptorSO3Kokkos<DeviceType>::compute_forces(class MLIAPData *data_
|
|
so3ptr_kokkos->spectrum_dxdr(data->nlistatoms, data->k_numneighs, data->k_jelems, this->k_wjelem, data->k_rij, data->k_ij,
|
|
nmax, lmax, rcutfac, alpha, npairs, data->ndescriptors);
|
|
|
|
+ atomKK->sync(ExecutionSpaceFromDevice<DeviceType>::space,F_MASK);
|
|
auto d_f = atomKK->k_f.view<DeviceType>();
|
|
+
|
|
auto d_iatoms = data->k_iatoms.template view<DeviceType>();
|
|
auto d_jatoms = data->k_jatoms.template view<DeviceType>();
|
|
auto d_betas = data->k_betas.template view<DeviceType>();
|
|
@@ -78,8 +81,10 @@ void MLIAPDescriptorSO3Kokkos<DeviceType>::compute_forces(class MLIAPData *data_
|
|
auto d_ij = data->k_ij.template view<DeviceType>();
|
|
auto ndescriptors = data->ndescriptors;
|
|
auto d_dplist_r = so3ptr_kokkos->k_dplist_r;
|
|
- auto vflag=data->vflag;
|
|
- int vflag_either=data->k_pairmliap->vflag_either, vflag_global=data->pairmliap->vflag_global, vflag_atom=data->pairmliap->vflag_atom;
|
|
+ auto vflag = data->vflag;
|
|
+ int vflag_either = data->pairmliap->vflag_either;
|
|
+ int vflag_global = data->pairmliap->vflag_global;
|
|
+ int vflag_atom = data->pairmliap->vflag_atom;
|
|
auto d_vatom = data->k_pairmliap->k_vatom.template view<DeviceType>();
|
|
Kokkos::View<double[6], DeviceType> virial("virial");
|
|
data->k_pairmliap->k_vatom.template modify<LMPHostType>();
|
|
diff --git a/src/KOKKOS/mliap_unified_kokkos.cpp b/src/KOKKOS/mliap_unified_kokkos.cpp
|
|
index bf7d6b46d5..98da39c59d 100644
|
|
--- a/src/KOKKOS/mliap_unified_kokkos.cpp
|
|
+++ b/src/KOKKOS/mliap_unified_kokkos.cpp
|
|
@@ -296,7 +296,8 @@ void LAMMPS_NS::update_pair_forces(MLIAPDataKokkosDevice *data, double *fij)
|
|
auto j_atoms = data->jatoms;
|
|
auto vflag = data->vflag;
|
|
auto rij = data->rij;
|
|
- int vflag_global=data->pairmliap->vflag_global, vflag_atom=data->pairmliap->vflag_atom;
|
|
+ int vflag_global = data->pairmliap->vflag_global;
|
|
+ int vflag_atom = data->pairmliap->vflag_atom;
|
|
if (vflag_atom) {
|
|
data->pairmliap->k_vatom.template modify<LMPHostType>();
|
|
data->pairmliap->k_vatom.template sync<LMPDeviceType>();
|
|
@@ -355,8 +356,8 @@ void LAMMPS_NS::update_pair_forces(MLIAPDataKokkosDevice *data, double *fij)
|
|
if (vflag_global) {
|
|
Kokkos::View<double[6], LMPHostType> h_virial("h_virial");
|
|
Kokkos::deep_copy(h_virial,virial);
|
|
- for (int i=0;i<6;++i)
|
|
- data->pairmliap->virial[i]+=h_virial[i];
|
|
+ for (int i = 0; i < 6; ++i)
|
|
+ data->pairmliap->virial[i] += h_virial[i];
|
|
}
|
|
if (vflag_atom) {
|
|
data->pairmliap->k_vatom.template modify<LMPDeviceType>();
|
|
diff --git a/src/KOKKOS/pair_mliap_kokkos.cpp b/src/KOKKOS/pair_mliap_kokkos.cpp
|
|
index cbdf98ddaa..9a722bedbe 100644
|
|
--- a/src/KOKKOS/pair_mliap_kokkos.cpp
|
|
+++ b/src/KOKKOS/pair_mliap_kokkos.cpp
|
|
@@ -90,8 +90,9 @@ void PairMLIAPKokkos<DeviceType>::compute(int eflag, int vflag)
|
|
memoryKK->destroy_kokkos(k_eatom,eatom);
|
|
memoryKK->create_kokkos(k_eatom,eatom,maxeatom,"pair:eatom");
|
|
} else {
|
|
- Kokkos::deep_copy(k_eatom.d_view,0);
|
|
+ Kokkos::deep_copy(k_eatom.template view<DeviceType>(),0);
|
|
k_eatom.modify<DeviceType>();
|
|
+ k_eatom.sync_host();
|
|
}
|
|
}
|
|
|
|
@@ -100,8 +101,9 @@ void PairMLIAPKokkos<DeviceType>::compute(int eflag, int vflag)
|
|
memoryKK->destroy_kokkos(k_vatom,vatom);
|
|
memoryKK->create_kokkos(k_vatom,vatom,maxeatom,6,"pair:eatom");
|
|
} else {
|
|
- Kokkos::deep_copy(k_vatom.d_view,0);
|
|
+ Kokkos::deep_copy(k_vatom.template view<DeviceType>(),0);
|
|
k_vatom.modify<DeviceType>();
|
|
+ k_vatom.sync_host();
|
|
}
|
|
}
|
|
|
|
@@ -312,6 +314,7 @@ void PairMLIAPKokkos<DeviceType>::e_tally(MLIAPData* data)
|
|
auto d_iatoms = k_data->k_iatoms.template view<DeviceType>();
|
|
auto d_eatoms = k_data->k_eatoms.template view<DeviceType>();
|
|
auto d_eatom = k_eatom.template view<DeviceType>();
|
|
+ k_eatom.sync<DeviceType>();
|
|
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType>(0,data->nlistatoms), KOKKOS_LAMBDA (int ii) {
|
|
d_eatom(d_iatoms(ii)) = d_eatoms(ii);
|
|
});
|