From 3c88b2a9805b0908351759d76eb6421226e0c1d0 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Tue, 18 Jul 2017 09:53:26 -0600 Subject: [PATCH 01/15] Fixing execution space issues in KOKKOS package --- src/KOKKOS/atom_vec_angle_kokkos.h | 2 + src/KOKKOS/atom_vec_atomic_kokkos.h | 2 + src/KOKKOS/atom_vec_bond_kokkos.h | 2 + src/KOKKOS/atom_vec_charge_kokkos.h | 2 + src/KOKKOS/atom_vec_full_kokkos.h | 2 + src/KOKKOS/atom_vec_molecular_kokkos.h | 2 + src/KOKKOS/fix_deform_kokkos.h | 2 + src/KOKKOS/fix_reaxc_bonds_kokkos.cpp | 2 +- src/KOKKOS/fix_reaxc_bonds_kokkos.h | 2 + src/KOKKOS/fix_reaxc_species_kokkos.cpp | 2 +- src/KOKKOS/fix_reaxc_species_kokkos.h | 2 + src/KOKKOS/out.txt | 321 ++++++++++++++++++++++++ src/KOKKOS/pair_eam_kokkos.cpp | 4 +- src/KOKKOS/pair_kokkos.h | 6 +- src/KOKKOS/pair_reaxc_kokkos.cpp | 40 +-- src/KOKKOS/pair_reaxc_kokkos.h | 19 +- src/KOKKOS/verlet_kokkos.h | 2 + 17 files changed, 379 insertions(+), 35 deletions(-) create mode 100644 src/KOKKOS/out.txt diff --git a/src/KOKKOS/atom_vec_angle_kokkos.h b/src/KOKKOS/atom_vec_angle_kokkos.h index 0a477b0386..abdd48fce5 100644 --- a/src/KOKKOS/atom_vec_angle_kokkos.h +++ b/src/KOKKOS/atom_vec_angle_kokkos.h @@ -14,6 +14,8 @@ #ifdef ATOM_CLASS AtomStyle(angle/kk,AtomVecAngleKokkos) +AtomStyle(angle/kk/device,AtomVecAngleKokkos) +AtomStyle(angle/kk/host,AtomVecAngleKokkos) #else diff --git a/src/KOKKOS/atom_vec_atomic_kokkos.h b/src/KOKKOS/atom_vec_atomic_kokkos.h index 0c3e24f9d9..5e9a72c2e3 100644 --- a/src/KOKKOS/atom_vec_atomic_kokkos.h +++ b/src/KOKKOS/atom_vec_atomic_kokkos.h @@ -14,6 +14,8 @@ #ifdef ATOM_CLASS AtomStyle(atomic/kk,AtomVecAtomicKokkos) +AtomStyle(atomic/kk/device,AtomVecAtomicKokkos) +AtomStyle(atomic/kk/host,AtomVecAtomicKokkos) #else diff --git a/src/KOKKOS/atom_vec_bond_kokkos.h b/src/KOKKOS/atom_vec_bond_kokkos.h index e64017c99b..3dcc99fa78 100644 --- a/src/KOKKOS/atom_vec_bond_kokkos.h +++ b/src/KOKKOS/atom_vec_bond_kokkos.h @@ -14,6 +14,8 @@ #ifdef ATOM_CLASS AtomStyle(bond/kk,AtomVecBondKokkos) +AtomStyle(bond/kk/device,AtomVecBondKokkos) +AtomStyle(bond/kk/host,AtomVecBondKokkos) #else diff --git a/src/KOKKOS/atom_vec_charge_kokkos.h b/src/KOKKOS/atom_vec_charge_kokkos.h index 38e32458c6..f9b385e7ed 100644 --- a/src/KOKKOS/atom_vec_charge_kokkos.h +++ b/src/KOKKOS/atom_vec_charge_kokkos.h @@ -14,6 +14,8 @@ #ifdef ATOM_CLASS AtomStyle(charge/kk,AtomVecChargeKokkos) +AtomStyle(charge/kk/device,AtomVecChargeKokkos) +AtomStyle(charge/kk/host,AtomVecChargeKokkos) #else diff --git a/src/KOKKOS/atom_vec_full_kokkos.h b/src/KOKKOS/atom_vec_full_kokkos.h index 841707b338..760df087e1 100644 --- a/src/KOKKOS/atom_vec_full_kokkos.h +++ b/src/KOKKOS/atom_vec_full_kokkos.h @@ -14,6 +14,8 @@ #ifdef ATOM_CLASS AtomStyle(full/kk,AtomVecFullKokkos) +AtomStyle(full/kk/device,AtomVecFullKokkos) +AtomStyle(full/kk/host,AtomVecFullKokkos) #else diff --git a/src/KOKKOS/atom_vec_molecular_kokkos.h b/src/KOKKOS/atom_vec_molecular_kokkos.h index 4ec26621cc..06444510e0 100644 --- a/src/KOKKOS/atom_vec_molecular_kokkos.h +++ b/src/KOKKOS/atom_vec_molecular_kokkos.h @@ -14,6 +14,8 @@ #ifdef ATOM_CLASS AtomStyle(molecular/kk,AtomVecMolecularKokkos) +AtomStyle(molecular/kk/device,AtomVecMolecularKokkos) +AtomStyle(molecular/kk/host,AtomVecMolecularKokkos) #else diff --git a/src/KOKKOS/fix_deform_kokkos.h b/src/KOKKOS/fix_deform_kokkos.h index 8fa12a2e37..69f65fbcf4 100644 --- a/src/KOKKOS/fix_deform_kokkos.h +++ b/src/KOKKOS/fix_deform_kokkos.h @@ -14,6 +14,8 @@ #ifdef FIX_CLASS FixStyle(deform/kk,FixDeformKokkos) +FixStyle(deform/kk/device,FixDeformKokkos) +FixStyle(deform/kk/host,FixDeformKokkos) #else diff --git a/src/KOKKOS/fix_reaxc_bonds_kokkos.cpp b/src/KOKKOS/fix_reaxc_bonds_kokkos.cpp index e4fb9385a5..0d74a49ed3 100644 --- a/src/KOKKOS/fix_reaxc_bonds_kokkos.cpp +++ b/src/KOKKOS/fix_reaxc_bonds_kokkos.cpp @@ -64,7 +64,7 @@ FixReaxCBondsKokkos::~FixReaxCBondsKokkos() void FixReaxCBondsKokkos::init() { - Pair *pair_kk = force->pair_match("reax/c/kk",1); + Pair *pair_kk = force->pair_match("reax/c/kk",0); if (pair_kk == NULL) error->all(FLERR,"Cannot use fix reax/c/bonds without " "pair_style reax/c/kk"); diff --git a/src/KOKKOS/fix_reaxc_bonds_kokkos.h b/src/KOKKOS/fix_reaxc_bonds_kokkos.h index e85a7988f3..55adb6f8d9 100644 --- a/src/KOKKOS/fix_reaxc_bonds_kokkos.h +++ b/src/KOKKOS/fix_reaxc_bonds_kokkos.h @@ -14,6 +14,8 @@ #ifdef FIX_CLASS FixStyle(reax/c/bonds/kk,FixReaxCBondsKokkos) +FixStyle(reax/c/bonds/kk/device,FixReaxCBondsKokkos) +FixStyle(reax/c/bonds/kk/host,FixReaxCBondsKokkos) #else diff --git a/src/KOKKOS/fix_reaxc_species_kokkos.cpp b/src/KOKKOS/fix_reaxc_species_kokkos.cpp index 8b778ecf65..f2719f9f0e 100644 --- a/src/KOKKOS/fix_reaxc_species_kokkos.cpp +++ b/src/KOKKOS/fix_reaxc_species_kokkos.cpp @@ -66,7 +66,7 @@ FixReaxCSpeciesKokkos::~FixReaxCSpeciesKokkos() void FixReaxCSpeciesKokkos::init() { - Pair* pair_kk = force->pair_match("reax/c/kk",1); + Pair* pair_kk = force->pair_match("reax/c/kk",0); if (pair_kk == NULL) error->all(FLERR,"Cannot use fix reax/c/species/kk without " "pair_style reax/c/kk"); diff --git a/src/KOKKOS/fix_reaxc_species_kokkos.h b/src/KOKKOS/fix_reaxc_species_kokkos.h index 64de060006..7c163b23b5 100644 --- a/src/KOKKOS/fix_reaxc_species_kokkos.h +++ b/src/KOKKOS/fix_reaxc_species_kokkos.h @@ -14,6 +14,8 @@ #ifdef FIX_CLASS FixStyle(reax/c/species/kk,FixReaxCSpeciesKokkos) +FixStyle(reax/c/species/kk/device,FixReaxCSpeciesKokkos) +FixStyle(reax/c/species/kk/host,FixReaxCSpeciesKokkos) #else diff --git a/src/KOKKOS/out.txt b/src/KOKKOS/out.txt new file mode 100644 index 0000000000..00908bf69a --- /dev/null +++ b/src/KOKKOS/out.txt @@ -0,0 +1,321 @@ +atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(nsend,f); +atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(nsend,f); +atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(nrecv/elements,f); +atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(nrecv/elements,f); +atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(nsend,f); +atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(nsend,f); +atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(nrecv/11,f); +atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(nrecv/11,f); +atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(nsend,f); +atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(nsend,f); +atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(nrecv/elements,f); +atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(nrecv/elements,f); +atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(nsend,f); +atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(nsend,f); +atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(nrecv/12,f); +atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(nrecv/12,f); +atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_full_kokkos.cpp: Kokkos::parallel_for(nsend,f); +atom_vec_full_kokkos.cpp: Kokkos::parallel_for(nsend,f); +atom_vec_full_kokkos.cpp: Kokkos::parallel_for(nrecv/elements,f); +atom_vec_full_kokkos.cpp: Kokkos::parallel_for(nrecv/elements,f); +atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); +atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(nsend,f); +atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(nsend,f); +atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(nrecv/elements,f); +atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(nrecv/elements,f); +comm_kokkos.cpp: Kokkos::parallel_for(nlocal,f); +comm_kokkos.cpp: Kokkos::parallel_for(config,f); +comm_kokkos.cpp: Kokkos::parallel_for(config,f); +domain_kokkos.cpp: Kokkos::parallel_reduce(nlocal,f,result); +domain_kokkos.cpp: Kokkos::parallel_for(nlocal,f); +domain_kokkos.cpp: Kokkos::parallel_for(nlocal,f); +domain_kokkos.cpp: Kokkos::parallel_for(nlocal,f); +domain_kokkos.cpp: Kokkos::parallel_for(nlocal,f); +fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); +fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); +fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); +fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); +fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); +fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); +fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); +fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); +fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); +fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); +fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); +fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); +fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); +fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); +fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); +fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); +fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); +fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); +fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); +fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); +fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); +fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); +fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); +fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); +fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); +fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); +fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); +fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); +fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); +fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); +fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); +fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); +fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); +fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); +fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); +fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); +fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); +fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); +fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); +fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); +fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); +fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); +fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); +fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); +fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); +fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); +fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); +fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); +fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); +fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); +fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); +fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); +fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); +fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); +fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); +fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); +fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); +fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); +fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); +fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); +fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); +fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); +fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); +fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); +fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,zero_functor); +fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,scalar_functor,energy_onestep); +fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,tally_functor,energy_onestep); +fix_momentum_kokkos.cpp: Kokkos::parallel_reduce(nlocal, LAMMPS_LAMBDA(int i, double& update) { +fix_momentum_kokkos.cpp: Kokkos::parallel_reduce(nlocal, LAMMPS_LAMBDA(int i, double& update) { +fix_momentum_kokkos.cpp: Kokkos::parallel_for(nlocal, LAMMPS_LAMBDA(int i) { +fix_momentum_kokkos.cpp: Kokkos::parallel_for(nlocal, LAMMPS_LAMBDA(int i) { +fix_momentum_kokkos.cpp: Kokkos::parallel_for(nlocal, LAMMPS_LAMBDA(int i) { +fix_nve_kokkos.cpp: Kokkos::parallel_for(nlocal,functor); +fix_nve_kokkos.cpp: Kokkos::parallel_for(nlocal,functor); +fix_nve_kokkos.cpp: Kokkos::parallel_for(nlocal,functor); +fix_nve_kokkos.cpp: Kokkos::parallel_for(nlocal,functor); +fix_qeq_reax_kokkos.cpp: Kokkos::parallel_scan(inum,computeH_functor); +fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(inum,matvec_functor); +fix_qeq_reax_kokkos.cpp: Kokkos::parallel_reduce(inum,neigh_functor,m_cap); +fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(ignum,zero_functor); +fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(inum,sparse12_functor); +fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(inum,sparse13_functor); +fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(inum,sparse13_functor); +fix_qeq_reax_kokkos.cpp: Kokkos::parallel_reduce(inum,norm1_functor,my_norm); +fix_qeq_reax_kokkos.cpp: Kokkos::parallel_reduce(inum,dot1_functor,my_dot); +fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(inum,sparse22_functor); +fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(inum,sparse23_functor); +fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(inum,sparse23_functor); +fix_qeq_reax_kokkos.cpp: Kokkos::parallel_reduce(inum,dot2_functor,my_dot); +fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(inum,precon1_functor); +fix_qeq_reax_kokkos.cpp: Kokkos::parallel_reduce(inum,precon_functor,my_dot); +fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(inum,vecsum2_functor); +fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(inum,sparse32_functor); +fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(inum,sparse33_functor); +fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(inum,sparse33_functor); +fix_qeq_reax_kokkos.cpp: Kokkos::parallel_reduce(inum,norm2_functor,my_norm); +fix_qeq_reax_kokkos.cpp: Kokkos::parallel_reduce(inum,dot1_functor,my_dot); +fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(inum,sparse22_functor); +fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(inum,sparse23_functor); +fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(inum,sparse23_functor); +fix_qeq_reax_kokkos.cpp: Kokkos::parallel_reduce(inum,dot2_functor,my_dot); +fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(inum,precon2_functor); +fix_qeq_reax_kokkos.cpp: Kokkos::parallel_reduce(inum,precon_functor,my_dot); +fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(inum,vecsum2_functor); +fix_qeq_reax_kokkos.cpp: Kokkos::parallel_reduce(inum,vecacc1_functor,sum); +fix_qeq_reax_kokkos.cpp: Kokkos::parallel_reduce(inum,vecacc2_functor,sum); +fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(inum,calculateQ_functor); +fix_qeq_reax_kokkos.cpp: Kokkos::parallel_reduce(Kokkos::TeamThreadRange(team, d_firstnbr[i], d_firstnbr[i] + d_numnbrs[i]), [&] (const int &jj, F_FLOAT &doi) { +fix_qeq_reax_kokkos.cpp: Kokkos::parallel_reduce(Kokkos::TeamThreadRange(team, d_firstnbr[i], d_firstnbr[i] + d_numnbrs[i]), [&] (const int &jj, F_FLOAT &doi) { +fix_qeq_reax_kokkos.cpp: Kokkos::parallel_reduce(Kokkos::TeamThreadRange(team, d_firstnbr[i], d_firstnbr[i] + d_numnbrs[i]), [&] (const int &jj, F_FLOAT &doi) { +kokkos_type.h: Kokkos::parallel_for(view.span()*sizeof(typename ViewType::value_type)/4, f); +kokkos_type.h: Kokkos::parallel_for(view.capacity()*sizeof(typename ViewType::value_type)/4, f); +nbin_kokkos.cpp: Kokkos::parallel_for(mbins, f_zero); +nbin_kokkos.cpp: Kokkos::parallel_for(atom->nlocal+atom->nghost, f); +npair_kokkos.cpp: Kokkos::parallel_for(nall, f); +npair_kokkos.cpp: Kokkos::parallel_for(config, f); +npair_kokkos.cpp: Kokkos::parallel_for(nall, f); +npair_kokkos.cpp: Kokkos::parallel_for(config, f); +npair_kokkos.cpp: Kokkos::parallel_for(nall, f); +pair_eam_kokkos.cpp: Kokkos::parallel_for(Kokkos::RangePolicy(0,n),*this); +pair_eam_kokkos.cpp: Kokkos::parallel_for(Kokkos::RangePolicy(0,n),*this); +pair_kokkos.h: if (fpair->eflag || fpair->vflag) Kokkos::parallel_reduce(list->inum,ff,ev); +pair_kokkos.h: else Kokkos::parallel_for(list->inum,ff); +pair_kokkos.h: if (fpair->eflag || fpair->vflag) Kokkos::parallel_reduce(list->inum,ff,ev); +pair_kokkos.h: else Kokkos::parallel_for(list->inum,ff); +pair_reaxc_kokkos.cpp: Kokkos::parallel_reduce(inum,find_bond_functor,numbonds); +pair_reaxc_kokkos.cpp: Kokkos::parallel_scan(nlocal,pack_bond_buffer_functor); +pair_table_kokkos.cpp: if (eflag || vflag) Kokkos::parallel_reduce(list->inum,ff,ev); +pair_table_kokkos.cpp: else Kokkos::parallel_for(list->inum,ff); +pair_table_kokkos.cpp: if (eflag || vflag) Kokkos::parallel_reduce(list->inum,ff,ev); +pair_table_kokkos.cpp: else Kokkos::parallel_for(list->inum,ff); +pair_table_kokkos.cpp: if (eflag || vflag) Kokkos::parallel_reduce(list->inum,f,ev); +pair_table_kokkos.cpp: else Kokkos::parallel_for(list->inum,f); +pair_table_kokkos.cpp: if (eflag || vflag) Kokkos::parallel_reduce(nlocal,f,ev); +pair_table_kokkos.cpp: else Kokkos::parallel_for(nlocal,f); +pair_table_kokkos.cpp: if (eflag || vflag) Kokkos::parallel_reduce(list->inum,f,ev); +pair_table_kokkos.cpp: else Kokkos::parallel_for(list->inum,f); +pair_table_kokkos.cpp: if (eflag || vflag) Kokkos::parallel_reduce(list->inum,f,ev); +pair_table_kokkos.cpp: else Kokkos::parallel_for(list->inum,f); +pair_table_kokkos.cpp: if (eflag || vflag) Kokkos::parallel_reduce(list->inum,f,ev); +pair_table_kokkos.cpp: else Kokkos::parallel_for(list->inum,f); +pair_table_kokkos.cpp: if (eflag || vflag) Kokkos::parallel_reduce(nlocal,f,ev); +pair_table_kokkos.cpp: else Kokkos::parallel_for(nlocal,f); +pppm_kokkos.cpp: Kokkos::parallel_for(config,*this); +verlet_kokkos.cpp: Kokkos::parallel_for(atomKK->k_f.dimension_0(), diff --git a/src/KOKKOS/pair_eam_kokkos.cpp b/src/KOKKOS/pair_eam_kokkos.cpp index e848669947..6b2588475f 100644 --- a/src/KOKKOS/pair_eam_kokkos.cpp +++ b/src/KOKKOS/pair_eam_kokkos.cpp @@ -405,7 +405,7 @@ int PairEAMKokkos::pack_forward_comm_kokkos(int n, DAT::tdual_int_2d d_sendlist = k_sendlist.view(); iswap = iswap_in; v_buf = buf.view(); - Kokkos::parallel_for(Kokkos::RangePolicy(0,n),*this); + Kokkos::parallel_for(Kokkos::RangePolicy(0,n),*this); return n; } @@ -423,7 +423,7 @@ void PairEAMKokkos::unpack_forward_comm_kokkos(int n, int first_in, { first = first_in; v_buf = buf.view(); - Kokkos::parallel_for(Kokkos::RangePolicy(0,n),*this); + Kokkos::parallel_for(Kokkos::RangePolicy(0,n),*this); } template diff --git a/src/KOKKOS/pair_kokkos.h b/src/KOKKOS/pair_kokkos.h index b0614a934b..a5a45dd2ec 100644 --- a/src/KOKKOS/pair_kokkos.h +++ b/src/KOKKOS/pair_kokkos.h @@ -540,11 +540,11 @@ void pair_virial_fdotr_compute(PairStyle* fpair) { EV_FLOAT virial; if (fpair->neighbor->includegroup == 0) { int nall = fpair->atom->nlocal + fpair->atom->nghost; - Kokkos::parallel_reduce(nall,PairVirialFDotRCompute(fpair->x,fpair->f,0),virial); + Kokkos::parallel_reduce(Kokkos::RangePolicy(0,nall),PairVirialFDotRCompute(fpair->x,fpair->f,0),virial); } else { - Kokkos::parallel_reduce(fpair->atom->nfirst,PairVirialFDotRCompute(fpair->x,fpair->f,0),virial); + Kokkos::parallel_reduce(Kokkos::RangePolicy(0,fpair->atom->nfirst),PairVirialFDotRCompute(fpair->x,fpair->f,0),virial); EV_FLOAT virial_ghost; - Kokkos::parallel_reduce(fpair->atom->nghost,PairVirialFDotRCompute(fpair->x,fpair->f,fpair->atom->nlocal),virial_ghost); + Kokkos::parallel_reduce(Kokkos::RangePolicy(0,fpair->atom->nghost),PairVirialFDotRCompute(fpair->x,fpair->f,fpair->atom->nlocal),virial_ghost); virial+=virial_ghost; } fpair->vflag_fdotr = 0; diff --git a/src/KOKKOS/pair_reaxc_kokkos.cpp b/src/KOKKOS/pair_reaxc_kokkos.cpp index 6be09548da..43559bde07 100644 --- a/src/KOKKOS/pair_reaxc_kokkos.cpp +++ b/src/KOKKOS/pair_reaxc_kokkos.cpp @@ -99,26 +99,26 @@ void PairReaxCKokkos::allocate() k_params_sing = Kokkos::DualView ("PairReaxC::params_sing",n+1); - paramssing = k_params_sing.d_view; + paramssing = k_params_sing.template view(); k_params_twbp = Kokkos::DualView ("PairReaxC::params_twbp",n+1,n+1); - paramstwbp = k_params_twbp.d_view; + paramstwbp = k_params_twbp.template view(); k_params_thbp = Kokkos::DualView ("PairReaxC::params_thbp",n+1,n+1,n+1); - paramsthbp = k_params_thbp.d_view; + paramsthbp = k_params_thbp.template view(); k_params_fbp = Kokkos::DualView ("PairReaxC::params_fbp",n+1,n+1,n+1,n+1); - paramsfbp = k_params_fbp.d_view; + paramsfbp = k_params_fbp.template view(); k_params_hbp = Kokkos::DualView ("PairReaxC::params_hbp",n+1,n+1,n+1); - paramshbp = k_params_hbp.d_view; + paramshbp = k_params_hbp.template view(); k_tap = DAT::tdual_ffloat_1d("pair:tap",8); - d_tap = k_tap.d_view; + d_tap = k_tap.template view(); h_tap = k_tap.h_view; } @@ -367,7 +367,7 @@ void PairReaxCKokkos::init_md() Init_Lookup_Tables(); k_LR = tdual_LR_lookup_table_kk_2d("lookup:LR",ntypes+1,ntypes+1); - d_LR = k_LR.d_view; + d_LR = k_LR.template view(); for (int i = 1; i <= ntypes; ++i) { for (int j = i; j <= ntypes; ++j) { @@ -382,19 +382,19 @@ void PairReaxCKokkos::init_md() k_LR.h_view(i,j).m = LR[i][j].m; k_LR.h_view(i,j).c = LR[i][j].c; - tdual_LR_data_1d k_y = tdual_LR_data_1d("lookup:LR[i,j].y",n); - tdual_cubic_spline_coef_1d k_H = tdual_cubic_spline_coef_1d("lookup:LR[i,j].H",n); - tdual_cubic_spline_coef_1d k_vdW = tdual_cubic_spline_coef_1d("lookup:LR[i,j].vdW",n); - tdual_cubic_spline_coef_1d k_CEvd = tdual_cubic_spline_coef_1d("lookup:LR[i,j].CEvd",n); - tdual_cubic_spline_coef_1d k_ele = tdual_cubic_spline_coef_1d("lookup:LR[i,j].ele",n); - tdual_cubic_spline_coef_1d k_CEclmb = tdual_cubic_spline_coef_1d("lookup:LR[i,j].CEclmb",n); + typename LR_lookup_table_kk::tdual_LR_data_1d k_y = typename LR_lookup_table_kk::tdual_LR_data_1d("lookup:LR[i,j].y",n); + typename LR_lookup_table_kk::tdual_cubic_spline_coef_1d k_H = typename LR_lookup_table_kk::tdual_cubic_spline_coef_1d("lookup:LR[i,j].H",n); + typename LR_lookup_table_kk::tdual_cubic_spline_coef_1d k_vdW = typename LR_lookup_table_kk::tdual_cubic_spline_coef_1d("lookup:LR[i,j].vdW",n); + typename LR_lookup_table_kk::tdual_cubic_spline_coef_1d k_CEvd = typename LR_lookup_table_kk::tdual_cubic_spline_coef_1d("lookup:LR[i,j].CEvd",n); + typename LR_lookup_table_kk::tdual_cubic_spline_coef_1d k_ele = typename LR_lookup_table_kk::tdual_cubic_spline_coef_1d("lookup:LR[i,j].ele",n); + typename LR_lookup_table_kk::tdual_cubic_spline_coef_1d k_CEclmb = typename LR_lookup_table_kk::tdual_cubic_spline_coef_1d("lookup:LR[i,j].CEclmb",n); - k_LR.h_view(i,j).d_y = k_y.d_view; - k_LR.h_view(i,j).d_H = k_H.d_view; - k_LR.h_view(i,j).d_vdW = k_vdW.d_view; - k_LR.h_view(i,j).d_CEvd = k_CEvd.d_view; - k_LR.h_view(i,j).d_ele = k_ele.d_view; - k_LR.h_view(i,j).d_CEclmb = k_CEclmb.d_view; + k_LR.h_view(i,j).d_y = k_y.template view(); + k_LR.h_view(i,j).d_H = k_H.template view(); + k_LR.h_view(i,j).d_vdW = k_vdW.template view(); + k_LR.h_view(i,j).d_CEvd = k_CEvd.template view(); + k_LR.h_view(i,j).d_ele = k_ele.template view(); + k_LR.h_view(i,j).d_CEclmb = k_CEclmb.template view(); for (int k = 0; k < n; k++) { k_y.h_view(k) = LR[i][j].y[k]; @@ -1213,7 +1213,7 @@ void PairReaxCKokkos::operator()(PairReaxComputeTabulatedLJCoulomb t = d_LR(tmin,tmax); /* Cubic Spline Interpolation */ diff --git a/src/KOKKOS/pair_reaxc_kokkos.h b/src/KOKKOS/pair_reaxc_kokkos.h index 59c4d196d5..95fd7ced38 100644 --- a/src/KOKKOS/pair_reaxc_kokkos.h +++ b/src/KOKKOS/pair_reaxc_kokkos.h @@ -39,14 +39,15 @@ PairStyle(reax/c/kk/host,PairReaxCKokkos) namespace LAMMPS_NS { -typedef Kokkos::DualView tdual_LR_data_1d; -typedef typename tdual_LR_data_1d::t_dev t_LR_data_1d; - -typedef Kokkos::DualView tdual_cubic_spline_coef_1d; -typedef typename tdual_cubic_spline_coef_1d::t_dev t_cubic_spline_coef_1d; - +template struct LR_lookup_table_kk { + typedef Kokkos::DualView tdual_LR_data_1d; + typedef typename tdual_LR_data_1d::t_dev t_LR_data_1d; + + typedef Kokkos::DualView tdual_cubic_spline_coef_1d; + typedef typename tdual_cubic_spline_coef_1d::t_dev t_cubic_spline_coef_1d; + double xmin, xmax; int n; double dx, inv_dx; @@ -397,7 +398,7 @@ class PairReaxCKokkos : public PairReaxC { HAT::t_virial_array h_vatom; DAT::tdual_float_1d k_tap; - DAT::t_float_1d d_tap; + typename AT::t_float_1d d_tap; HAT::t_float_1d h_tap; typename AT::t_float_1d d_bo_rij, d_hb_rsq, d_Deltap, d_Deltap_boc, d_total_bo; @@ -438,7 +439,9 @@ class PairReaxCKokkos : public PairReaxC { int bocnt,hbcnt; - typedef Kokkos::DualView tdual_LR_lookup_table_kk_2d; + typedef LR_lookup_table_kk LR_lookup_table_kk_DT; + + typedef Kokkos::DualView tdual_LR_lookup_table_kk_2d; typedef typename tdual_LR_lookup_table_kk_2d::t_dev t_LR_lookup_table_kk_2d; tdual_LR_lookup_table_kk_2d k_LR; diff --git a/src/KOKKOS/verlet_kokkos.h b/src/KOKKOS/verlet_kokkos.h index 6455239204..7b140b6f81 100644 --- a/src/KOKKOS/verlet_kokkos.h +++ b/src/KOKKOS/verlet_kokkos.h @@ -14,6 +14,8 @@ #ifdef INTEGRATE_CLASS IntegrateStyle(verlet/kk,VerletKokkos) +IntegrateStyle(verlet/kk/device,VerletKokkos) +IntegrateStyle(verlet/kk/host,VerletKokkos) #else From 9df61b642e564473b090f89bec12b0bfc2aa300c Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Tue, 18 Jul 2017 10:44:45 -0600 Subject: [PATCH 02/15] Removing stray file --- src/KOKKOS/out.txt | 321 --------------------------------------------- 1 file changed, 321 deletions(-) delete mode 100644 src/KOKKOS/out.txt diff --git a/src/KOKKOS/out.txt b/src/KOKKOS/out.txt deleted file mode 100644 index 00908bf69a..0000000000 --- a/src/KOKKOS/out.txt +++ /dev/null @@ -1,321 +0,0 @@ -atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(nsend,f); -atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(nsend,f); -atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(nrecv/elements,f); -atom_vec_angle_kokkos.cpp: Kokkos::parallel_for(nrecv/elements,f); -atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(nsend,f); -atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(nsend,f); -atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(nrecv/11,f); -atom_vec_atomic_kokkos.cpp: Kokkos::parallel_for(nrecv/11,f); -atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(nsend,f); -atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(nsend,f); -atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(nrecv/elements,f); -atom_vec_bond_kokkos.cpp: Kokkos::parallel_for(nrecv/elements,f); -atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(nsend,f); -atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(nsend,f); -atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(nrecv/12,f); -atom_vec_charge_kokkos.cpp: Kokkos::parallel_for(nrecv/12,f); -atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_full_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_full_kokkos.cpp: Kokkos::parallel_for(nsend,f); -atom_vec_full_kokkos.cpp: Kokkos::parallel_for(nsend,f); -atom_vec_full_kokkos.cpp: Kokkos::parallel_for(nrecv/elements,f); -atom_vec_full_kokkos.cpp: Kokkos::parallel_for(nrecv/elements,f); -atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(n,f); -atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(nsend,f); -atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(nsend,f); -atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(nrecv/elements,f); -atom_vec_molecular_kokkos.cpp: Kokkos::parallel_for(nrecv/elements,f); -comm_kokkos.cpp: Kokkos::parallel_for(nlocal,f); -comm_kokkos.cpp: Kokkos::parallel_for(config,f); -comm_kokkos.cpp: Kokkos::parallel_for(config,f); -domain_kokkos.cpp: Kokkos::parallel_reduce(nlocal,f,result); -domain_kokkos.cpp: Kokkos::parallel_for(nlocal,f); -domain_kokkos.cpp: Kokkos::parallel_for(nlocal,f); -domain_kokkos.cpp: Kokkos::parallel_for(nlocal,f); -domain_kokkos.cpp: Kokkos::parallel_for(nlocal,f); -fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); -fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); -fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); -fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); -fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); -fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); -fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); -fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); -fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); -fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); -fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); -fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); -fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); -fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); -fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); -fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); -fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); -fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); -fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); -fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); -fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); -fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); -fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); -fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); -fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); -fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); -fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); -fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); -fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); -fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); -fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); -fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); -fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); -fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); -fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); -fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); -fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); -fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); -fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); -fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); -fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); -fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); -fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); -fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); -fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); -fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); -fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); -fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); -fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); -fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); -fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); -fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); -fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); -fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); -fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); -fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); -fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); -fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); -fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); -fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); -fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); -fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); -fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); -fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,post_functor); -fix_langevin_kokkos.cpp: Kokkos::parallel_for(nlocal,zero_functor); -fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,scalar_functor,energy_onestep); -fix_langevin_kokkos.cpp: Kokkos::parallel_reduce(nlocal,tally_functor,energy_onestep); -fix_momentum_kokkos.cpp: Kokkos::parallel_reduce(nlocal, LAMMPS_LAMBDA(int i, double& update) { -fix_momentum_kokkos.cpp: Kokkos::parallel_reduce(nlocal, LAMMPS_LAMBDA(int i, double& update) { -fix_momentum_kokkos.cpp: Kokkos::parallel_for(nlocal, LAMMPS_LAMBDA(int i) { -fix_momentum_kokkos.cpp: Kokkos::parallel_for(nlocal, LAMMPS_LAMBDA(int i) { -fix_momentum_kokkos.cpp: Kokkos::parallel_for(nlocal, LAMMPS_LAMBDA(int i) { -fix_nve_kokkos.cpp: Kokkos::parallel_for(nlocal,functor); -fix_nve_kokkos.cpp: Kokkos::parallel_for(nlocal,functor); -fix_nve_kokkos.cpp: Kokkos::parallel_for(nlocal,functor); -fix_nve_kokkos.cpp: Kokkos::parallel_for(nlocal,functor); -fix_qeq_reax_kokkos.cpp: Kokkos::parallel_scan(inum,computeH_functor); -fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(inum,matvec_functor); -fix_qeq_reax_kokkos.cpp: Kokkos::parallel_reduce(inum,neigh_functor,m_cap); -fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(ignum,zero_functor); -fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(inum,sparse12_functor); -fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(inum,sparse13_functor); -fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(inum,sparse13_functor); -fix_qeq_reax_kokkos.cpp: Kokkos::parallel_reduce(inum,norm1_functor,my_norm); -fix_qeq_reax_kokkos.cpp: Kokkos::parallel_reduce(inum,dot1_functor,my_dot); -fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(inum,sparse22_functor); -fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(inum,sparse23_functor); -fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(inum,sparse23_functor); -fix_qeq_reax_kokkos.cpp: Kokkos::parallel_reduce(inum,dot2_functor,my_dot); -fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(inum,precon1_functor); -fix_qeq_reax_kokkos.cpp: Kokkos::parallel_reduce(inum,precon_functor,my_dot); -fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(inum,vecsum2_functor); -fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(inum,sparse32_functor); -fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(inum,sparse33_functor); -fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(inum,sparse33_functor); -fix_qeq_reax_kokkos.cpp: Kokkos::parallel_reduce(inum,norm2_functor,my_norm); -fix_qeq_reax_kokkos.cpp: Kokkos::parallel_reduce(inum,dot1_functor,my_dot); -fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(inum,sparse22_functor); -fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(inum,sparse23_functor); -fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(inum,sparse23_functor); -fix_qeq_reax_kokkos.cpp: Kokkos::parallel_reduce(inum,dot2_functor,my_dot); -fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(inum,precon2_functor); -fix_qeq_reax_kokkos.cpp: Kokkos::parallel_reduce(inum,precon_functor,my_dot); -fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(inum,vecsum2_functor); -fix_qeq_reax_kokkos.cpp: Kokkos::parallel_reduce(inum,vecacc1_functor,sum); -fix_qeq_reax_kokkos.cpp: Kokkos::parallel_reduce(inum,vecacc2_functor,sum); -fix_qeq_reax_kokkos.cpp: Kokkos::parallel_for(inum,calculateQ_functor); -fix_qeq_reax_kokkos.cpp: Kokkos::parallel_reduce(Kokkos::TeamThreadRange(team, d_firstnbr[i], d_firstnbr[i] + d_numnbrs[i]), [&] (const int &jj, F_FLOAT &doi) { -fix_qeq_reax_kokkos.cpp: Kokkos::parallel_reduce(Kokkos::TeamThreadRange(team, d_firstnbr[i], d_firstnbr[i] + d_numnbrs[i]), [&] (const int &jj, F_FLOAT &doi) { -fix_qeq_reax_kokkos.cpp: Kokkos::parallel_reduce(Kokkos::TeamThreadRange(team, d_firstnbr[i], d_firstnbr[i] + d_numnbrs[i]), [&] (const int &jj, F_FLOAT &doi) { -kokkos_type.h: Kokkos::parallel_for(view.span()*sizeof(typename ViewType::value_type)/4, f); -kokkos_type.h: Kokkos::parallel_for(view.capacity()*sizeof(typename ViewType::value_type)/4, f); -nbin_kokkos.cpp: Kokkos::parallel_for(mbins, f_zero); -nbin_kokkos.cpp: Kokkos::parallel_for(atom->nlocal+atom->nghost, f); -npair_kokkos.cpp: Kokkos::parallel_for(nall, f); -npair_kokkos.cpp: Kokkos::parallel_for(config, f); -npair_kokkos.cpp: Kokkos::parallel_for(nall, f); -npair_kokkos.cpp: Kokkos::parallel_for(config, f); -npair_kokkos.cpp: Kokkos::parallel_for(nall, f); -pair_eam_kokkos.cpp: Kokkos::parallel_for(Kokkos::RangePolicy(0,n),*this); -pair_eam_kokkos.cpp: Kokkos::parallel_for(Kokkos::RangePolicy(0,n),*this); -pair_kokkos.h: if (fpair->eflag || fpair->vflag) Kokkos::parallel_reduce(list->inum,ff,ev); -pair_kokkos.h: else Kokkos::parallel_for(list->inum,ff); -pair_kokkos.h: if (fpair->eflag || fpair->vflag) Kokkos::parallel_reduce(list->inum,ff,ev); -pair_kokkos.h: else Kokkos::parallel_for(list->inum,ff); -pair_reaxc_kokkos.cpp: Kokkos::parallel_reduce(inum,find_bond_functor,numbonds); -pair_reaxc_kokkos.cpp: Kokkos::parallel_scan(nlocal,pack_bond_buffer_functor); -pair_table_kokkos.cpp: if (eflag || vflag) Kokkos::parallel_reduce(list->inum,ff,ev); -pair_table_kokkos.cpp: else Kokkos::parallel_for(list->inum,ff); -pair_table_kokkos.cpp: if (eflag || vflag) Kokkos::parallel_reduce(list->inum,ff,ev); -pair_table_kokkos.cpp: else Kokkos::parallel_for(list->inum,ff); -pair_table_kokkos.cpp: if (eflag || vflag) Kokkos::parallel_reduce(list->inum,f,ev); -pair_table_kokkos.cpp: else Kokkos::parallel_for(list->inum,f); -pair_table_kokkos.cpp: if (eflag || vflag) Kokkos::parallel_reduce(nlocal,f,ev); -pair_table_kokkos.cpp: else Kokkos::parallel_for(nlocal,f); -pair_table_kokkos.cpp: if (eflag || vflag) Kokkos::parallel_reduce(list->inum,f,ev); -pair_table_kokkos.cpp: else Kokkos::parallel_for(list->inum,f); -pair_table_kokkos.cpp: if (eflag || vflag) Kokkos::parallel_reduce(list->inum,f,ev); -pair_table_kokkos.cpp: else Kokkos::parallel_for(list->inum,f); -pair_table_kokkos.cpp: if (eflag || vflag) Kokkos::parallel_reduce(list->inum,f,ev); -pair_table_kokkos.cpp: else Kokkos::parallel_for(list->inum,f); -pair_table_kokkos.cpp: if (eflag || vflag) Kokkos::parallel_reduce(nlocal,f,ev); -pair_table_kokkos.cpp: else Kokkos::parallel_for(nlocal,f); -pppm_kokkos.cpp: Kokkos::parallel_for(config,*this); -verlet_kokkos.cpp: Kokkos::parallel_for(atomKK->k_f.dimension_0(), From 1b34bec81a2cca135b9b483f35800ce72e5f5e97 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Tue, 18 Jul 2017 10:59:34 -0600 Subject: [PATCH 03/15] Prefer DeviceType specification over RangePolicy --- src/KOKKOS/pair_kokkos.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/KOKKOS/pair_kokkos.h b/src/KOKKOS/pair_kokkos.h index a5a45dd2ec..f0e357270c 100644 --- a/src/KOKKOS/pair_kokkos.h +++ b/src/KOKKOS/pair_kokkos.h @@ -513,6 +513,7 @@ EV_FLOAT pair_compute (PairStyle* fpair, NeighListKokkos struct PairVirialFDotRCompute { + typedef DeviceType device_type; typedef ArrayTypes AT; typedef EV_FLOAT value_type; typename AT::t_x_array_const_um x; @@ -540,11 +541,11 @@ void pair_virial_fdotr_compute(PairStyle* fpair) { EV_FLOAT virial; if (fpair->neighbor->includegroup == 0) { int nall = fpair->atom->nlocal + fpair->atom->nghost; - Kokkos::parallel_reduce(Kokkos::RangePolicy(0,nall),PairVirialFDotRCompute(fpair->x,fpair->f,0),virial); + Kokkos::parallel_reduce(nall,PairVirialFDotRCompute(fpair->x,fpair->f,0),virial); } else { - Kokkos::parallel_reduce(Kokkos::RangePolicy(0,fpair->atom->nfirst),PairVirialFDotRCompute(fpair->x,fpair->f,0),virial); + Kokkos::parallel_reduce(fpair->atom->nfirst,PairVirialFDotRCompute(fpair->x,fpair->f,0),virial); EV_FLOAT virial_ghost; - Kokkos::parallel_reduce(Kokkos::RangePolicy(0,fpair->atom->nghost),PairVirialFDotRCompute(fpair->x,fpair->f,fpair->atom->nlocal),virial_ghost); + Kokkos::parallel_reduce(fpair->atom->nghost,PairVirialFDotRCompute(fpair->x,fpair->f,fpair->atom->nlocal),virial_ghost); virial+=virial_ghost; } fpair->vflag_fdotr = 0; From 8ed881947ff91ef1e87f0fa8a7abb04f50a1dc78 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Fri, 21 Jul 2017 14:28:13 -0600 Subject: [PATCH 04/15] Fix execution space in manybody potentials --- src/KOKKOS/pair_sw_kokkos.cpp | 6 +++--- src/KOKKOS/pair_sw_kokkos.h | 12 ++++++------ src/KOKKOS/pair_tersoff_kokkos.cpp | 2 +- src/KOKKOS/pair_vashishta_kokkos.cpp | 6 +++--- src/KOKKOS/pair_vashishta_kokkos.h | 8 ++++---- 5 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/KOKKOS/pair_sw_kokkos.cpp b/src/KOKKOS/pair_sw_kokkos.cpp index e5c947cc8e..3440f7c639 100644 --- a/src/KOKKOS/pair_sw_kokkos.cpp +++ b/src/KOKKOS/pair_sw_kokkos.cpp @@ -572,7 +572,7 @@ void PairSWKokkos::coeff(int narg, char **arg) k_map.template modify(); k_map.template sync(); - d_map = k_map.d_view; + d_map = k_map.template view(); } /* ---------------------------------------------------------------------- @@ -637,8 +637,8 @@ void PairSWKokkos::setup_params() k_params.template modify(); k_params.template sync(); - d_elem2param = k_elem2param.d_view; - d_params = k_params.d_view; + d_elem2param = k_elem2param.template view(); + d_params = k_params.template view(); } /* ---------------------------------------------------------------------- */ diff --git a/src/KOKKOS/pair_sw_kokkos.h b/src/KOKKOS/pair_sw_kokkos.h index b94e39335f..3152fb6e94 100644 --- a/src/KOKKOS/pair_sw_kokkos.h +++ b/src/KOKKOS/pair_sw_kokkos.h @@ -103,7 +103,7 @@ class PairSWKokkos : public PairSW { typedef typename tdual_int_3d::t_host t_host_int_3d; t_int_3d_randomread d_elem2param; - DAT::t_int_1d_randomread d_map; + typename AT::t_int_1d_randomread d_map; typedef Kokkos::DualView tdual_param_1d; typedef typename tdual_param_1d::t_dev t_param_1d; @@ -125,12 +125,12 @@ class PairSWKokkos : public PairSW { DAT::tdual_efloat_1d k_eatom; DAT::tdual_virial_array k_vatom; - typename ArrayTypes::t_efloat_1d d_eatom; - typename ArrayTypes::t_virial_array d_vatom; + typename AT::t_efloat_1d d_eatom; + typename AT::t_virial_array d_vatom; - DAT::t_int_1d_randomread d_type2frho; - DAT::t_int_2d_randomread d_type2rhor; - DAT::t_int_2d_randomread d_type2z2r; + typename AT::t_int_1d_randomread d_type2frho; + typename AT::t_int_2d_randomread d_type2rhor; + typename AT::t_int_2d_randomread d_type2z2r; typename AT::t_neighbors_2d d_neighbors; typename AT::t_int_1d_randomread d_ilist; diff --git a/src/KOKKOS/pair_tersoff_kokkos.cpp b/src/KOKKOS/pair_tersoff_kokkos.cpp index 833c815ad9..3a5c2227ef 100644 --- a/src/KOKKOS/pair_tersoff_kokkos.cpp +++ b/src/KOKKOS/pair_tersoff_kokkos.cpp @@ -76,7 +76,7 @@ void PairTersoffKokkos::allocate() k_params = Kokkos::DualView ("PairTersoff::paramskk",n+1,n+1,n+1); - paramskk = k_params.d_view; + paramskk = k_params.template view(); } /* ---------------------------------------------------------------------- diff --git a/src/KOKKOS/pair_vashishta_kokkos.cpp b/src/KOKKOS/pair_vashishta_kokkos.cpp index abdcfac89e..fe2394ae84 100644 --- a/src/KOKKOS/pair_vashishta_kokkos.cpp +++ b/src/KOKKOS/pair_vashishta_kokkos.cpp @@ -573,7 +573,7 @@ void PairVashishtaKokkos::coeff(int narg, char **arg) k_map.template modify(); k_map.template sync(); - d_map = k_map.d_view; + d_map = k_map.template view(); } /* ---------------------------------------------------------------------- @@ -638,8 +638,8 @@ void PairVashishtaKokkos::setup_params() k_params.template modify(); k_params.template sync(); - d_elem2param = k_elem2param.d_view; - d_params = k_params.d_view; + d_elem2param = k_elem2param.template view(); + d_params = k_params.template view(); } /* ---------------------------------------------------------------------- */ diff --git a/src/KOKKOS/pair_vashishta_kokkos.h b/src/KOKKOS/pair_vashishta_kokkos.h index 174db2cb94..c5595bbd8a 100644 --- a/src/KOKKOS/pair_vashishta_kokkos.h +++ b/src/KOKKOS/pair_vashishta_kokkos.h @@ -103,7 +103,7 @@ class PairVashishtaKokkos : public PairVashishta { typedef typename tdual_int_3d::t_host t_host_int_3d; t_int_3d_randomread d_elem2param; - DAT::t_int_1d_randomread d_map; + typename AT::t_int_1d_randomread d_map; typedef Kokkos::DualView tdual_param_1d; typedef typename tdual_param_1d::t_dev t_param_1d; @@ -128,9 +128,9 @@ class PairVashishtaKokkos : public PairVashishta { typename ArrayTypes::t_efloat_1d d_eatom; typename ArrayTypes::t_virial_array d_vatom; - DAT::t_int_1d_randomread d_type2frho; - DAT::t_int_2d_randomread d_type2rhor; - DAT::t_int_2d_randomread d_type2z2r; + typename AT::t_int_1d_randomread d_type2frho; + typename AT::t_int_2d_randomread d_type2rhor; + typename AT::t_int_2d_randomread d_type2z2r; typename AT::t_neighbors_2d d_neighbors; typename AT::t_int_1d_randomread d_ilist; From f4b6b67f6ee6f09b3fc37ac952db065538f6ef75 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Fri, 21 Jul 2017 15:04:14 -0600 Subject: [PATCH 05/15] Fixing more execution space issues in KOKKOS package --- src/KOKKOS/angle_charmm_kokkos.cpp | 8 ++++---- src/KOKKOS/bond_fene_kokkos.cpp | 8 ++++---- src/KOKKOS/bond_fene_kokkos.h | 8 ++++---- src/KOKKOS/dihedral_charmm_kokkos.cpp | 20 +++++++++---------- src/KOKKOS/dihedral_opls_kokkos.cpp | 8 ++++---- src/KOKKOS/dihedral_opls_kokkos.h | 8 ++++---- src/KOKKOS/improper_harmonic_kokkos.cpp | 4 ++-- src/KOKKOS/pair_buck_coul_cut_kokkos.cpp | 2 +- src/KOKKOS/pair_buck_coul_long_kokkos.cpp | 2 +- src/KOKKOS/pair_buck_kokkos.cpp | 2 +- src/KOKKOS/pair_coul_cut_kokkos.cpp | 2 +- src/KOKKOS/pair_coul_debye_kokkos.cpp | 2 +- src/KOKKOS/pair_coul_long_kokkos.cpp | 2 +- src/KOKKOS/pair_eam_alloy_kokkos.cpp | 16 +++++++-------- src/KOKKOS/pair_eam_alloy_kokkos.h | 10 +++++----- src/KOKKOS/pair_eam_fs_kokkos.cpp | 16 +++++++-------- src/KOKKOS/pair_eam_fs_kokkos.h | 10 +++++----- src/KOKKOS/pair_eam_kokkos.cpp | 16 +++++++-------- src/KOKKOS/pair_eam_kokkos.h | 10 +++++----- ..._lj_charmm_coul_charmm_implicit_kokkos.cpp | 2 +- .../pair_lj_charmm_coul_charmm_kokkos.cpp | 2 +- .../pair_lj_charmm_coul_long_kokkos.cpp | 2 +- src/KOKKOS/pair_lj_class2_coul_cut_kokkos.cpp | 2 +- .../pair_lj_class2_coul_long_kokkos.cpp | 2 +- src/KOKKOS/pair_lj_class2_kokkos.cpp | 2 +- src/KOKKOS/pair_lj_cut_coul_cut_kokkos.cpp | 2 +- src/KOKKOS/pair_lj_cut_coul_debye_kokkos.cpp | 2 +- src/KOKKOS/pair_lj_cut_coul_dsf_kokkos.cpp | 2 +- src/KOKKOS/pair_lj_cut_coul_long_kokkos.cpp | 2 +- src/KOKKOS/pair_lj_cut_kokkos.cpp | 2 +- src/KOKKOS/pair_lj_expand_kokkos.cpp | 2 +- .../pair_lj_gromacs_coul_gromacs_kokkos.cpp | 2 +- src/KOKKOS/pair_lj_gromacs_kokkos.cpp | 2 +- src/KOKKOS/pair_lj_sdk_kokkos.cpp | 2 +- src/KOKKOS/pair_morse_kokkos.cpp | 2 +- src/KOKKOS/pair_tersoff_mod_kokkos.cpp | 2 +- src/KOKKOS/pair_tersoff_zbl_kokkos.cpp | 2 +- 37 files changed, 95 insertions(+), 95 deletions(-) diff --git a/src/KOKKOS/angle_charmm_kokkos.cpp b/src/KOKKOS/angle_charmm_kokkos.cpp index 8dd22022d8..401a00c856 100644 --- a/src/KOKKOS/angle_charmm_kokkos.cpp +++ b/src/KOKKOS/angle_charmm_kokkos.cpp @@ -271,10 +271,10 @@ void AngleCharmmKokkos::coeff(int narg, char **arg) Kokkos::DualView k_k_ub("AngleCharmm::k_ub",n+1); Kokkos::DualView k_r_ub("AngleCharmm::r_ub",n+1); - d_k = k_k.d_view; - d_theta0 = k_theta0.d_view; - d_k_ub = k_k_ub.d_view; - d_r_ub = k_r_ub.d_view; + d_k = k_k.template view(); + d_theta0 = k_theta0.template view(); + d_k_ub = k_k_ub.template view(); + d_r_ub = k_r_ub.template view(); for (int i = 1; i <= n; i++) { k_k.h_view[i] = k[i]; diff --git a/src/KOKKOS/bond_fene_kokkos.cpp b/src/KOKKOS/bond_fene_kokkos.cpp index 025838340b..8a716a98ef 100644 --- a/src/KOKKOS/bond_fene_kokkos.cpp +++ b/src/KOKKOS/bond_fene_kokkos.cpp @@ -253,10 +253,10 @@ void BondFENEKokkos::allocate() k_epsilon = DAT::tdual_ffloat_1d("BondFene::epsilon",n+1); k_sigma = DAT::tdual_ffloat_1d("BondFene::sigma",n+1); - d_k = k_k.d_view; - d_r0 = k_r0.d_view; - d_epsilon = k_epsilon.d_view; - d_sigma = k_sigma.d_view; + d_k = k_k.template view(); + d_r0 = k_r0.template view(); + d_epsilon = k_epsilon.template view(); + d_sigma = k_sigma.template view(); } /* ---------------------------------------------------------------------- diff --git a/src/KOKKOS/bond_fene_kokkos.h b/src/KOKKOS/bond_fene_kokkos.h index c630abcafc..094685d0cf 100644 --- a/src/KOKKOS/bond_fene_kokkos.h +++ b/src/KOKKOS/bond_fene_kokkos.h @@ -85,10 +85,10 @@ class BondFENEKokkos : public BondFENE { DAT::tdual_ffloat_1d k_epsilon; DAT::tdual_ffloat_1d k_sigma; - DAT::t_ffloat_1d d_k; - DAT::t_ffloat_1d d_r0; - DAT::t_ffloat_1d d_epsilon; - DAT::t_ffloat_1d d_sigma; + typename AT::t_ffloat_1d d_k; + typename AT::t_ffloat_1d d_r0; + typename AT::t_ffloat_1d d_epsilon; + typename AT::t_ffloat_1d d_sigma; virtual void allocate(); }; diff --git a/src/KOKKOS/dihedral_charmm_kokkos.cpp b/src/KOKKOS/dihedral_charmm_kokkos.cpp index a8a8aade60..7f2117c97f 100644 --- a/src/KOKKOS/dihedral_charmm_kokkos.cpp +++ b/src/KOKKOS/dihedral_charmm_kokkos.cpp @@ -432,12 +432,12 @@ void DihedralCharmmKokkos::coeff(int narg, char **arg) Kokkos::DualView k_sin_shift("DihedralCharmm::sin_shift",nd+1); Kokkos::DualView k_weight("DihedralCharmm::weight",nd+1); - d_k = k_k.d_view; - d_multiplicity = k_multiplicity.d_view; - d_shift = k_shift.d_view; - d_cos_shift = k_cos_shift.d_view; - d_sin_shift = k_sin_shift.d_view; - d_weight = k_weight.d_view; + d_k = k_k.template view(); + d_multiplicity = k_multiplicity.template view(); + d_shift = k_shift.template view(); + d_cos_shift = k_cos_shift.template view(); + d_sin_shift = k_sin_shift.template view(); + d_weight = k_weight.template view(); int n = atom->ndihedraltypes; for (int i = 1; i <= n; i++) { @@ -479,10 +479,10 @@ void DihedralCharmmKokkos::init_style() Kokkos::DualView k_lj14_3("DihedralCharmm:lj14_3",n+1,n+1); Kokkos::DualView k_lj14_4("DihedralCharmm:lj14_4",n+1,n+1); - d_lj14_1 = k_lj14_1.d_view; - d_lj14_2 = k_lj14_2.d_view; - d_lj14_3 = k_lj14_3.d_view; - d_lj14_4 = k_lj14_4.d_view; + d_lj14_1 = k_lj14_1.template view(); + d_lj14_2 = k_lj14_2.template view(); + d_lj14_3 = k_lj14_3.template view(); + d_lj14_4 = k_lj14_4.template view(); if (weightflag) { diff --git a/src/KOKKOS/dihedral_opls_kokkos.cpp b/src/KOKKOS/dihedral_opls_kokkos.cpp index e37d4d2ef5..0ee00ca8db 100644 --- a/src/KOKKOS/dihedral_opls_kokkos.cpp +++ b/src/KOKKOS/dihedral_opls_kokkos.cpp @@ -348,10 +348,10 @@ void DihedralOPLSKokkos::allocate() k_k3 = DAT::tdual_ffloat_1d("DihedralOPLS::k3",n+1); k_k4 = DAT::tdual_ffloat_1d("DihedralOPLS::k4",n+1); - d_k1 = k_k1.d_view; - d_k2 = k_k2.d_view; - d_k3 = k_k3.d_view; - d_k4 = k_k4.d_view; + d_k1 = k_k1.template view(); + d_k2 = k_k2.template view(); + d_k3 = k_k3.template view(); + d_k4 = k_k4.template view(); } /* ---------------------------------------------------------------------- diff --git a/src/KOKKOS/dihedral_opls_kokkos.h b/src/KOKKOS/dihedral_opls_kokkos.h index 0a8860c87c..2594f5e74d 100644 --- a/src/KOKKOS/dihedral_opls_kokkos.h +++ b/src/KOKKOS/dihedral_opls_kokkos.h @@ -83,10 +83,10 @@ class DihedralOPLSKokkos : public DihedralOPLS { DAT::tdual_ffloat_1d k_k3; DAT::tdual_ffloat_1d k_k4; - DAT::t_ffloat_1d d_k1; - DAT::t_ffloat_1d d_k2; - DAT::t_ffloat_1d d_k3; - DAT::t_ffloat_1d d_k4; + typename AT::t_ffloat_1d d_k1; + typename AT::t_ffloat_1d d_k2; + typename AT::t_ffloat_1d d_k3; + typename AT::t_ffloat_1d d_k4; virtual void allocate(); }; diff --git a/src/KOKKOS/improper_harmonic_kokkos.cpp b/src/KOKKOS/improper_harmonic_kokkos.cpp index 1e58e18c51..73e105864f 100644 --- a/src/KOKKOS/improper_harmonic_kokkos.cpp +++ b/src/KOKKOS/improper_harmonic_kokkos.cpp @@ -309,8 +309,8 @@ void ImproperHarmonicKokkos::allocate() k_k = Kokkos::DualView("ImproperHarmonic::k",n+1); k_chi = Kokkos::DualView("ImproperHarmonic::chi",n+1); - d_k = k_k.d_view; - d_chi = k_chi.d_view; + d_k = k_k.template view(); + d_chi = k_chi.template view(); } /* ---------------------------------------------------------------------- diff --git a/src/KOKKOS/pair_buck_coul_cut_kokkos.cpp b/src/KOKKOS/pair_buck_coul_cut_kokkos.cpp index 34fd427226..0da8a0a3d6 100644 --- a/src/KOKKOS/pair_buck_coul_cut_kokkos.cpp +++ b/src/KOKKOS/pair_buck_coul_cut_kokkos.cpp @@ -261,7 +261,7 @@ void PairBuckCoulCutKokkos::allocate() memory->create_kokkos(k_cut_coulsq,cut_coulsq,n+1,n+1,"pair:cut_coulsq"); d_cut_coulsq = k_cut_coulsq.template view(); k_params = Kokkos::DualView("PairBuckCoulCut::params",n+1,n+1); - params = k_params.d_view; + params = k_params.template view(); } /* ---------------------------------------------------------------------- diff --git a/src/KOKKOS/pair_buck_coul_long_kokkos.cpp b/src/KOKKOS/pair_buck_coul_long_kokkos.cpp index 243bac5ab7..3a5cbd868f 100644 --- a/src/KOKKOS/pair_buck_coul_long_kokkos.cpp +++ b/src/KOKKOS/pair_buck_coul_long_kokkos.cpp @@ -319,7 +319,7 @@ void PairBuckCoulLongKokkos::allocate() d_cut_coulsq = k_cut_coulsq.template view(); k_params = Kokkos::DualView("PairBuckCoulLong::params",n+1,n+1); - params = k_params.d_view; + params = k_params.template view(); } template diff --git a/src/KOKKOS/pair_buck_kokkos.cpp b/src/KOKKOS/pair_buck_kokkos.cpp index d8534f7900..e7640471d5 100644 --- a/src/KOKKOS/pair_buck_kokkos.cpp +++ b/src/KOKKOS/pair_buck_kokkos.cpp @@ -197,7 +197,7 @@ void PairBuckKokkos::allocate() memory->create_kokkos(k_cutsq,cutsq,n+1,n+1,"pair:cutsq"); d_cutsq = k_cutsq.template view(); k_params = Kokkos::DualView("PairBuck::params",n+1,n+1); - params = k_params.d_view; + params = k_params.template view(); } /* ---------------------------------------------------------------------- diff --git a/src/KOKKOS/pair_coul_cut_kokkos.cpp b/src/KOKKOS/pair_coul_cut_kokkos.cpp index 80ab01d91a..8edf093e2e 100644 --- a/src/KOKKOS/pair_coul_cut_kokkos.cpp +++ b/src/KOKKOS/pair_coul_cut_kokkos.cpp @@ -199,7 +199,7 @@ void PairCoulCutKokkos::allocate() d_cut_coulsq = k_cut_coulsq.template view(); k_params = Kokkos::DualView("PairCoulCut::params",n+1,n+1); - params = k_params.d_view; + params = k_params.template view(); } /* ---------------------------------------------------------------------- diff --git a/src/KOKKOS/pair_coul_debye_kokkos.cpp b/src/KOKKOS/pair_coul_debye_kokkos.cpp index 0771572e46..c331ab8da8 100644 --- a/src/KOKKOS/pair_coul_debye_kokkos.cpp +++ b/src/KOKKOS/pair_coul_debye_kokkos.cpp @@ -221,7 +221,7 @@ void PairCoulDebyeKokkos::allocate() memory->create_kokkos(k_cutsq,cutsq,n+1,n+1,"pair:cutsq"); d_cutsq = k_cutsq.template view(); k_params = Kokkos::DualView("PairCoulDebye::params",n+1,n+1); - params = k_params.d_view; + params = k_params.template view(); } /* ---------------------------------------------------------------------- diff --git a/src/KOKKOS/pair_coul_long_kokkos.cpp b/src/KOKKOS/pair_coul_long_kokkos.cpp index 7dbadf4834..721e140e33 100644 --- a/src/KOKKOS/pair_coul_long_kokkos.cpp +++ b/src/KOKKOS/pair_coul_long_kokkos.cpp @@ -279,7 +279,7 @@ void PairCoulLongKokkos::allocate() d_cut_coulsq = k_cut_coulsq.template view(); k_params = Kokkos::DualView("PairCoulLong::params",n+1,n+1); - params = k_params.d_view; + params = k_params.template view(); } template diff --git a/src/KOKKOS/pair_eam_alloy_kokkos.cpp b/src/KOKKOS/pair_eam_alloy_kokkos.cpp index f8b7a69d60..b7e0175147 100644 --- a/src/KOKKOS/pair_eam_alloy_kokkos.cpp +++ b/src/KOKKOS/pair_eam_alloy_kokkos.cpp @@ -101,8 +101,8 @@ void PairEAMAlloyKokkos::compute(int eflag_in, int vflag_in) nmax = atom->nmax; k_rho = DAT::tdual_ffloat_1d("pair:rho",nmax); k_fp = DAT::tdual_ffloat_1d("pair:fp",nmax); - d_rho = k_rho.d_view; - d_fp = k_fp.d_view; + d_rho = k_rho.template view(); + d_fp = k_fp.template view(); h_rho = k_rho.h_view; h_fp = k_fp.h_view; } @@ -322,9 +322,9 @@ void PairEAMAlloyKokkos::file2array() k_type2z2r.template modify(); k_type2z2r.template sync(); - d_type2frho = k_type2frho.d_view; - d_type2rhor = k_type2rhor.d_view; - d_type2z2r = k_type2z2r.d_view; + d_type2frho = k_type2frho.template view(); + d_type2rhor = k_type2rhor.template view(); + d_type2z2r = k_type2z2r.template view(); } /* ---------------------------------------------------------------------- */ @@ -358,9 +358,9 @@ void PairEAMAlloyKokkos::array2spline() k_z2r_spline.template modify(); k_z2r_spline.template sync(); - d_frho_spline = k_frho_spline.d_view; - d_rhor_spline = k_rhor_spline.d_view; - d_z2r_spline = k_z2r_spline.d_view; + d_frho_spline = k_frho_spline.template view(); + d_rhor_spline = k_rhor_spline.template view(); + d_z2r_spline = k_z2r_spline.template view(); } /* ---------------------------------------------------------------------- */ diff --git a/src/KOKKOS/pair_eam_alloy_kokkos.h b/src/KOKKOS/pair_eam_alloy_kokkos.h index d8c745b230..fb07eec32b 100644 --- a/src/KOKKOS/pair_eam_alloy_kokkos.h +++ b/src/KOKKOS/pair_eam_alloy_kokkos.h @@ -130,15 +130,15 @@ class PairEAMAlloyKokkos : public PairEAM { DAT::tdual_ffloat_1d k_rho; DAT::tdual_ffloat_1d k_fp; - DAT::t_ffloat_1d d_rho; + typename AT::t_ffloat_1d d_rho; typename AT::t_ffloat_1d v_rho; - DAT::t_ffloat_1d d_fp; + typename AT::t_ffloat_1d d_fp; HAT::t_ffloat_1d h_rho; HAT::t_ffloat_1d h_fp; - DAT::t_int_1d_randomread d_type2frho; - DAT::t_int_2d_randomread d_type2rhor; - DAT::t_int_2d_randomread d_type2z2r; + typename AT::t_int_1d_randomread d_type2frho; + typename AT::t_int_2d_randomread d_type2rhor; + typename AT::t_int_2d_randomread d_type2z2r; typedef Kokkos::DualView tdual_ffloat_2d_n7; typedef typename tdual_ffloat_2d_n7::t_dev_const_randomread t_ffloat_2d_n7_randomread; diff --git a/src/KOKKOS/pair_eam_fs_kokkos.cpp b/src/KOKKOS/pair_eam_fs_kokkos.cpp index 57820afb26..982082937e 100644 --- a/src/KOKKOS/pair_eam_fs_kokkos.cpp +++ b/src/KOKKOS/pair_eam_fs_kokkos.cpp @@ -101,8 +101,8 @@ void PairEAMFSKokkos::compute(int eflag_in, int vflag_in) nmax = atom->nmax; k_rho = DAT::tdual_ffloat_1d("pair:rho",nmax); k_fp = DAT::tdual_ffloat_1d("pair:fp",nmax); - d_rho = k_rho.d_view; - d_fp = k_fp.d_view; + d_rho = k_rho.template view(); + d_fp = k_fp.template view(); h_rho = k_rho.h_view; h_fp = k_fp.h_view; } @@ -322,9 +322,9 @@ void PairEAMFSKokkos::file2array() k_type2z2r.template modify(); k_type2z2r.template sync(); - d_type2frho = k_type2frho.d_view; - d_type2rhor = k_type2rhor.d_view; - d_type2z2r = k_type2z2r.d_view; + d_type2frho = k_type2frho.template view(); + d_type2rhor = k_type2rhor.template view(); + d_type2z2r = k_type2z2r.template view(); } /* ---------------------------------------------------------------------- */ @@ -358,9 +358,9 @@ void PairEAMFSKokkos::array2spline() k_z2r_spline.template modify(); k_z2r_spline.template sync(); - d_frho_spline = k_frho_spline.d_view; - d_rhor_spline = k_rhor_spline.d_view; - d_z2r_spline = k_z2r_spline.d_view; + d_frho_spline = k_frho_spline.template view(); + d_rhor_spline = k_rhor_spline.template view(); + d_z2r_spline = k_z2r_spline.template view(); } /* ---------------------------------------------------------------------- */ diff --git a/src/KOKKOS/pair_eam_fs_kokkos.h b/src/KOKKOS/pair_eam_fs_kokkos.h index 40375af066..d71ec2b887 100644 --- a/src/KOKKOS/pair_eam_fs_kokkos.h +++ b/src/KOKKOS/pair_eam_fs_kokkos.h @@ -130,15 +130,15 @@ class PairEAMFSKokkos : public PairEAM { DAT::tdual_ffloat_1d k_rho; DAT::tdual_ffloat_1d k_fp; - DAT::t_ffloat_1d d_rho; + typename AT::t_ffloat_1d d_rho; typename AT::t_ffloat_1d v_rho; - DAT::t_ffloat_1d d_fp; + typename AT::t_ffloat_1d d_fp; HAT::t_ffloat_1d h_rho; HAT::t_ffloat_1d h_fp; - DAT::t_int_1d_randomread d_type2frho; - DAT::t_int_2d_randomread d_type2rhor; - DAT::t_int_2d_randomread d_type2z2r; + typename AT::t_int_1d_randomread d_type2frho; + typename AT::t_int_2d_randomread d_type2rhor; + typename AT::t_int_2d_randomread d_type2z2r; typedef Kokkos::DualView tdual_ffloat_2d_n7; typedef typename tdual_ffloat_2d_n7::t_dev_const_randomread t_ffloat_2d_n7_randomread; diff --git a/src/KOKKOS/pair_eam_kokkos.cpp b/src/KOKKOS/pair_eam_kokkos.cpp index 6b2588475f..8ac92a1766 100644 --- a/src/KOKKOS/pair_eam_kokkos.cpp +++ b/src/KOKKOS/pair_eam_kokkos.cpp @@ -96,8 +96,8 @@ void PairEAMKokkos::compute(int eflag_in, int vflag_in) nmax = atom->nmax; k_rho = DAT::tdual_ffloat_1d("pair:rho",nmax); k_fp = DAT::tdual_ffloat_1d("pair:fp",nmax); - d_rho = k_rho.d_view; - d_fp = k_fp.d_view; + d_rho = k_rho.template view(); + d_fp = k_fp.template view(); h_rho = k_rho.h_view; h_fp = k_fp.h_view; } @@ -322,9 +322,9 @@ void PairEAMKokkos::file2array() k_type2z2r.template modify(); k_type2z2r.template sync(); - d_type2frho = k_type2frho.d_view; - d_type2rhor = k_type2rhor.d_view; - d_type2z2r = k_type2z2r.d_view; + d_type2frho = k_type2frho.template view(); + d_type2rhor = k_type2rhor.template view(); + d_type2z2r = k_type2z2r.template view(); } /* ---------------------------------------------------------------------- */ @@ -358,9 +358,9 @@ void PairEAMKokkos::array2spline() k_z2r_spline.template modify(); k_z2r_spline.template sync(); - d_frho_spline = k_frho_spline.d_view; - d_rhor_spline = k_rhor_spline.d_view; - d_z2r_spline = k_z2r_spline.d_view; + d_frho_spline = k_frho_spline.template view(); + d_rhor_spline = k_rhor_spline.template view(); + d_z2r_spline = k_z2r_spline.template view(); } /* ---------------------------------------------------------------------- */ diff --git a/src/KOKKOS/pair_eam_kokkos.h b/src/KOKKOS/pair_eam_kokkos.h index 229b16471d..856cc51f77 100644 --- a/src/KOKKOS/pair_eam_kokkos.h +++ b/src/KOKKOS/pair_eam_kokkos.h @@ -127,15 +127,15 @@ class PairEAMKokkos : public PairEAM { DAT::tdual_ffloat_1d k_rho; DAT::tdual_ffloat_1d k_fp; - DAT::t_ffloat_1d d_rho; + typename AT::t_ffloat_1d d_rho; typename AT::t_ffloat_1d v_rho; - DAT::t_ffloat_1d d_fp; + typename AT::t_ffloat_1d d_fp; HAT::t_ffloat_1d h_rho; HAT::t_ffloat_1d h_fp; - DAT::t_int_1d_randomread d_type2frho; - DAT::t_int_2d_randomread d_type2rhor; - DAT::t_int_2d_randomread d_type2z2r; + typename AT::t_int_1d_randomread d_type2frho; + typename AT::t_int_2d_randomread d_type2rhor; + typename AT::t_int_2d_randomread d_type2z2r; typedef Kokkos::DualView tdual_ffloat_2d_n7; typedef typename tdual_ffloat_2d_n7::t_dev_const_randomread t_ffloat_2d_n7_randomread; diff --git a/src/KOKKOS/pair_lj_charmm_coul_charmm_implicit_kokkos.cpp b/src/KOKKOS/pair_lj_charmm_coul_charmm_implicit_kokkos.cpp index c00b1fbae4..e7cf7ba42a 100644 --- a/src/KOKKOS/pair_lj_charmm_coul_charmm_implicit_kokkos.cpp +++ b/src/KOKKOS/pair_lj_charmm_coul_charmm_implicit_kokkos.cpp @@ -326,7 +326,7 @@ void PairLJCharmmCoulCharmmImplicitKokkos::allocate() d_cut_coulsq = k_cut_coulsq.template view(); k_params = Kokkos::DualView("PairLJCharmmCoulCharmmImplicit::params",n+1,n+1); - params = k_params.d_view; + params = k_params.template view(); } template diff --git a/src/KOKKOS/pair_lj_charmm_coul_charmm_kokkos.cpp b/src/KOKKOS/pair_lj_charmm_coul_charmm_kokkos.cpp index c88c7db2e3..a456d6e276 100644 --- a/src/KOKKOS/pair_lj_charmm_coul_charmm_kokkos.cpp +++ b/src/KOKKOS/pair_lj_charmm_coul_charmm_kokkos.cpp @@ -327,7 +327,7 @@ void PairLJCharmmCoulCharmmKokkos::allocate() d_cut_coulsq = k_cut_coulsq.template view(); k_params = Kokkos::DualView("PairLJCharmmCoulCharmm::params",n+1,n+1); - params = k_params.d_view; + params = k_params.template view(); } template diff --git a/src/KOKKOS/pair_lj_charmm_coul_long_kokkos.cpp b/src/KOKKOS/pair_lj_charmm_coul_long_kokkos.cpp index 8ebc5f87f3..dffbbb638f 100644 --- a/src/KOKKOS/pair_lj_charmm_coul_long_kokkos.cpp +++ b/src/KOKKOS/pair_lj_charmm_coul_long_kokkos.cpp @@ -347,7 +347,7 @@ void PairLJCharmmCoulLongKokkos::allocate() d_cut_coulsq = k_cut_coulsq.template view(); k_params = Kokkos::DualView("PairLJCharmmCoulLong::params",n+1,n+1); - params = k_params.d_view; + params = k_params.template view(); } template diff --git a/src/KOKKOS/pair_lj_class2_coul_cut_kokkos.cpp b/src/KOKKOS/pair_lj_class2_coul_cut_kokkos.cpp index 936eae79d5..0081aca4f1 100644 --- a/src/KOKKOS/pair_lj_class2_coul_cut_kokkos.cpp +++ b/src/KOKKOS/pair_lj_class2_coul_cut_kokkos.cpp @@ -264,7 +264,7 @@ void PairLJClass2CoulCutKokkos::allocate() memory->create_kokkos(k_cut_coulsq,cut_coulsq,n+1,n+1,"pair:cut_coulsq"); d_cut_coulsq = k_cut_coulsq.template view(); k_params = Kokkos::DualView("PairLJClass2CoulCut::params",n+1,n+1); - params = k_params.d_view; + params = k_params.template view(); } /* ---------------------------------------------------------------------- diff --git a/src/KOKKOS/pair_lj_class2_coul_long_kokkos.cpp b/src/KOKKOS/pair_lj_class2_coul_long_kokkos.cpp index 268213cdbc..b5dc358feb 100644 --- a/src/KOKKOS/pair_lj_class2_coul_long_kokkos.cpp +++ b/src/KOKKOS/pair_lj_class2_coul_long_kokkos.cpp @@ -316,7 +316,7 @@ void PairLJClass2CoulLongKokkos::allocate() memory->create_kokkos(k_cut_coulsq,n+1,n+1,"pair:cut_coulsq"); d_cut_coulsq = k_cut_coulsq.template view(); k_params = Kokkos::DualView("PairLJClass2CoulLong::params",n+1,n+1); - params = k_params.d_view; + params = k_params.template view(); } template diff --git a/src/KOKKOS/pair_lj_class2_kokkos.cpp b/src/KOKKOS/pair_lj_class2_kokkos.cpp index c899327d7c..34cc15279b 100644 --- a/src/KOKKOS/pair_lj_class2_kokkos.cpp +++ b/src/KOKKOS/pair_lj_class2_kokkos.cpp @@ -203,7 +203,7 @@ void PairLJClass2Kokkos::allocate() memory->create_kokkos(k_cutsq,cutsq,n+1,n+1,"pair:cutsq"); d_cutsq = k_cutsq.template view(); k_params = Kokkos::DualView("PairLJClass2::params",n+1,n+1); - params = k_params.d_view; + params = k_params.template view(); } /* ---------------------------------------------------------------------- diff --git a/src/KOKKOS/pair_lj_cut_coul_cut_kokkos.cpp b/src/KOKKOS/pair_lj_cut_coul_cut_kokkos.cpp index f4de48f176..c3fda01ce6 100644 --- a/src/KOKKOS/pair_lj_cut_coul_cut_kokkos.cpp +++ b/src/KOKKOS/pair_lj_cut_coul_cut_kokkos.cpp @@ -256,7 +256,7 @@ void PairLJCutCoulCutKokkos::allocate() memory->create_kokkos(k_cut_coulsq,cut_coulsq,n+1,n+1,"pair:cut_coulsq"); d_cut_coulsq = k_cut_coulsq.template view(); k_params = Kokkos::DualView("PairLJCutCoulCut::params",n+1,n+1); - params = k_params.d_view; + params = k_params.template view(); } /* ---------------------------------------------------------------------- diff --git a/src/KOKKOS/pair_lj_cut_coul_debye_kokkos.cpp b/src/KOKKOS/pair_lj_cut_coul_debye_kokkos.cpp index ad51dd0a88..b7a71cb99a 100644 --- a/src/KOKKOS/pair_lj_cut_coul_debye_kokkos.cpp +++ b/src/KOKKOS/pair_lj_cut_coul_debye_kokkos.cpp @@ -270,7 +270,7 @@ void PairLJCutCoulDebyeKokkos::allocate() memory->create_kokkos(k_cut_coulsq,cut_coulsq,n+1,n+1,"pair:cut_coulsq"); d_cut_coulsq = k_cut_coulsq.template view(); k_params = Kokkos::DualView("PairLJCutCoulDebye::params",n+1,n+1); - params = k_params.d_view; + params = k_params.template view(); } /* ---------------------------------------------------------------------- diff --git a/src/KOKKOS/pair_lj_cut_coul_dsf_kokkos.cpp b/src/KOKKOS/pair_lj_cut_coul_dsf_kokkos.cpp index 89f263113e..9df5963676 100644 --- a/src/KOKKOS/pair_lj_cut_coul_dsf_kokkos.cpp +++ b/src/KOKKOS/pair_lj_cut_coul_dsf_kokkos.cpp @@ -288,7 +288,7 @@ void PairLJCutCoulDSFKokkos::allocate() memory->create_kokkos(k_cut_coulsq,n+1,n+1,"pair:cut_coulsq"); d_cut_coulsq = k_cut_coulsq.template view(); k_params = Kokkos::DualView("PairLJCutCoulDSF::params",n+1,n+1); - params = k_params.d_view; + params = k_params.template view(); } /* ---------------------------------------------------------------------- diff --git a/src/KOKKOS/pair_lj_cut_coul_long_kokkos.cpp b/src/KOKKOS/pair_lj_cut_coul_long_kokkos.cpp index 4de51ca8d2..9bd79c7341 100644 --- a/src/KOKKOS/pair_lj_cut_coul_long_kokkos.cpp +++ b/src/KOKKOS/pair_lj_cut_coul_long_kokkos.cpp @@ -313,7 +313,7 @@ void PairLJCutCoulLongKokkos::allocate() memory->create_kokkos(k_cut_coulsq,n+1,n+1,"pair:cut_coulsq"); d_cut_coulsq = k_cut_coulsq.template view(); k_params = Kokkos::DualView("PairLJCutCoulLong::params",n+1,n+1); - params = k_params.d_view; + params = k_params.template view(); } template diff --git a/src/KOKKOS/pair_lj_cut_kokkos.cpp b/src/KOKKOS/pair_lj_cut_kokkos.cpp index ea78b73711..c90d5ad11c 100644 --- a/src/KOKKOS/pair_lj_cut_kokkos.cpp +++ b/src/KOKKOS/pair_lj_cut_kokkos.cpp @@ -198,7 +198,7 @@ void PairLJCutKokkos::allocate() memory->create_kokkos(k_cutsq,cutsq,n+1,n+1,"pair:cutsq"); d_cutsq = k_cutsq.template view(); k_params = Kokkos::DualView("PairLJCut::params",n+1,n+1); - params = k_params.d_view; + params = k_params.template view(); } /* ---------------------------------------------------------------------- diff --git a/src/KOKKOS/pair_lj_expand_kokkos.cpp b/src/KOKKOS/pair_lj_expand_kokkos.cpp index 6b62150632..95ec252ad5 100644 --- a/src/KOKKOS/pair_lj_expand_kokkos.cpp +++ b/src/KOKKOS/pair_lj_expand_kokkos.cpp @@ -205,7 +205,7 @@ void PairLJExpandKokkos::allocate() memory->create_kokkos(k_cutsq,cutsq,n+1,n+1,"pair:cutsq"); d_cutsq = k_cutsq.template view(); k_params = Kokkos::DualView("PairLJExpand::params",n+1,n+1); - params = k_params.d_view; + params = k_params.template view(); } /* ---------------------------------------------------------------------- diff --git a/src/KOKKOS/pair_lj_gromacs_coul_gromacs_kokkos.cpp b/src/KOKKOS/pair_lj_gromacs_coul_gromacs_kokkos.cpp index 0c492131dd..4b21b08eb3 100644 --- a/src/KOKKOS/pair_lj_gromacs_coul_gromacs_kokkos.cpp +++ b/src/KOKKOS/pair_lj_gromacs_coul_gromacs_kokkos.cpp @@ -310,7 +310,7 @@ void PairLJGromacsCoulGromacsKokkos::allocate() d_cut_coulsq = k_cut_coulsq.template view(); k_params = Kokkos::DualView("PairLJGromacsCoulGromacs::params",n+1,n+1); - params = k_params.d_view; + params = k_params.template view(); } template diff --git a/src/KOKKOS/pair_lj_gromacs_kokkos.cpp b/src/KOKKOS/pair_lj_gromacs_kokkos.cpp index 76d7abbe28..73a17d7b22 100644 --- a/src/KOKKOS/pair_lj_gromacs_kokkos.cpp +++ b/src/KOKKOS/pair_lj_gromacs_kokkos.cpp @@ -252,7 +252,7 @@ void PairLJGromacsKokkos::allocate() d_cut_inner_sq = k_cut_inner_sq.template view(); k_params = Kokkos::DualView("PairLJGromacs::params",n+1,n+1); - params = k_params.d_view; + params = k_params.template view(); } /* ---------------------------------------------------------------------- diff --git a/src/KOKKOS/pair_lj_sdk_kokkos.cpp b/src/KOKKOS/pair_lj_sdk_kokkos.cpp index 41561c2988..2063f62b20 100644 --- a/src/KOKKOS/pair_lj_sdk_kokkos.cpp +++ b/src/KOKKOS/pair_lj_sdk_kokkos.cpp @@ -234,7 +234,7 @@ void PairLJSDKKokkos::allocate() memory->create_kokkos(k_cutsq,cutsq,n+1,n+1,"pair:cutsq"); d_cutsq = k_cutsq.template view(); k_params = Kokkos::DualView("PairLJSDK::params",n+1,n+1); - params = k_params.d_view; + params = k_params.template view(); } /* ---------------------------------------------------------------------- diff --git a/src/KOKKOS/pair_morse_kokkos.cpp b/src/KOKKOS/pair_morse_kokkos.cpp index 3201fad215..08a9b82640 100644 --- a/src/KOKKOS/pair_morse_kokkos.cpp +++ b/src/KOKKOS/pair_morse_kokkos.cpp @@ -212,7 +212,7 @@ void PairMorseKokkos::allocate() memory->create_kokkos(k_cutsq,cutsq,n+1,n+1,"pair:cutsq"); d_cutsq = k_cutsq.template view(); k_params = Kokkos::DualView("PairMorse::params",n+1,n+1); - params = k_params.d_view; + params = k_params.template view(); } /* ---------------------------------------------------------------------- diff --git a/src/KOKKOS/pair_tersoff_mod_kokkos.cpp b/src/KOKKOS/pair_tersoff_mod_kokkos.cpp index d77ba2f141..9a59979f4c 100644 --- a/src/KOKKOS/pair_tersoff_mod_kokkos.cpp +++ b/src/KOKKOS/pair_tersoff_mod_kokkos.cpp @@ -76,7 +76,7 @@ void PairTersoffMODKokkos::allocate() k_params = Kokkos::DualView ("PairTersoffMOD::paramskk",n+1,n+1,n+1); - paramskk = k_params.d_view; + paramskk = k_params.template view(); } /* ---------------------------------------------------------------------- diff --git a/src/KOKKOS/pair_tersoff_zbl_kokkos.cpp b/src/KOKKOS/pair_tersoff_zbl_kokkos.cpp index 040d8c5230..8468bb01f5 100644 --- a/src/KOKKOS/pair_tersoff_zbl_kokkos.cpp +++ b/src/KOKKOS/pair_tersoff_zbl_kokkos.cpp @@ -87,7 +87,7 @@ void PairTersoffZBLKokkos::allocate() k_params = Kokkos::DualView ("PairTersoffZBL::paramskk",n+1,n+1,n+1); - paramskk = k_params.d_view; + paramskk = k_params.template view(); } /* ---------------------------------------------------------------------- From 8d485ea128d90a7b50bf90e5f47cb759be9e2074 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Fri, 21 Jul 2017 16:04:18 -0600 Subject: [PATCH 06/15] Remove hardcoded execution spaces --- src/KOKKOS/fix_nh_kokkos.cpp | 2 +- src/KOKKOS/fix_nve_kokkos.cpp | 2 +- src/KOKKOS/fix_qeq_reax_kokkos.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/KOKKOS/fix_nh_kokkos.cpp b/src/KOKKOS/fix_nh_kokkos.cpp index fb03bf68c6..7136c776a1 100644 --- a/src/KOKKOS/fix_nh_kokkos.cpp +++ b/src/KOKKOS/fix_nh_kokkos.cpp @@ -80,7 +80,7 @@ void FixNHKokkos::init() FixNH::init(); atomKK->k_mass.modify(); - atomKK->k_mass.sync(); + atomKK->k_mass.sync(); } /* ---------------------------------------------------------------------- diff --git a/src/KOKKOS/fix_nve_kokkos.cpp b/src/KOKKOS/fix_nve_kokkos.cpp index eb41443bab..c071447eb7 100644 --- a/src/KOKKOS/fix_nve_kokkos.cpp +++ b/src/KOKKOS/fix_nve_kokkos.cpp @@ -46,7 +46,7 @@ void FixNVEKokkos::init() FixNVE::init(); atomKK->k_mass.modify(); - atomKK->k_mass.sync(); + atomKK->k_mass.sync(); } /* ---------------------------------------------------------------------- diff --git a/src/KOKKOS/fix_qeq_reax_kokkos.cpp b/src/KOKKOS/fix_qeq_reax_kokkos.cpp index cef003222a..e54b53ae89 100644 --- a/src/KOKKOS/fix_qeq_reax_kokkos.cpp +++ b/src/KOKKOS/fix_qeq_reax_kokkos.cpp @@ -79,7 +79,7 @@ template void FixQEqReaxKokkos::init() { atomKK->k_q.modify(); - atomKK->k_q.sync(); + atomKK->k_q.sync(); FixQEqReax::init(); From 633ca33f2f9163a4bbe740801e28efa9d4a5d7ce Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Tue, 25 Jul 2017 13:08:24 -0600 Subject: [PATCH 07/15] Fix issue in Kokkos neighborlist --- src/KOKKOS/npair_kokkos.cpp | 10 ++++++++-- src/KOKKOS/npair_kokkos.h | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/KOKKOS/npair_kokkos.cpp b/src/KOKKOS/npair_kokkos.cpp index b7b550369d..fd5f9373f2 100644 --- a/src/KOKKOS/npair_kokkos.cpp +++ b/src/KOKKOS/npair_kokkos.cpp @@ -201,14 +201,20 @@ if (GHOST) { if (newton_pair) { NPairKokkosBuildFunctor f(data,atoms_per_bin * 5 * sizeof(X_FLOAT) * factor); #ifdef KOKKOS_HAVE_CUDA - Kokkos::parallel_for(config, f); + if (ExecutionSpaceFromDevice::space == Device) + Kokkos::parallel_for(config, f); + else + Kokkos::parallel_for(nall, f); #else Kokkos::parallel_for(nall, f); #endif } else { NPairKokkosBuildFunctor f(data,atoms_per_bin * 5 * sizeof(X_FLOAT) * factor); #ifdef KOKKOS_HAVE_CUDA - Kokkos::parallel_for(config, f); + if (ExecutionSpaceFromDevice::space == Device) + Kokkos::parallel_for(config, f); + else + Kokkos::parallel_for(nall, f); #else Kokkos::parallel_for(nall, f); #endif diff --git a/src/KOKKOS/npair_kokkos.h b/src/KOKKOS/npair_kokkos.h index 53183114d3..a28b5ff978 100644 --- a/src/KOKKOS/npair_kokkos.h +++ b/src/KOKKOS/npair_kokkos.h @@ -409,7 +409,7 @@ struct NPairKokkosBuildFunctor { c.template build_Item(i); } - void operator() (typename Kokkos::TeamPolicy::member_type dev) const {} + void operator() (typename Kokkos::TeamPolicy::member_type dev) const {} // Should error out }; template From 557e5b964ad8ae26d61ddb4713575f3706fb6d74 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Tue, 25 Jul 2017 13:37:01 -0600 Subject: [PATCH 08/15] Fixing Kokkos execution space issue with regions --- src/KOKKOS/fix_setforce_kokkos.cpp | 6 +- src/KOKKOS/fix_setforce_kokkos.h | 4 +- src/KOKKOS/out.txt | 119 +++++++++++++++++++++++++++++ src/KOKKOS/region_block_kokkos.cpp | 6 +- src/KOKKOS/region_block_kokkos.h | 4 +- src/accelerator_kokkos.h | 2 +- src/region.cpp | 2 +- src/region.h | 2 +- 8 files changed, 134 insertions(+), 11 deletions(-) create mode 100644 src/KOKKOS/out.txt diff --git a/src/KOKKOS/fix_setforce_kokkos.cpp b/src/KOKKOS/fix_setforce_kokkos.cpp index 5e26ef3610..2ef04ad6ee 100644 --- a/src/KOKKOS/fix_setforce_kokkos.cpp +++ b/src/KOKKOS/fix_setforce_kokkos.cpp @@ -89,8 +89,10 @@ void FixSetForceKokkos::post_force(int vflag) if (iregion >= 0) { region = domain->regions[iregion]; region->prematch(); - d_match = DAT::t_int_1d("setforce:d_match",nlocal); - region->match_all_kokkos(groupbit,d_match); + DAT::tdual_int_1d k_match = DAT::tdual_int_1d("setforce:k_match",nlocal); + region->match_all_kokkos(groupbit,k_match); + k_match.template sync(); + d_match = k_match.template view(); } // reallocate sforce array if necessary diff --git a/src/KOKKOS/fix_setforce_kokkos.h b/src/KOKKOS/fix_setforce_kokkos.h index dffa22c93a..3cbf3d3720 100644 --- a/src/KOKKOS/fix_setforce_kokkos.h +++ b/src/KOKKOS/fix_setforce_kokkos.h @@ -75,8 +75,8 @@ class FixSetForceKokkos : public FixSetForce { private: DAT::tdual_ffloat_2d k_sforce; - DAT::t_ffloat_2d_randomread d_sforce; - DAT::t_int_1d d_match; + typename AT::t_ffloat_2d_randomread d_sforce; + typename AT::t_int_1d d_match; typename AT::t_x_array_randomread x; typename AT::t_f_array f; diff --git a/src/KOKKOS/out.txt b/src/KOKKOS/out.txt new file mode 100644 index 0000000000..0452e263ab --- /dev/null +++ b/src/KOKKOS/out.txt @@ -0,0 +1,119 @@ +atom_vec_angle_kokkos.cpp: k_count.modify(); +atom_vec_angle_kokkos.cpp: if (mask & X_MASK) atomKK->k_x.modify(); +atom_vec_angle_kokkos.cpp: if (mask & V_MASK) atomKK->k_v.modify(); +atom_vec_angle_kokkos.cpp: if (mask & F_MASK) atomKK->k_f.modify(); +atom_vec_angle_kokkos.cpp: if (mask & TAG_MASK) atomKK->k_tag.modify(); +atom_vec_angle_kokkos.cpp: if (mask & TYPE_MASK) atomKK->k_type.modify(); +atom_vec_angle_kokkos.cpp: if (mask & MASK_MASK) atomKK->k_mask.modify(); +atom_vec_angle_kokkos.cpp: if (mask & IMAGE_MASK) atomKK->k_image.modify(); +atom_vec_angle_kokkos.cpp: if (mask & MOLECULE_MASK) atomKK->k_molecule.modify(); +atom_vec_angle_kokkos.cpp: atomKK->k_nspecial.modify(); +atom_vec_angle_kokkos.cpp: atomKK->k_special.modify(); +atom_vec_angle_kokkos.cpp: atomKK->k_num_bond.modify(); +atom_vec_angle_kokkos.cpp: atomKK->k_bond_type.modify(); +atom_vec_angle_kokkos.cpp: atomKK->k_bond_atom.modify(); +atom_vec_angle_kokkos.cpp: atomKK->k_num_angle.modify(); +atom_vec_angle_kokkos.cpp: atomKK->k_angle_type.modify(); +atom_vec_angle_kokkos.cpp: atomKK->k_angle_atom1.modify(); +atom_vec_angle_kokkos.cpp: atomKK->k_angle_atom2.modify(); +atom_vec_angle_kokkos.cpp: atomKK->k_angle_atom3.modify(); +atom_vec_atomic_kokkos.cpp: k_count.modify(); +atom_vec_atomic_kokkos.cpp: if (mask & X_MASK) atomKK->k_x.modify(); +atom_vec_atomic_kokkos.cpp: if (mask & V_MASK) atomKK->k_v.modify(); +atom_vec_atomic_kokkos.cpp: if (mask & F_MASK) atomKK->k_f.modify(); +atom_vec_atomic_kokkos.cpp: if (mask & TAG_MASK) atomKK->k_tag.modify(); +atom_vec_atomic_kokkos.cpp: if (mask & TYPE_MASK) atomKK->k_type.modify(); +atom_vec_atomic_kokkos.cpp: if (mask & MASK_MASK) atomKK->k_mask.modify(); +atom_vec_atomic_kokkos.cpp: if (mask & IMAGE_MASK) atomKK->k_image.modify(); +atom_vec_bond_kokkos.cpp: k_count.modify(); +atom_vec_bond_kokkos.cpp: if (mask & X_MASK) atomKK->k_x.modify(); +atom_vec_bond_kokkos.cpp: if (mask & V_MASK) atomKK->k_v.modify(); +atom_vec_bond_kokkos.cpp: if (mask & F_MASK) atomKK->k_f.modify(); +atom_vec_bond_kokkos.cpp: if (mask & TAG_MASK) atomKK->k_tag.modify(); +atom_vec_bond_kokkos.cpp: if (mask & TYPE_MASK) atomKK->k_type.modify(); +atom_vec_bond_kokkos.cpp: if (mask & MASK_MASK) atomKK->k_mask.modify(); +atom_vec_bond_kokkos.cpp: if (mask & IMAGE_MASK) atomKK->k_image.modify(); +atom_vec_bond_kokkos.cpp: if (mask & MOLECULE_MASK) atomKK->k_molecule.modify(); +atom_vec_bond_kokkos.cpp: atomKK->k_nspecial.modify(); +atom_vec_bond_kokkos.cpp: atomKK->k_special.modify(); +atom_vec_bond_kokkos.cpp: atomKK->k_num_bond.modify(); +atom_vec_bond_kokkos.cpp: atomKK->k_bond_type.modify(); +atom_vec_bond_kokkos.cpp: atomKK->k_bond_atom.modify(); +atom_vec_charge_kokkos.cpp: k_count.modify(); +atom_vec_charge_kokkos.cpp: if (mask & X_MASK) atomKK->k_x.modify(); +atom_vec_charge_kokkos.cpp: if (mask & V_MASK) atomKK->k_v.modify(); +atom_vec_charge_kokkos.cpp: if (mask & F_MASK) atomKK->k_f.modify(); +atom_vec_charge_kokkos.cpp: if (mask & TAG_MASK) atomKK->k_tag.modify(); +atom_vec_charge_kokkos.cpp: if (mask & TYPE_MASK) atomKK->k_type.modify(); +atom_vec_charge_kokkos.cpp: if (mask & MASK_MASK) atomKK->k_mask.modify(); +atom_vec_charge_kokkos.cpp: if (mask & IMAGE_MASK) atomKK->k_image.modify(); +atom_vec_charge_kokkos.cpp: if (mask & Q_MASK) atomKK->k_q.modify(); +atom_vec_full_kokkos.cpp: k_count.modify(); +atom_vec_full_kokkos.cpp: if (mask & X_MASK) atomKK->k_x.modify(); +atom_vec_full_kokkos.cpp: if (mask & V_MASK) atomKK->k_v.modify(); +atom_vec_full_kokkos.cpp: if (mask & F_MASK) atomKK->k_f.modify(); +atom_vec_full_kokkos.cpp: if (mask & TAG_MASK) atomKK->k_tag.modify(); +atom_vec_full_kokkos.cpp: if (mask & TYPE_MASK) atomKK->k_type.modify(); +atom_vec_full_kokkos.cpp: if (mask & MASK_MASK) atomKK->k_mask.modify(); +atom_vec_full_kokkos.cpp: if (mask & IMAGE_MASK) atomKK->k_image.modify(); +atom_vec_full_kokkos.cpp: if (mask & Q_MASK) atomKK->k_q.modify(); +atom_vec_full_kokkos.cpp: if (mask & MOLECULE_MASK) atomKK->k_molecule.modify(); +atom_vec_full_kokkos.cpp: atomKK->k_nspecial.modify(); +atom_vec_full_kokkos.cpp: atomKK->k_special.modify(); +atom_vec_full_kokkos.cpp: atomKK->k_num_bond.modify(); +atom_vec_full_kokkos.cpp: atomKK->k_bond_type.modify(); +atom_vec_full_kokkos.cpp: atomKK->k_bond_atom.modify(); +atom_vec_full_kokkos.cpp: atomKK->k_num_angle.modify(); +atom_vec_full_kokkos.cpp: atomKK->k_angle_type.modify(); +atom_vec_full_kokkos.cpp: atomKK->k_angle_atom1.modify(); +atom_vec_full_kokkos.cpp: atomKK->k_angle_atom2.modify(); +atom_vec_full_kokkos.cpp: atomKK->k_angle_atom3.modify(); +atom_vec_full_kokkos.cpp: atomKK->k_num_dihedral.modify(); +atom_vec_full_kokkos.cpp: atomKK->k_dihedral_type.modify(); +atom_vec_full_kokkos.cpp: atomKK->k_dihedral_atom1.modify(); +atom_vec_full_kokkos.cpp: atomKK->k_dihedral_atom2.modify(); +atom_vec_full_kokkos.cpp: atomKK->k_dihedral_atom3.modify(); +atom_vec_full_kokkos.cpp: atomKK->k_dihedral_atom4.modify(); +atom_vec_full_kokkos.cpp: atomKK->k_num_improper.modify(); +atom_vec_full_kokkos.cpp: atomKK->k_improper_type.modify(); +atom_vec_full_kokkos.cpp: atomKK->k_improper_atom1.modify(); +atom_vec_full_kokkos.cpp: atomKK->k_improper_atom2.modify(); +atom_vec_full_kokkos.cpp: atomKK->k_improper_atom3.modify(); +atom_vec_full_kokkos.cpp: atomKK->k_improper_atom4.modify(); +atom_vec_molecular_kokkos.cpp: k_count.modify(); +atom_vec_molecular_kokkos.cpp: if (mask & X_MASK) atomKK->k_x.modify(); +atom_vec_molecular_kokkos.cpp: if (mask & V_MASK) atomKK->k_v.modify(); +atom_vec_molecular_kokkos.cpp: if (mask & F_MASK) atomKK->k_f.modify(); +atom_vec_molecular_kokkos.cpp: if (mask & TAG_MASK) atomKK->k_tag.modify(); +atom_vec_molecular_kokkos.cpp: if (mask & TYPE_MASK) atomKK->k_type.modify(); +atom_vec_molecular_kokkos.cpp: if (mask & MASK_MASK) atomKK->k_mask.modify(); +atom_vec_molecular_kokkos.cpp: if (mask & IMAGE_MASK) atomKK->k_image.modify(); +atom_vec_molecular_kokkos.cpp: if (mask & MOLECULE_MASK) atomKK->k_molecule.modify(); +atom_vec_molecular_kokkos.cpp: atomKK->k_nspecial.modify(); +atom_vec_molecular_kokkos.cpp: atomKK->k_special.modify(); +atom_vec_molecular_kokkos.cpp: atomKK->k_num_bond.modify(); +atom_vec_molecular_kokkos.cpp: atomKK->k_bond_type.modify(); +atom_vec_molecular_kokkos.cpp: atomKK->k_bond_atom.modify(); +atom_vec_molecular_kokkos.cpp: atomKK->k_num_angle.modify(); +atom_vec_molecular_kokkos.cpp: atomKK->k_angle_type.modify(); +atom_vec_molecular_kokkos.cpp: atomKK->k_angle_atom1.modify(); +atom_vec_molecular_kokkos.cpp: atomKK->k_angle_atom2.modify(); +atom_vec_molecular_kokkos.cpp: atomKK->k_angle_atom3.modify(); +atom_vec_molecular_kokkos.cpp: atomKK->k_num_dihedral.modify(); +atom_vec_molecular_kokkos.cpp: atomKK->k_dihedral_type.modify(); +atom_vec_molecular_kokkos.cpp: atomKK->k_dihedral_atom1.modify(); +atom_vec_molecular_kokkos.cpp: atomKK->k_dihedral_atom2.modify(); +atom_vec_molecular_kokkos.cpp: atomKK->k_dihedral_atom3.modify(); +atom_vec_molecular_kokkos.cpp: atomKK->k_dihedral_atom4.modify(); +atom_vec_molecular_kokkos.cpp: atomKK->k_num_improper.modify(); +atom_vec_molecular_kokkos.cpp: atomKK->k_improper_type.modify(); +atom_vec_molecular_kokkos.cpp: atomKK->k_improper_atom1.modify(); +atom_vec_molecular_kokkos.cpp: atomKK->k_improper_atom2.modify(); +atom_vec_molecular_kokkos.cpp: atomKK->k_improper_atom3.modify(); +atom_vec_molecular_kokkos.cpp: atomKK->k_improper_atom4.modify(); +comm_kokkos.cpp: k_buf_send.modify(); +neighbor_kokkos.cpp: k_bondlist.modify(); +neighbor_kokkos.cpp: k_anglelist.modify(); +neighbor_kokkos.cpp: k_dihedrallist.modify(); +neighbor_kokkos.cpp: k_improperlist.modify(); +verlet_kokkos.cpp: atomKK->k_f.modify(); diff --git a/src/KOKKOS/region_block_kokkos.cpp b/src/KOKKOS/region_block_kokkos.cpp index 6734d7fdd1..90fd47ab06 100644 --- a/src/KOKKOS/region_block_kokkos.cpp +++ b/src/KOKKOS/region_block_kokkos.cpp @@ -54,10 +54,10 @@ int RegBlockKokkos::k_inside(double x, double y, double z) const } template -void RegBlockKokkos::match_all_kokkos(int groupbit_in, DAT::t_int_1d d_match_in) +void RegBlockKokkos::match_all_kokkos(int groupbit_in, DAT::tdual_int_1d k_match_in) { groupbit = groupbit_in; - d_match = d_match_in; + d_match = k_match_in.template view(); atomKK->sync(Device, X_MASK | MASK_MASK); @@ -69,6 +69,8 @@ void RegBlockKokkos::match_all_kokkos(int groupbit_in, DAT::t_int_1d Kokkos::parallel_for(Kokkos::RangePolicy(0,nlocal),*this); DeviceType::fence(); copymode = 0; + + k_match_in.template modify(); } template diff --git a/src/KOKKOS/region_block_kokkos.h b/src/KOKKOS/region_block_kokkos.h index f570e3ed33..e14ac4d0c0 100644 --- a/src/KOKKOS/region_block_kokkos.h +++ b/src/KOKKOS/region_block_kokkos.h @@ -39,14 +39,14 @@ class RegBlockKokkos : public RegBlock { RegBlockKokkos(class LAMMPS *, int, char **); ~RegBlockKokkos(); - void match_all_kokkos(int, DAT::t_int_1d); + void match_all_kokkos(int, DAT::tdual_int_1d); KOKKOS_INLINE_FUNCTION void operator()(TagRegBlockMatchAll, const int&) const; private: int groupbit; - DAT::t_int_1d d_match; + typename AT::t_int_1d d_match; typename AT::t_x_array_randomread x; typename AT::t_int_1d_randomread mask; diff --git a/src/accelerator_kokkos.h b/src/accelerator_kokkos.h index d9794023b0..8ea5b9d4d2 100644 --- a/src/accelerator_kokkos.h +++ b/src/accelerator_kokkos.h @@ -99,7 +99,7 @@ class DAT { public: typedef double tdual_xfloat_1d; typedef double tdual_FFT_SCALAR_1d; - typedef int t_int_1d; + typedef int tdual_int_1d; typedef int tdual_int_2d; }; diff --git a/src/region.cpp b/src/region.cpp index e69fdc79d5..d2ef481cb7 100644 --- a/src/region.cpp +++ b/src/region.cpp @@ -146,7 +146,7 @@ int Region::match(double x, double y, double z) generate error if Kokkos function defaults to base class ------------------------------------------------------------------------- */ -void Region::match_all_kokkos(int, DAT::t_int_1d) +void Region::match_all_kokkos(int, DAT::tdual_int_1d) { error->all(FLERR,"Can only use Kokkos supported regions with Kokkos package"); } diff --git a/src/region.h b/src/region.h index 9c693bfcd5..5b4238acb4 100644 --- a/src/region.h +++ b/src/region.h @@ -99,7 +99,7 @@ class Region : protected Pointers { // Kokkos function, implemented by each Kokkos region - virtual void match_all_kokkos(int, DAT::t_int_1d); + virtual void match_all_kokkos(int, DAT::tdual_int_1d); protected: void add_contact(int, double *, double, double, double); From d3fa882280a93affd1b55223395200feba7f7b3d Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Tue, 25 Jul 2017 13:49:23 -0600 Subject: [PATCH 09/15] Fix execution space issues in Kokkos EAM pairstyles --- src/KOKKOS/pair_eam_alloy_kokkos.cpp | 4 ++-- src/KOKKOS/pair_eam_fs_kokkos.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/KOKKOS/pair_eam_alloy_kokkos.cpp b/src/KOKKOS/pair_eam_alloy_kokkos.cpp index b7e0175147..aa68d0a054 100644 --- a/src/KOKKOS/pair_eam_alloy_kokkos.cpp +++ b/src/KOKKOS/pair_eam_alloy_kokkos.cpp @@ -405,7 +405,7 @@ int PairEAMAlloyKokkos::pack_forward_comm_kokkos(int n, DAT::tdual_i d_sendlist = k_sendlist.view(); iswap = iswap_in; v_buf = buf.view(); - Kokkos::parallel_for(Kokkos::RangePolicy(0,n),*this); + Kokkos::parallel_for(Kokkos::RangePolicy(0,n),*this); return n; } @@ -423,7 +423,7 @@ void PairEAMAlloyKokkos::unpack_forward_comm_kokkos(int n, int first { first = first_in; v_buf = buf.view(); - Kokkos::parallel_for(Kokkos::RangePolicy(0,n),*this); + Kokkos::parallel_for(Kokkos::RangePolicy(0,n),*this); } template diff --git a/src/KOKKOS/pair_eam_fs_kokkos.cpp b/src/KOKKOS/pair_eam_fs_kokkos.cpp index 982082937e..a982f94ec4 100644 --- a/src/KOKKOS/pair_eam_fs_kokkos.cpp +++ b/src/KOKKOS/pair_eam_fs_kokkos.cpp @@ -405,7 +405,7 @@ int PairEAMFSKokkos::pack_forward_comm_kokkos(int n, DAT::tdual_int_ d_sendlist = k_sendlist.view(); iswap = iswap_in; v_buf = buf.view(); - Kokkos::parallel_for(Kokkos::RangePolicy(0,n),*this); + Kokkos::parallel_for(Kokkos::RangePolicy(0,n),*this); return n; } @@ -423,7 +423,7 @@ void PairEAMFSKokkos::unpack_forward_comm_kokkos(int n, int first_in { first = first_in; v_buf = buf.view(); - Kokkos::parallel_for(Kokkos::RangePolicy(0,n),*this); + Kokkos::parallel_for(Kokkos::RangePolicy(0,n),*this); } template From c3c9f357fdfa6753eaa056bc17a3fe0dd3aaaa6a Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Tue, 25 Jul 2017 14:37:41 -0600 Subject: [PATCH 10/15] Fix concurrent modification issue in comm_kokkos --- src/KOKKOS/comm_kokkos.cpp | 1 + src/KOKKOS/out.txt | 119 ------------------------------------- 2 files changed, 1 insertion(+), 119 deletions(-) delete mode 100644 src/KOKKOS/out.txt diff --git a/src/KOKKOS/comm_kokkos.cpp b/src/KOKKOS/comm_kokkos.cpp index f38a6c21c9..2b19908396 100644 --- a/src/KOKKOS/comm_kokkos.cpp +++ b/src/KOKKOS/comm_kokkos.cpp @@ -488,6 +488,7 @@ void CommKokkos::exchange_device() if (true) { if (k_sendflag.h_view.dimension_0()(); k_count.h_view(0) = k_exchange_sendlist.h_view.dimension_0(); while (k_count.h_view(0)>=k_exchange_sendlist.h_view.dimension_0()) { k_count.h_view(0) = 0; diff --git a/src/KOKKOS/out.txt b/src/KOKKOS/out.txt deleted file mode 100644 index 0452e263ab..0000000000 --- a/src/KOKKOS/out.txt +++ /dev/null @@ -1,119 +0,0 @@ -atom_vec_angle_kokkos.cpp: k_count.modify(); -atom_vec_angle_kokkos.cpp: if (mask & X_MASK) atomKK->k_x.modify(); -atom_vec_angle_kokkos.cpp: if (mask & V_MASK) atomKK->k_v.modify(); -atom_vec_angle_kokkos.cpp: if (mask & F_MASK) atomKK->k_f.modify(); -atom_vec_angle_kokkos.cpp: if (mask & TAG_MASK) atomKK->k_tag.modify(); -atom_vec_angle_kokkos.cpp: if (mask & TYPE_MASK) atomKK->k_type.modify(); -atom_vec_angle_kokkos.cpp: if (mask & MASK_MASK) atomKK->k_mask.modify(); -atom_vec_angle_kokkos.cpp: if (mask & IMAGE_MASK) atomKK->k_image.modify(); -atom_vec_angle_kokkos.cpp: if (mask & MOLECULE_MASK) atomKK->k_molecule.modify(); -atom_vec_angle_kokkos.cpp: atomKK->k_nspecial.modify(); -atom_vec_angle_kokkos.cpp: atomKK->k_special.modify(); -atom_vec_angle_kokkos.cpp: atomKK->k_num_bond.modify(); -atom_vec_angle_kokkos.cpp: atomKK->k_bond_type.modify(); -atom_vec_angle_kokkos.cpp: atomKK->k_bond_atom.modify(); -atom_vec_angle_kokkos.cpp: atomKK->k_num_angle.modify(); -atom_vec_angle_kokkos.cpp: atomKK->k_angle_type.modify(); -atom_vec_angle_kokkos.cpp: atomKK->k_angle_atom1.modify(); -atom_vec_angle_kokkos.cpp: atomKK->k_angle_atom2.modify(); -atom_vec_angle_kokkos.cpp: atomKK->k_angle_atom3.modify(); -atom_vec_atomic_kokkos.cpp: k_count.modify(); -atom_vec_atomic_kokkos.cpp: if (mask & X_MASK) atomKK->k_x.modify(); -atom_vec_atomic_kokkos.cpp: if (mask & V_MASK) atomKK->k_v.modify(); -atom_vec_atomic_kokkos.cpp: if (mask & F_MASK) atomKK->k_f.modify(); -atom_vec_atomic_kokkos.cpp: if (mask & TAG_MASK) atomKK->k_tag.modify(); -atom_vec_atomic_kokkos.cpp: if (mask & TYPE_MASK) atomKK->k_type.modify(); -atom_vec_atomic_kokkos.cpp: if (mask & MASK_MASK) atomKK->k_mask.modify(); -atom_vec_atomic_kokkos.cpp: if (mask & IMAGE_MASK) atomKK->k_image.modify(); -atom_vec_bond_kokkos.cpp: k_count.modify(); -atom_vec_bond_kokkos.cpp: if (mask & X_MASK) atomKK->k_x.modify(); -atom_vec_bond_kokkos.cpp: if (mask & V_MASK) atomKK->k_v.modify(); -atom_vec_bond_kokkos.cpp: if (mask & F_MASK) atomKK->k_f.modify(); -atom_vec_bond_kokkos.cpp: if (mask & TAG_MASK) atomKK->k_tag.modify(); -atom_vec_bond_kokkos.cpp: if (mask & TYPE_MASK) atomKK->k_type.modify(); -atom_vec_bond_kokkos.cpp: if (mask & MASK_MASK) atomKK->k_mask.modify(); -atom_vec_bond_kokkos.cpp: if (mask & IMAGE_MASK) atomKK->k_image.modify(); -atom_vec_bond_kokkos.cpp: if (mask & MOLECULE_MASK) atomKK->k_molecule.modify(); -atom_vec_bond_kokkos.cpp: atomKK->k_nspecial.modify(); -atom_vec_bond_kokkos.cpp: atomKK->k_special.modify(); -atom_vec_bond_kokkos.cpp: atomKK->k_num_bond.modify(); -atom_vec_bond_kokkos.cpp: atomKK->k_bond_type.modify(); -atom_vec_bond_kokkos.cpp: atomKK->k_bond_atom.modify(); -atom_vec_charge_kokkos.cpp: k_count.modify(); -atom_vec_charge_kokkos.cpp: if (mask & X_MASK) atomKK->k_x.modify(); -atom_vec_charge_kokkos.cpp: if (mask & V_MASK) atomKK->k_v.modify(); -atom_vec_charge_kokkos.cpp: if (mask & F_MASK) atomKK->k_f.modify(); -atom_vec_charge_kokkos.cpp: if (mask & TAG_MASK) atomKK->k_tag.modify(); -atom_vec_charge_kokkos.cpp: if (mask & TYPE_MASK) atomKK->k_type.modify(); -atom_vec_charge_kokkos.cpp: if (mask & MASK_MASK) atomKK->k_mask.modify(); -atom_vec_charge_kokkos.cpp: if (mask & IMAGE_MASK) atomKK->k_image.modify(); -atom_vec_charge_kokkos.cpp: if (mask & Q_MASK) atomKK->k_q.modify(); -atom_vec_full_kokkos.cpp: k_count.modify(); -atom_vec_full_kokkos.cpp: if (mask & X_MASK) atomKK->k_x.modify(); -atom_vec_full_kokkos.cpp: if (mask & V_MASK) atomKK->k_v.modify(); -atom_vec_full_kokkos.cpp: if (mask & F_MASK) atomKK->k_f.modify(); -atom_vec_full_kokkos.cpp: if (mask & TAG_MASK) atomKK->k_tag.modify(); -atom_vec_full_kokkos.cpp: if (mask & TYPE_MASK) atomKK->k_type.modify(); -atom_vec_full_kokkos.cpp: if (mask & MASK_MASK) atomKK->k_mask.modify(); -atom_vec_full_kokkos.cpp: if (mask & IMAGE_MASK) atomKK->k_image.modify(); -atom_vec_full_kokkos.cpp: if (mask & Q_MASK) atomKK->k_q.modify(); -atom_vec_full_kokkos.cpp: if (mask & MOLECULE_MASK) atomKK->k_molecule.modify(); -atom_vec_full_kokkos.cpp: atomKK->k_nspecial.modify(); -atom_vec_full_kokkos.cpp: atomKK->k_special.modify(); -atom_vec_full_kokkos.cpp: atomKK->k_num_bond.modify(); -atom_vec_full_kokkos.cpp: atomKK->k_bond_type.modify(); -atom_vec_full_kokkos.cpp: atomKK->k_bond_atom.modify(); -atom_vec_full_kokkos.cpp: atomKK->k_num_angle.modify(); -atom_vec_full_kokkos.cpp: atomKK->k_angle_type.modify(); -atom_vec_full_kokkos.cpp: atomKK->k_angle_atom1.modify(); -atom_vec_full_kokkos.cpp: atomKK->k_angle_atom2.modify(); -atom_vec_full_kokkos.cpp: atomKK->k_angle_atom3.modify(); -atom_vec_full_kokkos.cpp: atomKK->k_num_dihedral.modify(); -atom_vec_full_kokkos.cpp: atomKK->k_dihedral_type.modify(); -atom_vec_full_kokkos.cpp: atomKK->k_dihedral_atom1.modify(); -atom_vec_full_kokkos.cpp: atomKK->k_dihedral_atom2.modify(); -atom_vec_full_kokkos.cpp: atomKK->k_dihedral_atom3.modify(); -atom_vec_full_kokkos.cpp: atomKK->k_dihedral_atom4.modify(); -atom_vec_full_kokkos.cpp: atomKK->k_num_improper.modify(); -atom_vec_full_kokkos.cpp: atomKK->k_improper_type.modify(); -atom_vec_full_kokkos.cpp: atomKK->k_improper_atom1.modify(); -atom_vec_full_kokkos.cpp: atomKK->k_improper_atom2.modify(); -atom_vec_full_kokkos.cpp: atomKK->k_improper_atom3.modify(); -atom_vec_full_kokkos.cpp: atomKK->k_improper_atom4.modify(); -atom_vec_molecular_kokkos.cpp: k_count.modify(); -atom_vec_molecular_kokkos.cpp: if (mask & X_MASK) atomKK->k_x.modify(); -atom_vec_molecular_kokkos.cpp: if (mask & V_MASK) atomKK->k_v.modify(); -atom_vec_molecular_kokkos.cpp: if (mask & F_MASK) atomKK->k_f.modify(); -atom_vec_molecular_kokkos.cpp: if (mask & TAG_MASK) atomKK->k_tag.modify(); -atom_vec_molecular_kokkos.cpp: if (mask & TYPE_MASK) atomKK->k_type.modify(); -atom_vec_molecular_kokkos.cpp: if (mask & MASK_MASK) atomKK->k_mask.modify(); -atom_vec_molecular_kokkos.cpp: if (mask & IMAGE_MASK) atomKK->k_image.modify(); -atom_vec_molecular_kokkos.cpp: if (mask & MOLECULE_MASK) atomKK->k_molecule.modify(); -atom_vec_molecular_kokkos.cpp: atomKK->k_nspecial.modify(); -atom_vec_molecular_kokkos.cpp: atomKK->k_special.modify(); -atom_vec_molecular_kokkos.cpp: atomKK->k_num_bond.modify(); -atom_vec_molecular_kokkos.cpp: atomKK->k_bond_type.modify(); -atom_vec_molecular_kokkos.cpp: atomKK->k_bond_atom.modify(); -atom_vec_molecular_kokkos.cpp: atomKK->k_num_angle.modify(); -atom_vec_molecular_kokkos.cpp: atomKK->k_angle_type.modify(); -atom_vec_molecular_kokkos.cpp: atomKK->k_angle_atom1.modify(); -atom_vec_molecular_kokkos.cpp: atomKK->k_angle_atom2.modify(); -atom_vec_molecular_kokkos.cpp: atomKK->k_angle_atom3.modify(); -atom_vec_molecular_kokkos.cpp: atomKK->k_num_dihedral.modify(); -atom_vec_molecular_kokkos.cpp: atomKK->k_dihedral_type.modify(); -atom_vec_molecular_kokkos.cpp: atomKK->k_dihedral_atom1.modify(); -atom_vec_molecular_kokkos.cpp: atomKK->k_dihedral_atom2.modify(); -atom_vec_molecular_kokkos.cpp: atomKK->k_dihedral_atom3.modify(); -atom_vec_molecular_kokkos.cpp: atomKK->k_dihedral_atom4.modify(); -atom_vec_molecular_kokkos.cpp: atomKK->k_num_improper.modify(); -atom_vec_molecular_kokkos.cpp: atomKK->k_improper_type.modify(); -atom_vec_molecular_kokkos.cpp: atomKK->k_improper_atom1.modify(); -atom_vec_molecular_kokkos.cpp: atomKK->k_improper_atom2.modify(); -atom_vec_molecular_kokkos.cpp: atomKK->k_improper_atom3.modify(); -atom_vec_molecular_kokkos.cpp: atomKK->k_improper_atom4.modify(); -comm_kokkos.cpp: k_buf_send.modify(); -neighbor_kokkos.cpp: k_bondlist.modify(); -neighbor_kokkos.cpp: k_anglelist.modify(); -neighbor_kokkos.cpp: k_dihedrallist.modify(); -neighbor_kokkos.cpp: k_improperlist.modify(); -verlet_kokkos.cpp: atomKK->k_f.modify(); From 8f59c0e188b9dc0d03621a58a78b81a16cd05546 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Thu, 27 Jul 2017 08:51:17 -0600 Subject: [PATCH 11/15] Fix modify/sync issue in neigh_bond_kokkos --- src/KOKKOS/neigh_bond_kokkos.cpp | 16 ++++++++++++++++ src/KOKKOS/neighbor_kokkos.cpp | 20 -------------------- 2 files changed, 16 insertions(+), 20 deletions(-) diff --git a/src/KOKKOS/neigh_bond_kokkos.cpp b/src/KOKKOS/neigh_bond_kokkos.cpp index 767def70c2..ca7dc1582b 100644 --- a/src/KOKKOS/neigh_bond_kokkos.cpp +++ b/src/KOKKOS/neigh_bond_kokkos.cpp @@ -307,6 +307,8 @@ void NeighBondKokkos::bond_all() "Bond atoms missing at step " BIGINT_FORMAT,update->ntimestep); if (me == 0) error->warning(FLERR,str); } + + k_bondlist.modify(); } template @@ -401,6 +403,8 @@ void NeighBondKokkos::bond_partial() "Bond atoms missing at step " BIGINT_FORMAT,update->ntimestep); if (me == 0) error->warning(FLERR,str); } + + k_bondlist.modify(); } template @@ -521,6 +525,8 @@ void NeighBondKokkos::angle_all() "Angle atoms missing at step " BIGINT_FORMAT,update->ntimestep); if (me == 0) error->warning(FLERR,str); } + + k_anglelist.modify(); } template @@ -622,6 +628,8 @@ void NeighBondKokkos::angle_partial() "Angle atoms missing at step " BIGINT_FORMAT,update->ntimestep); if (me == 0) error->warning(FLERR,str); } + + k_anglelist.modify(); } template @@ -762,6 +770,8 @@ void NeighBondKokkos::dihedral_all() "Dihedral atoms missing at step " BIGINT_FORMAT,update->ntimestep); if (me == 0) error->warning(FLERR,str); } + + k_dihedrallist.modify(); } template @@ -868,6 +878,8 @@ void NeighBondKokkos::dihedral_partial() "Dihedral atoms missing at step " BIGINT_FORMAT,update->ntimestep); if (me == 0) error->warning(FLERR,str); } + + k_dihedrallist.modify(); } template @@ -1030,6 +1042,8 @@ void NeighBondKokkos::improper_all() "Improper atoms missing at step " BIGINT_FORMAT,update->ntimestep); if (me == 0) error->warning(FLERR,str); } + + k_improperlist.modify(); } template @@ -1136,6 +1150,8 @@ void NeighBondKokkos::improper_partial() "Improper atoms missing at step " BIGINT_FORMAT,update->ntimestep); if (me == 0) error->warning(FLERR,str); } + + k_improperlist.modify(); } template diff --git a/src/KOKKOS/neighbor_kokkos.cpp b/src/KOKKOS/neighbor_kokkos.cpp index e40e6a238c..8eda7ee55c 100644 --- a/src/KOKKOS/neighbor_kokkos.cpp +++ b/src/KOKKOS/neighbor_kokkos.cpp @@ -387,16 +387,6 @@ void NeighborKokkos::build_topology() { k_dihedrallist = neighbond_device.k_dihedrallist; k_improperlist = neighbond_device.k_improperlist; - k_bondlist.sync(); - k_anglelist.sync(); - k_dihedrallist.sync(); - k_improperlist.sync(); - - k_bondlist.modify(); - k_anglelist.modify(); - k_dihedrallist.modify(); - k_improperlist.modify(); - // Transfer topology neighbor lists to Host for non-Kokkos styles if (force->bond && force->bond->execution_space == Host) @@ -415,15 +405,5 @@ void NeighborKokkos::build_topology() { k_anglelist = neighbond_host.k_anglelist; k_dihedrallist = neighbond_host.k_dihedrallist; k_improperlist = neighbond_host.k_improperlist; - - k_bondlist.sync(); - k_anglelist.sync(); - k_dihedrallist.sync(); - k_improperlist.sync(); - - k_bondlist.modify(); - k_anglelist.modify(); - k_dihedrallist.modify(); - k_improperlist.modify(); } } From 8e834d8be149fced6868362b8585ecb316e78be5 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Thu, 27 Jul 2017 09:37:16 -0600 Subject: [PATCH 12/15] Add missing sync to neigh_bond_kokkos --- src/KOKKOS/neigh_bond_kokkos.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/KOKKOS/neigh_bond_kokkos.cpp b/src/KOKKOS/neigh_bond_kokkos.cpp index ca7dc1582b..a8c230fa59 100644 --- a/src/KOKKOS/neigh_bond_kokkos.cpp +++ b/src/KOKKOS/neigh_bond_kokkos.cpp @@ -439,6 +439,8 @@ void NeighBondKokkos::bond_check() int flag = 0; update_domain_variables(); + atomKK->sync(execution_space, X_MASK); + k_bondlist.sync(); Kokkos::parallel_reduce(Kokkos::RangePolicy(0,neighbor->nbondlist),*this,flag); DeviceType::fence(); @@ -672,6 +674,8 @@ void NeighBondKokkos::angle_check() // in case angle potential computes any of them update_domain_variables(); + atomKK->sync(execution_space, X_MASK); + k_anglelist.sync(); Kokkos::parallel_reduce(Kokkos::RangePolicy(0,neighbor->nanglelist),*this,flag); DeviceType::fence(); @@ -927,6 +931,8 @@ void NeighBondKokkos::dihedral_check(int nlist, typename AT::t_int_2 // in case dihedral/improper potential computes any of them update_domain_variables(); + atomKK->sync(execution_space, X_MASK); + k_dihedrallist.sync(); Kokkos::parallel_reduce(Kokkos::RangePolicy(0,nlist),*this,flag); DeviceType::fence(); From 7edb294b447c62d3d2dbd4f9df984fb8d14f9a7c Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Fri, 28 Jul 2017 10:44:08 -0600 Subject: [PATCH 13/15] Fix execution space issues in comm_kokkos --- src/KOKKOS/comm_kokkos.cpp | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/src/KOKKOS/comm_kokkos.cpp b/src/KOKKOS/comm_kokkos.cpp index 2b19908396..adc8da501c 100644 --- a/src/KOKKOS/comm_kokkos.cpp +++ b/src/KOKKOS/comm_kokkos.cpp @@ -472,8 +472,6 @@ void CommKokkos::exchange_device() subhi = domain->subhi_lamda; } - atomKK->sync(ExecutionSpaceFromDevice::space,ALL_MASK); - // loop over dimensions for (int dim = 0; dim < 3; dim++) { @@ -602,8 +600,6 @@ void CommKokkos::exchange_device() } - atomKK->modified(ExecutionSpaceFromDevice::space,ALL_MASK); - if (atom->firstgroupname) { /* this is not yet implemented with Kokkos */ atomKK->sync(Host,ALL_MASK); @@ -704,8 +700,8 @@ void CommKokkos::borders_device() { AtomVecKokkos *avec = (AtomVecKokkos *) atom->avec; ExecutionSpace exec_space = ExecutionSpaceFromDevice::space; - k_sendlist.modify(); - atomKK->sync(exec_space,ALL_MASK); + k_sendlist.sync(); + atomKK->sync(exec_space,X_MASK); // do swaps over all 3 dimensions @@ -754,12 +750,10 @@ void CommKokkos::borders_device() { if (sendflag) { if (!bordergroup || ineed >= 2) { if (style == SINGLE) { - typename ArrayTypes::tdual_int_1d total_send("TS",1); + DAT::tdual_int_1d total_send("TS",1); total_send.h_view(0) = 0; - if(exec_space == Device) { - total_send.template modify(); - total_send.template sync(); - } + total_send.template modify(); + total_send.template sync(); BuildBorderListFunctor f(atomKK->k_x,k_sendlist, total_send,nfirst,nlast,dim,lo,hi,iswap,maxsendlist[iswap]); @@ -773,16 +767,17 @@ void CommKokkos::borders_device() { if(total_send.h_view(0) >= maxsendlist[iswap]) { grow_list(iswap,total_send.h_view(0)); k_sendlist.modify(); + total_send.h_view(0) = 0; - if(exec_space == Device) { - total_send.template modify(); - total_send.template sync(); - } + total_send.template modify(); + total_send.template sync(); + BuildBorderListFunctor f(atomKK->k_x,k_sendlist, total_send,nfirst,nlast,dim,lo,hi,iswap,maxsendlist[iswap]); Kokkos::TeamPolicy config((nlast-nfirst+127)/128,128); Kokkos::parallel_for(config,f); DeviceType::fence(); + total_send.template modify(); total_send.template sync(); } @@ -909,9 +904,7 @@ void CommKokkos::borders_device() { // reset global->local map - if (exec_space == Host) k_sendlist.sync(); - atomKK->modified(exec_space,ALL_MASK); - DeviceType::fence(); + k_sendlist.template modify(); atomKK->sync(Host,TAG_MASK); if (map_style) atom->map_set(); } From 5cd1dc93dc5956a89a1ba42858c69abc84488958 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Mon, 31 Jul 2017 15:32:20 -0600 Subject: [PATCH 14/15] Revert 7edb294b447c62d3d2dbd4f9df984fb8d14f9a7c temporarily --- src/KOKKOS/comm_kokkos.cpp | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/src/KOKKOS/comm_kokkos.cpp b/src/KOKKOS/comm_kokkos.cpp index adc8da501c..2b19908396 100644 --- a/src/KOKKOS/comm_kokkos.cpp +++ b/src/KOKKOS/comm_kokkos.cpp @@ -472,6 +472,8 @@ void CommKokkos::exchange_device() subhi = domain->subhi_lamda; } + atomKK->sync(ExecutionSpaceFromDevice::space,ALL_MASK); + // loop over dimensions for (int dim = 0; dim < 3; dim++) { @@ -600,6 +602,8 @@ void CommKokkos::exchange_device() } + atomKK->modified(ExecutionSpaceFromDevice::space,ALL_MASK); + if (atom->firstgroupname) { /* this is not yet implemented with Kokkos */ atomKK->sync(Host,ALL_MASK); @@ -700,8 +704,8 @@ void CommKokkos::borders_device() { AtomVecKokkos *avec = (AtomVecKokkos *) atom->avec; ExecutionSpace exec_space = ExecutionSpaceFromDevice::space; - k_sendlist.sync(); - atomKK->sync(exec_space,X_MASK); + k_sendlist.modify(); + atomKK->sync(exec_space,ALL_MASK); // do swaps over all 3 dimensions @@ -750,10 +754,12 @@ void CommKokkos::borders_device() { if (sendflag) { if (!bordergroup || ineed >= 2) { if (style == SINGLE) { - DAT::tdual_int_1d total_send("TS",1); + typename ArrayTypes::tdual_int_1d total_send("TS",1); total_send.h_view(0) = 0; - total_send.template modify(); - total_send.template sync(); + if(exec_space == Device) { + total_send.template modify(); + total_send.template sync(); + } BuildBorderListFunctor f(atomKK->k_x,k_sendlist, total_send,nfirst,nlast,dim,lo,hi,iswap,maxsendlist[iswap]); @@ -767,17 +773,16 @@ void CommKokkos::borders_device() { if(total_send.h_view(0) >= maxsendlist[iswap]) { grow_list(iswap,total_send.h_view(0)); k_sendlist.modify(); - total_send.h_view(0) = 0; - total_send.template modify(); - total_send.template sync(); - + if(exec_space == Device) { + total_send.template modify(); + total_send.template sync(); + } BuildBorderListFunctor f(atomKK->k_x,k_sendlist, total_send,nfirst,nlast,dim,lo,hi,iswap,maxsendlist[iswap]); Kokkos::TeamPolicy config((nlast-nfirst+127)/128,128); Kokkos::parallel_for(config,f); DeviceType::fence(); - total_send.template modify(); total_send.template sync(); } @@ -904,7 +909,9 @@ void CommKokkos::borders_device() { // reset global->local map - k_sendlist.template modify(); + if (exec_space == Host) k_sendlist.sync(); + atomKK->modified(exec_space,ALL_MASK); + DeviceType::fence(); atomKK->sync(Host,TAG_MASK); if (map_style) atom->map_set(); } From 81ba181349d74503977634ef44618ca4be9a00fc Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Fri, 25 Aug 2017 17:04:36 -0600 Subject: [PATCH 15/15] tweak an eq in USER-MESO, also allow neigh to be built w/out styles --- doc/src/Eqs/fix_mvv_dpd.jpg | Bin 29281 -> 26880 bytes doc/src/Eqs/fix_mvv_dpd.tex | 2 +- src/neighbor.cpp | 4 ++++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/doc/src/Eqs/fix_mvv_dpd.jpg b/doc/src/Eqs/fix_mvv_dpd.jpg index f62ae28bc4092c7f38d1e796c3db33ff118bd8bd..b5f39bb4702c93feed1e083aa67566feec41e1df 100644 GIT binary patch literal 26880 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 YM16@nD2&oS`O5$1t^S|KSpH7`8;@LJDgXcg literal 29281 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 SFR}hV4M+KpNC)$O^ZyqW>I4`7 diff --git a/doc/src/Eqs/fix_mvv_dpd.tex b/doc/src/Eqs/fix_mvv_dpd.tex index 4652d54b77..685d527763 100644 --- a/doc/src/Eqs/fix_mvv_dpd.tex +++ b/doc/src/Eqs/fix_mvv_dpd.tex @@ -15,7 +15,7 @@ $$ $$ $$ - v(t+\Delta t) = v(t+\frac{\Delta t}{2}) + \frac{\Delta t}{2}\cdot a(t++\Delta t), + v(t+\Delta t) = v(t+\frac{\Delta t}{2}) + \frac{\Delta t}{2}\cdot a(t+\Delta t) $$ \end{document} diff --git a/src/neighbor.cpp b/src/neighbor.cpp index ef150902e3..3943d876f9 100644 --- a/src/neighbor.cpp +++ b/src/neighbor.cpp @@ -22,6 +22,10 @@ #include "neighbor.h" #include "neigh_list.h" #include "neigh_request.h" +#include "nbin.h" +#include "nstencil.h" +#include "npair.h" +#include "ntopo.h" #include "style_nbin.h" #include "style_nstencil.h" #include "style_npair.h"