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 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 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::stats() template void FixShakeKokkos::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::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::space,F_MASK); auto d_f = atomKK->k_f.view(); + auto d_iatoms = data->k_iatoms.template view(); auto d_jatoms = data->k_jatoms.template view(); auto d_betas = data->k_betas.template view(); @@ -78,8 +81,10 @@ void MLIAPDescriptorSO3Kokkos::compute_forces(class MLIAPData *data_ auto d_ij = data->k_ij.template view(); 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(); Kokkos::View virial("virial"); data->k_pairmliap->k_vatom.template modify(); 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(); data->pairmliap->k_vatom.template sync(); @@ -355,8 +356,8 @@ void LAMMPS_NS::update_pair_forces(MLIAPDataKokkosDevice *data, double *fij) if (vflag_global) { Kokkos::View 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(); 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::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(),0); k_eatom.modify(); + k_eatom.sync_host(); } } @@ -100,8 +101,9 @@ void PairMLIAPKokkos::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(),0); k_vatom.modify(); + k_vatom.sync_host(); } } @@ -312,6 +314,7 @@ void PairMLIAPKokkos::e_tally(MLIAPData* data) auto d_iatoms = k_data->k_iatoms.template view(); auto d_eatoms = k_data->k_eatoms.template view(); auto d_eatom = k_eatom.template view(); + k_eatom.sync(); Kokkos::parallel_for(Kokkos::RangePolicy(0,data->nlistatoms), KOKKOS_LAMBDA (int ii) { d_eatom(d_iatoms(ii)) = d_eatoms(ii); });