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);