diff --git a/src/KOKKOS/comm_kokkos.cpp b/src/KOKKOS/comm_kokkos.cpp index 2ef4b14d4f..c57a2c1431 100644 --- a/src/KOKKOS/comm_kokkos.cpp +++ b/src/KOKKOS/comm_kokkos.cpp @@ -107,9 +107,13 @@ void CommKokkos::init() atomKK = (AtomKokkos *) atom; exchange_comm_classic = lmp->kokkos->exchange_comm_classic; forward_comm_classic = lmp->kokkos->forward_comm_classic; + forward_pair_comm_classic = lmp->kokkos->forward_pair_comm_classic; + forward_fix_comm_classic = lmp->kokkos->forward_fix_comm_classic; reverse_comm_classic = lmp->kokkos->reverse_comm_classic; exchange_comm_on_host = lmp->kokkos->exchange_comm_on_host; forward_comm_on_host = lmp->kokkos->forward_comm_on_host; + forward_pair_comm_on_host = lmp->kokkos->forward_pair_comm_on_host; + forward_fix_comm_on_host = lmp->kokkos->forward_fix_comm_on_host; reverse_comm_on_host = lmp->kokkos->reverse_comm_on_host; CommBrick::init(); @@ -361,6 +365,17 @@ void CommKokkos::reverse_comm_device() void CommKokkos::forward_comm_fix(Fix *fix, int size) { + if (!fix->kokkosable || !fix->forward_comm_device || forward_fix_comm_classic) { + k_sendlist.sync(); + CommBrick::forward_comm_fix(fix); + } else if (forward_fix_comm_on_host) { + k_sendlist.sync(); + forward_comm_fix_device(fix); + } else { + k_sendlist.sync(); + forward_comm_fix_device(fix); + } + if (fix->execution_space == Device && fix->forward_comm_device) { k_sendlist.sync(); forward_comm_fix_device(fix,size); @@ -456,10 +471,13 @@ void CommKokkos::reverse_comm_compute(Compute *compute) void CommKokkos::forward_comm_pair(Pair *pair) { - if (pair->execution_space == Host) { + if (!pair->kokkosable || forward_pair_comm_classic) { k_sendlist.sync(); CommBrick::forward_comm_pair(pair); - } else if (pair->execution_space == Device) { + } else if (forward_pair_comm_on_host) { + k_sendlist.sync(); + forward_comm_pair_device(pair); + } else { k_sendlist.sync(); forward_comm_pair_device(pair); } diff --git a/src/KOKKOS/comm_kokkos.h b/src/KOKKOS/comm_kokkos.h index 6b4a201ab7..d1cb388954 100644 --- a/src/KOKKOS/comm_kokkos.h +++ b/src/KOKKOS/comm_kokkos.h @@ -25,9 +25,13 @@ class CommKokkos : public CommBrick { bool exchange_comm_classic; bool forward_comm_classic; + bool forward_pair_comm_classic; + bool forward_fix_comm_classic; bool reverse_comm_classic; bool exchange_comm_on_host; bool forward_comm_on_host; + bool forward_pair_comm_on_host; + bool forward_fix_comm_on_host; bool reverse_comm_on_host; CommKokkos(class LAMMPS *); diff --git a/src/KOKKOS/fix_qeq_reax_kokkos.cpp b/src/KOKKOS/fix_qeq_reax_kokkos.cpp index c96f5ded68..88b5414fc6 100644 --- a/src/KOKKOS/fix_qeq_reax_kokkos.cpp +++ b/src/KOKKOS/fix_qeq_reax_kokkos.cpp @@ -263,15 +263,15 @@ void FixQEqReaxKokkos::pre_force(int /*vflag*/) // comm->forward_comm_fix(this); //Dist_vector( s ); pack_flag = 2; - k_s.template sync(); - comm->forward_comm_fix(this); k_s.template modify(); + comm->forward_comm_fix(this); + k_s.template sync(); // comm->forward_comm_fix(this); //Dist_vector( t ); pack_flag = 3; - k_t.template sync(); - comm->forward_comm_fix(this); k_t.template modify(); + comm->forward_comm_fix(this); + k_t.template sync(); need_dup = lmp->kokkos->need_dup(); @@ -752,9 +752,7 @@ void FixQEqReaxKokkos::cg_solve1() if (neighflag != FULL) { k_o.template modify(); - k_o.template sync(); comm->reverse_comm_fix(this); //Coll_vector( q ); - k_o.template modify(); k_o.template sync(); } @@ -781,9 +779,9 @@ void FixQEqReaxKokkos::cg_solve1() // comm->forward_comm_fix(this); //Dist_vector( d ); pack_flag = 1; - k_d.template sync(); - comm->forward_comm_fix(this); k_d.template modify(); + comm->forward_comm_fix(this); + k_d.template sync(); // sparse_matvec( &H, d, q ); FixQEqReaxKokkosSparse22Functor sparse22_functor(this); @@ -807,9 +805,7 @@ void FixQEqReaxKokkos::cg_solve1() if (neighflag != FULL) { k_o.template modify(); - k_o.template sync(); comm->reverse_comm_fix(this); //Coll_vector( q ); - k_o.template modify(); k_o.template sync(); } @@ -888,9 +884,7 @@ void FixQEqReaxKokkos::cg_solve2() if (neighflag != FULL) { k_o.template modify(); - k_o.template sync(); comm->reverse_comm_fix(this); //Coll_vector( q ); - k_o.template modify(); k_o.template sync(); } @@ -917,9 +911,9 @@ void FixQEqReaxKokkos::cg_solve2() // comm->forward_comm_fix(this); //Dist_vector( d ); pack_flag = 1; - k_d.template sync(); - comm->forward_comm_fix(this); k_d.template modify(); + comm->forward_comm_fix(this); + k_d.template sync(); // sparse_matvec( &H, d, q ); FixQEqReaxKokkosSparse22Functor sparse22_functor(this); @@ -943,9 +937,7 @@ void FixQEqReaxKokkos::cg_solve2() if (neighflag != FULL) { k_o.template modify(); - k_o.template sync(); comm->reverse_comm_fix(this); //Coll_vector( q ); - k_o.template modify(); k_o.template sync(); } @@ -1020,9 +1012,9 @@ void FixQEqReaxKokkos::calculate_q() pack_flag = 4; //comm->forward_comm_fix( this ); //Dist_vector( atom->q ); - atomKK->k_q.sync(); - comm->forward_comm_fix(this); atomKK->k_q.modify(); + comm->forward_comm_fix(this); + atomKK->k_q.sync(); } @@ -1411,14 +1403,19 @@ int FixQEqReaxKokkos::pack_forward_comm(int n, int *list, double *bu { int m; - if (pack_flag == 1) - for(m = 0; m < n; m++) buf[m] = h_d[list[m]]; - else if( pack_flag == 2 ) - for(m = 0; m < n; m++) buf[m] = h_s[list[m]]; - else if( pack_flag == 3 ) - for(m = 0; m < n; m++) buf[m] = h_t[list[m]]; - else if( pack_flag == 4 ) - for(m = 0; m < n; m++) buf[m] = atom->q[list[m]]; + if (pack_flag == 1) { + k_d.sync_host(); + for (m = 0; m < n; m++) buf[m] = h_d[list[m]]; + } else if (pack_flag == 2) { + k_s.sync_host(); + for (m = 0; m < n; m++) buf[m] = h_s[list[m]]; + } else if (pack_flag == 3) { + k_t.sync_host(); + for (m = 0; m < n; m++) buf[m] = h_t[list[m]]; + } else if (pack_flag == 4) { + atomKK->sync(Host,Q_MASK); + for (m = 0; m < n; m++) buf[m] = atom->q[list[m]]; + } return n; } @@ -1430,14 +1427,23 @@ void FixQEqReaxKokkos::unpack_forward_comm(int n, int first, double { int i, m; - if (pack_flag == 1) - for(m = 0, i = first; m < n; m++, i++) h_d[i] = buf[m]; - else if( pack_flag == 2) - for(m = 0, i = first; m < n; m++, i++) h_s[i] = buf[m]; - else if( pack_flag == 3) - for(m = 0, i = first; m < n; m++, i++) h_t[i] = buf[m]; - else if( pack_flag == 4) - for(m = 0, i = first; m < n; m++, i++) atom->q[i] = buf[m]; + if (pack_flag == 1) { + k_d.sync_host(); + for (m = 0, i = first; m < n; m++, i++) h_d[i] = buf[m]; + k_d.modify_host(); + } else if (pack_flag == 2) { + k_s.sync_host(); + for (m = 0, i = first; m < n; m++, i++) h_s[i] = buf[m]; + k_d.modify_host(); + } else if (pack_flag == 3) { + k_t.sync_host(); + for (m = 0, i = first; m < n; m++, i++) h_t[i] = buf[m]; + k_d.modify_host(); + } else if (pack_flag == 4) { + atomKK->sync(Host,Q_MASK); + for (m = 0, i = first; m < n; m++, i++) atom->q[i] = buf[m]; + atomKK->modified(Host,Q_MASK); + } } /* ---------------------------------------------------------------------- */ @@ -1445,6 +1451,8 @@ void FixQEqReaxKokkos::unpack_forward_comm(int n, int first, double template int FixQEqReaxKokkos::pack_reverse_comm(int n, int first, double *buf) { + k_o.sync_host(); + int i, m; for(m = 0, i = first; m < n; m++, i++) { buf[m] = h_o[i]; @@ -1457,9 +1465,13 @@ int FixQEqReaxKokkos::pack_reverse_comm(int n, int first, double *bu template void FixQEqReaxKokkos::unpack_reverse_comm(int n, int *list, double *buf) { + k_o.sync_host(); + for(int m = 0; m < n; m++) { h_o[list[m]] += buf[m]; } + + k_o.modify_host(); } /* ---------------------------------------------------------------------- */ diff --git a/src/KOKKOS/kokkos.cpp b/src/KOKKOS/kokkos.cpp index 64455fef4f..3be19e6190 100644 --- a/src/KOKKOS/kokkos.cpp +++ b/src/KOKKOS/kokkos.cpp @@ -77,6 +77,8 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) exchange_comm_changed = 0; forward_comm_changed = 0; + forward_pair_comm_changed = 0; + forward_fix_comm_changed = 0; reverse_comm_changed = 0; delete memory; @@ -203,8 +205,12 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) neighflag = FULL; neighflag_qeq = FULL; newtonflag = 0; + exchange_comm_classic = forward_comm_classic = reverse_comm_classic = 0; + forward_pair_comm_classic = forward_fix_comm_classic = 0; + exchange_comm_on_host = forward_comm_on_host = reverse_comm_on_host = 0; + forward_pair_comm_on_host = forward_fix_comm_on_host = 0; } else { if (nthreads > 1) { neighflag = HALFTHREAD; @@ -214,8 +220,12 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) neighflag_qeq = HALF; } newtonflag = 1; + exchange_comm_classic = forward_comm_classic = reverse_comm_classic = 1; + forward_pair_comm_classic = forward_fix_comm_classic = 1; + exchange_comm_on_host = forward_comm_on_host = reverse_comm_on_host = 0; + forward_pair_comm_on_host = forward_fix_comm_on_host = 0; } #ifdef LMP_KOKKOS_GPU @@ -339,13 +349,22 @@ void KokkosLMP::accelerator(int narg, char **arg) if (iarg+2 > narg) error->all(FLERR,"Illegal package kokkos command"); if (strcmp(arg[iarg+1],"no") == 0) { exchange_comm_classic = forward_comm_classic = reverse_comm_classic = 1; + forward_pair_comm_classic = forward_fix_comm_classic = 1; + exchange_comm_on_host = forward_comm_on_host = reverse_comm_on_host = 0; + forward_pair_comm_on_host = forward_fix_comm_on_host = 0; } else if (strcmp(arg[iarg+1],"host") == 0) { exchange_comm_classic = forward_comm_classic = reverse_comm_classic = 0; + forward_pair_comm_classic = forward_fix_comm_classic = 0; + exchange_comm_on_host = forward_comm_on_host = reverse_comm_on_host = 1; + forward_pair_comm_on_host = forward_fix_comm_on_host = 1; } else if (strcmp(arg[iarg+1],"device") == 0) { exchange_comm_classic = forward_comm_classic = reverse_comm_classic = 0; + forward_pair_comm_classic = forward_fix_comm_classic = 0; + exchange_comm_on_host = forward_comm_on_host = reverse_comm_on_host = 0; + forward_pair_comm_on_host = forward_fix_comm_on_host = 0; } else error->all(FLERR,"Illegal package kokkos command"); iarg += 2; } else if (strcmp(arg[iarg],"comm/exchange") == 0) { @@ -372,6 +391,30 @@ void KokkosLMP::accelerator(int narg, char **arg) } else error->all(FLERR,"Illegal package kokkos command"); forward_comm_changed = 0; iarg += 2; + } else if (strcmp(arg[iarg],"comm/pair/forward") == 0) { + if (iarg+2 > narg) error->all(FLERR,"Illegal package kokkos command"); + if (strcmp(arg[iarg+1],"no") == 0) forward_pair_comm_classic = 1; + else if (strcmp(arg[iarg+1],"host") == 0) { + forward_pair_comm_classic = 0; + forward_pair_comm_on_host = 1; + } else if (strcmp(arg[iarg+1],"device") == 0) { + forward_pair_comm_classic = 0; + forward_pair_comm_on_host = 0; + } else error->all(FLERR,"Illegal package kokkos command"); + forward_pair_comm_changed = 0; + iarg += 2; + } else if (strcmp(arg[iarg],"comm/fix/forward") == 0) { + if (iarg+2 > narg) error->all(FLERR,"Illegal package kokkos command"); + if (strcmp(arg[iarg+1],"no") == 0) forward_fix_comm_classic = 1; + else if (strcmp(arg[iarg+1],"host") == 0) { + forward_fix_comm_classic = 0; + forward_fix_comm_on_host = 1; + } else if (strcmp(arg[iarg+1],"device") == 0) { + forward_fix_comm_classic = 0; + forward_fix_comm_on_host = 0; + } else error->all(FLERR,"Illegal package kokkos command"); + forward_fix_comm_changed = 0; + iarg += 2; } else if (strcmp(arg[iarg],"comm/reverse") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal package kokkos command"); if (strcmp(arg[iarg+1],"no") == 0) reverse_comm_classic = 1; @@ -416,6 +459,14 @@ void KokkosLMP::accelerator(int narg, char **arg) forward_comm_on_host = 1; forward_comm_changed = 1; } + if (forward_pair_comm_classic == 0 && forward_pair_comm_on_host == 0) { + forward_pair_comm_on_host = 1; + forward_pair_comm_changed = 1; + } + if (forward_fix_comm_classic == 0 && forward_fix_comm_on_host == 0) { + forward_fix_comm_on_host = 1; + forward_fix_comm_changed = 1; + } if (reverse_comm_classic == 0 && reverse_comm_on_host == 0) { reverse_comm_on_host = 1; reverse_comm_changed = 1; @@ -433,6 +484,14 @@ void KokkosLMP::accelerator(int narg, char **arg) forward_comm_on_host = 0; forward_comm_changed = 0; } + if (forward_pair_comm_changed) { + forward_pair_comm_on_host = 0; + forward_pair_comm_changed = 0; + } + if (forward_fix_comm_changed) { + forward_fix_comm_on_host = 0; + forward_fix_comm_changed = 0; + } if (reverse_comm_changed) { reverse_comm_on_host = 0; reverse_comm_changed = 0; diff --git a/src/KOKKOS/kokkos.h b/src/KOKKOS/kokkos.h index eb0eb2e71f..f4d9b99dba 100644 --- a/src/KOKKOS/kokkos.h +++ b/src/KOKKOS/kokkos.h @@ -28,12 +28,18 @@ class KokkosLMP : protected Pointers { int neighflag_qeq_set; int exchange_comm_classic; int forward_comm_classic; + int forward_pair_comm_classic; + int forward_fix_comm_classic; int reverse_comm_classic; int exchange_comm_on_host; int forward_comm_on_host; + int forward_pair_comm_on_host; + int forward_fix_comm_on_host; int reverse_comm_on_host; int exchange_comm_changed; int forward_comm_changed; + int forward_pair_comm_changed; + int forward_fix_comm_changed; int reverse_comm_changed; int nthreads,ngpus; int numa; diff --git a/src/KOKKOS/pair_buck_coul_cut_kokkos.cpp b/src/KOKKOS/pair_buck_coul_cut_kokkos.cpp index d3b00329d8..47b4f55662 100644 --- a/src/KOKKOS/pair_buck_coul_cut_kokkos.cpp +++ b/src/KOKKOS/pair_buck_coul_cut_kokkos.cpp @@ -44,6 +44,7 @@ PairBuckCoulCutKokkos::PairBuckCoulCutKokkos(LAMMPS *lmp):PairBuckCo { respa_enable = 0; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | F_MASK | TYPE_MASK | Q_MASK | ENERGY_MASK | VIRIAL_MASK; diff --git a/src/KOKKOS/pair_buck_coul_long_kokkos.cpp b/src/KOKKOS/pair_buck_coul_long_kokkos.cpp index e503dd7ba5..41bb7a5fdb 100644 --- a/src/KOKKOS/pair_buck_coul_long_kokkos.cpp +++ b/src/KOKKOS/pair_buck_coul_long_kokkos.cpp @@ -51,6 +51,7 @@ PairBuckCoulLongKokkos::PairBuckCoulLongKokkos(LAMMPS *lmp):PairBuck { respa_enable = 0; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | F_MASK | TYPE_MASK | Q_MASK | ENERGY_MASK | VIRIAL_MASK; diff --git a/src/KOKKOS/pair_buck_kokkos.cpp b/src/KOKKOS/pair_buck_kokkos.cpp index b361824adc..7535f757f2 100644 --- a/src/KOKKOS/pair_buck_kokkos.cpp +++ b/src/KOKKOS/pair_buck_kokkos.cpp @@ -42,6 +42,7 @@ PairBuckKokkos::PairBuckKokkos(LAMMPS *lmp) : PairBuck(lmp) { respa_enable = 0; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | F_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK; diff --git a/src/KOKKOS/pair_coul_cut_kokkos.cpp b/src/KOKKOS/pair_coul_cut_kokkos.cpp index 8ac8f89db8..7dcc8549f9 100644 --- a/src/KOKKOS/pair_coul_cut_kokkos.cpp +++ b/src/KOKKOS/pair_coul_cut_kokkos.cpp @@ -33,6 +33,7 @@ using namespace LAMMPS_NS; template PairCoulCutKokkos::PairCoulCutKokkos(LAMMPS *lmp) : PairCoulCut(lmp) { + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | F_MASK | TYPE_MASK | Q_MASK | ENERGY_MASK | VIRIAL_MASK; diff --git a/src/KOKKOS/pair_coul_debye_kokkos.cpp b/src/KOKKOS/pair_coul_debye_kokkos.cpp index 1abd6bad05..da678eccf2 100644 --- a/src/KOKKOS/pair_coul_debye_kokkos.cpp +++ b/src/KOKKOS/pair_coul_debye_kokkos.cpp @@ -42,6 +42,7 @@ PairCoulDebyeKokkos::PairCoulDebyeKokkos(LAMMPS *lmp):PairCoulDebye( { respa_enable = 0; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | F_MASK | TYPE_MASK | Q_MASK | ENERGY_MASK | VIRIAL_MASK; diff --git a/src/KOKKOS/pair_coul_dsf_kokkos.cpp b/src/KOKKOS/pair_coul_dsf_kokkos.cpp index 17f87767d9..4981d3240f 100644 --- a/src/KOKKOS/pair_coul_dsf_kokkos.cpp +++ b/src/KOKKOS/pair_coul_dsf_kokkos.cpp @@ -46,6 +46,7 @@ PairCoulDSFKokkos::PairCoulDSFKokkos(LAMMPS *lmp) : PairCoulDSF(lmp) { respa_enable = 0; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | F_MASK | TYPE_MASK | Q_MASK | ENERGY_MASK | VIRIAL_MASK; diff --git a/src/KOKKOS/pair_coul_long_kokkos.cpp b/src/KOKKOS/pair_coul_long_kokkos.cpp index e2407e6e53..91f80ba146 100644 --- a/src/KOKKOS/pair_coul_long_kokkos.cpp +++ b/src/KOKKOS/pair_coul_long_kokkos.cpp @@ -51,6 +51,7 @@ PairCoulLongKokkos::PairCoulLongKokkos(LAMMPS *lmp):PairCoulLong(lmp { respa_enable = 0; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | F_MASK | TYPE_MASK | Q_MASK | ENERGY_MASK | VIRIAL_MASK; diff --git a/src/KOKKOS/pair_coul_wolf_kokkos.cpp b/src/KOKKOS/pair_coul_wolf_kokkos.cpp index 843b3106c9..44d9222baf 100644 --- a/src/KOKKOS/pair_coul_wolf_kokkos.cpp +++ b/src/KOKKOS/pair_coul_wolf_kokkos.cpp @@ -41,6 +41,7 @@ PairCoulWolfKokkos::PairCoulWolfKokkos(LAMMPS *lmp) : PairCoulWolf(l { respa_enable = 0; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | F_MASK | TYPE_MASK | Q_MASK | ENERGY_MASK | VIRIAL_MASK; diff --git a/src/KOKKOS/pair_dpd_fdt_energy_kokkos.cpp b/src/KOKKOS/pair_dpd_fdt_energy_kokkos.cpp index 629c5b0bec..649459f178 100644 --- a/src/KOKKOS/pair_dpd_fdt_energy_kokkos.cpp +++ b/src/KOKKOS/pair_dpd_fdt_energy_kokkos.cpp @@ -44,6 +44,7 @@ PairDPDfdtEnergyKokkos::PairDPDfdtEnergyKokkos(LAMMPS *lmp) : rand_pool() #endif { + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = EMPTY_MASK; diff --git a/src/KOKKOS/pair_eam_alloy_kokkos.cpp b/src/KOKKOS/pair_eam_alloy_kokkos.cpp index c2fbe7b87a..48b5efaf54 100644 --- a/src/KOKKOS/pair_eam_alloy_kokkos.cpp +++ b/src/KOKKOS/pair_eam_alloy_kokkos.cpp @@ -46,6 +46,7 @@ PairEAMAlloyKokkos::PairEAMAlloyKokkos(LAMMPS *lmp) : PairEAM(lmp) one_coeff = 1; manybody_flag = 1; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | F_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK; @@ -170,9 +171,7 @@ void PairEAMAlloyKokkos::compute(int eflag_in, int vflag_in) if (newton_pair) { k_rho.template modify(); - k_rho.template sync(); comm->reverse_comm_pair(this); - k_rho.template modify(); k_rho.template sync(); } @@ -198,9 +197,11 @@ void PairEAMAlloyKokkos::compute(int eflag_in, int vflag_in) ev.evdwl = 0.0; } - // communicate derivative of embedding function (on the device) + // communicate derivative of embedding function + k_fp.template modify(); comm->forward_comm_pair(this); + k_fp.template sync(); // compute kernel C @@ -467,6 +468,8 @@ template int PairEAMAlloyKokkos::pack_forward_comm(int n, int *list, double *buf, int /*pbc_flag*/, int * /*pbc*/) { + k_fp.sync_host(); + int i,j; for (i = 0; i < n; i++) { @@ -481,9 +484,13 @@ int PairEAMAlloyKokkos::pack_forward_comm(int n, int *list, double * template void PairEAMAlloyKokkos::unpack_forward_comm(int n, int first, double *buf) { + k_fp.sync_host(); + for (int i = 0; i < n; i++) { h_fp[i + first] = buf[i]; } + + k_fp.modify_host(); } /* ---------------------------------------------------------------------- */ @@ -491,6 +498,8 @@ void PairEAMAlloyKokkos::unpack_forward_comm(int n, int first, doubl template int PairEAMAlloyKokkos::pack_reverse_comm(int n, int first, double *buf) { + k_rho.sync_host(); + int i,m,last; m = 0; @@ -504,6 +513,8 @@ int PairEAMAlloyKokkos::pack_reverse_comm(int n, int first, double * template void PairEAMAlloyKokkos::unpack_reverse_comm(int n, int *list, double *buf) { + k_rho.sync_host(); + int i,j,m; m = 0; @@ -511,6 +522,8 @@ void PairEAMAlloyKokkos::unpack_reverse_comm(int n, int *list, doubl j = list[i]; h_rho[j] += buf[m++]; } + + k_fp.modify_host(); } /* ---------------------------------------------------------------------- */ diff --git a/src/KOKKOS/pair_eam_fs_kokkos.cpp b/src/KOKKOS/pair_eam_fs_kokkos.cpp index 54397cea51..2f9f67ba6f 100644 --- a/src/KOKKOS/pair_eam_fs_kokkos.cpp +++ b/src/KOKKOS/pair_eam_fs_kokkos.cpp @@ -46,6 +46,7 @@ PairEAMFSKokkos::PairEAMFSKokkos(LAMMPS *lmp) : PairEAM(lmp) manybody_flag = 1; respa_enable = 0; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | F_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK; @@ -170,9 +171,7 @@ void PairEAMFSKokkos::compute(int eflag_in, int vflag_in) if (newton_pair) { k_rho.template modify(); - k_rho.template sync(); comm->reverse_comm_pair(this); - k_rho.template modify(); k_rho.template sync(); } @@ -200,7 +199,9 @@ void PairEAMFSKokkos::compute(int eflag_in, int vflag_in) // communicate derivative of embedding function (on the device) + k_fp.template sync(); comm->forward_comm_pair(this); + k_fp.template modify(); // compute kernel C @@ -467,6 +468,8 @@ template int PairEAMFSKokkos::pack_forward_comm(int n, int *list, double *buf, int /*pbc_flag*/, int * /*pbc*/) { + k_fp.sync_host(); + int i,j; for (i = 0; i < n; i++) { @@ -481,9 +484,13 @@ int PairEAMFSKokkos::pack_forward_comm(int n, int *list, double *buf template void PairEAMFSKokkos::unpack_forward_comm(int n, int first, double *buf) { + k_fp.sync_host(); + for (int i = 0; i < n; i++) { h_fp[i + first] = buf[i]; } + + k_fp.modify_host(); } /* ---------------------------------------------------------------------- */ @@ -491,6 +498,8 @@ void PairEAMFSKokkos::unpack_forward_comm(int n, int first, double * template int PairEAMFSKokkos::pack_reverse_comm(int n, int first, double *buf) { + k_rho.sync_host(); + int i,m,last; m = 0; @@ -504,6 +513,8 @@ int PairEAMFSKokkos::pack_reverse_comm(int n, int first, double *buf template void PairEAMFSKokkos::unpack_reverse_comm(int n, int *list, double *buf) { + k_rho.sync_host(); + int i,j,m; m = 0; @@ -511,6 +522,8 @@ void PairEAMFSKokkos::unpack_reverse_comm(int n, int *list, double * j = list[i]; h_rho[j] += buf[m++]; } + + k_rho.modify_host(); } /* ---------------------------------------------------------------------- */ diff --git a/src/KOKKOS/pair_eam_kokkos.cpp b/src/KOKKOS/pair_eam_kokkos.cpp index bcbddea28d..98dbcba633 100644 --- a/src/KOKKOS/pair_eam_kokkos.cpp +++ b/src/KOKKOS/pair_eam_kokkos.cpp @@ -39,6 +39,7 @@ PairEAMKokkos::PairEAMKokkos(LAMMPS *lmp) : PairEAM(lmp) respa_enable = 0; single_enable = 0; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | F_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK; @@ -163,9 +164,7 @@ void PairEAMKokkos::compute(int eflag_in, int vflag_in) if (newton_pair) { k_rho.template modify(); - k_rho.template sync(); comm->reverse_comm_pair(this); - k_rho.template modify(); k_rho.template sync(); } @@ -191,9 +190,11 @@ void PairEAMKokkos::compute(int eflag_in, int vflag_in) ev.evdwl = 0.0; } - // communicate derivative of embedding function (on the device) + // communicate derivative of embedding function + k_fp.template modify(); comm->forward_comm_pair(this); + k_fp.template sync(); // compute kernel C @@ -465,6 +466,8 @@ template int PairEAMKokkos::pack_forward_comm(int n, int *list, double *buf, int /*pbc_flag*/, int * /*pbc*/) { + k_fp.sync_host(); + int i,j; for (i = 0; i < n; i++) { @@ -479,9 +482,13 @@ int PairEAMKokkos::pack_forward_comm(int n, int *list, double *buf, template void PairEAMKokkos::unpack_forward_comm(int n, int first, double *buf) { + k_fp.sync_host(); + for (int i = 0; i < n; i++) { h_fp[i + first] = buf[i]; } + + k_fp.modify_host(); } /* ---------------------------------------------------------------------- */ @@ -489,6 +496,8 @@ void PairEAMKokkos::unpack_forward_comm(int n, int first, double *bu template int PairEAMKokkos::pack_reverse_comm(int n, int first, double *buf) { + k_rho.sync_host(); + int i,m,last; m = 0; @@ -502,6 +511,8 @@ int PairEAMKokkos::pack_reverse_comm(int n, int first, double *buf) template void PairEAMKokkos::unpack_reverse_comm(int n, int *list, double *buf) { + k_rho.sync_host(); + int i,j,m; m = 0; @@ -509,6 +520,8 @@ void PairEAMKokkos::unpack_reverse_comm(int n, int *list, double *bu j = list[i]; h_rho[j] += buf[m++]; } + + k_rho.modify_host(); } /* ---------------------------------------------------------------------- */ diff --git a/src/KOKKOS/pair_exp6_rx_kokkos.cpp b/src/KOKKOS/pair_exp6_rx_kokkos.cpp index bc60bab85c..81cd69fd4d 100644 --- a/src/KOKKOS/pair_exp6_rx_kokkos.cpp +++ b/src/KOKKOS/pair_exp6_rx_kokkos.cpp @@ -77,6 +77,7 @@ double getElapsedTime( const TimerType &t0, const TimerType &t1) template PairExp6rxKokkos::PairExp6rxKokkos(LAMMPS *lmp) : PairExp6rx(lmp) { + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = EMPTY_MASK; diff --git a/src/KOKKOS/pair_gran_hooke_history_kokkos.cpp b/src/KOKKOS/pair_gran_hooke_history_kokkos.cpp index f82351fc9c..81c82ab826 100644 --- a/src/KOKKOS/pair_gran_hooke_history_kokkos.cpp +++ b/src/KOKKOS/pair_gran_hooke_history_kokkos.cpp @@ -32,6 +32,7 @@ using namespace LAMMPS_NS; template PairGranHookeHistoryKokkos::PairGranHookeHistoryKokkos(LAMMPS *lmp) : PairGranHookeHistory(lmp) { + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | V_MASK | OMEGA_MASK | F_MASK | TORQUE_MASK | TYPE_MASK | MASK_MASK | ENERGY_MASK | VIRIAL_MASK | RMASS_MASK | RADIUS_MASK; diff --git a/src/KOKKOS/pair_hybrid_kokkos.cpp b/src/KOKKOS/pair_hybrid_kokkos.cpp index 0d28e4a15d..540a6a368a 100644 --- a/src/KOKKOS/pair_hybrid_kokkos.cpp +++ b/src/KOKKOS/pair_hybrid_kokkos.cpp @@ -30,6 +30,7 @@ using namespace LAMMPS_NS; PairHybridKokkos::PairHybridKokkos(LAMMPS *lmp) : PairHybrid(lmp) { + kokkosable = 1; atomKK = (AtomKokkos *) atom; // prevent overlapping host/device computation, which isn't 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 208fb8165b..04632c9eec 100644 --- a/src/KOKKOS/pair_lj_charmm_coul_charmm_implicit_kokkos.cpp +++ b/src/KOKKOS/pair_lj_charmm_coul_charmm_implicit_kokkos.cpp @@ -50,6 +50,7 @@ PairLJCharmmCoulCharmmImplicitKokkos::PairLJCharmmCoulCharmmImplicit { respa_enable = 0; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | F_MASK | TYPE_MASK | Q_MASK | ENERGY_MASK | VIRIAL_MASK; diff --git a/src/KOKKOS/pair_lj_charmm_coul_charmm_kokkos.cpp b/src/KOKKOS/pair_lj_charmm_coul_charmm_kokkos.cpp index 4d7341a40a..8fe3e405af 100644 --- a/src/KOKKOS/pair_lj_charmm_coul_charmm_kokkos.cpp +++ b/src/KOKKOS/pair_lj_charmm_coul_charmm_kokkos.cpp @@ -51,6 +51,7 @@ PairLJCharmmCoulCharmmKokkos::PairLJCharmmCoulCharmmKokkos(LAMMPS *l { respa_enable = 0; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | F_MASK | TYPE_MASK | Q_MASK | ENERGY_MASK | VIRIAL_MASK; diff --git a/src/KOKKOS/pair_lj_charmm_coul_long_kokkos.cpp b/src/KOKKOS/pair_lj_charmm_coul_long_kokkos.cpp index 0c04b8a9f6..e70bfdb811 100644 --- a/src/KOKKOS/pair_lj_charmm_coul_long_kokkos.cpp +++ b/src/KOKKOS/pair_lj_charmm_coul_long_kokkos.cpp @@ -51,6 +51,7 @@ PairLJCharmmCoulLongKokkos::PairLJCharmmCoulLongKokkos(LAMMPS *lmp): { respa_enable = 0; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | F_MASK | TYPE_MASK | Q_MASK | ENERGY_MASK | VIRIAL_MASK; diff --git a/src/KOKKOS/pair_lj_class2_coul_cut_kokkos.cpp b/src/KOKKOS/pair_lj_class2_coul_cut_kokkos.cpp index c2a221d928..7fc802e0eb 100644 --- a/src/KOKKOS/pair_lj_class2_coul_cut_kokkos.cpp +++ b/src/KOKKOS/pair_lj_class2_coul_cut_kokkos.cpp @@ -39,6 +39,7 @@ PairLJClass2CoulCutKokkos::PairLJClass2CoulCutKokkos(LAMMPS *lmp):Pa { respa_enable = 0; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | F_MASK | TYPE_MASK | Q_MASK | ENERGY_MASK | VIRIAL_MASK; diff --git a/src/KOKKOS/pair_lj_class2_coul_long_kokkos.cpp b/src/KOKKOS/pair_lj_class2_coul_long_kokkos.cpp index a3efbec8dd..dc7858d8d1 100644 --- a/src/KOKKOS/pair_lj_class2_coul_long_kokkos.cpp +++ b/src/KOKKOS/pair_lj_class2_coul_long_kokkos.cpp @@ -47,6 +47,7 @@ PairLJClass2CoulLongKokkos::PairLJClass2CoulLongKokkos(LAMMPS *lmp): { respa_enable = 0; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | F_MASK | TYPE_MASK | Q_MASK | ENERGY_MASK | VIRIAL_MASK; diff --git a/src/KOKKOS/pair_lj_class2_kokkos.cpp b/src/KOKKOS/pair_lj_class2_kokkos.cpp index baac21f014..dbeb78d89a 100644 --- a/src/KOKKOS/pair_lj_class2_kokkos.cpp +++ b/src/KOKKOS/pair_lj_class2_kokkos.cpp @@ -42,6 +42,7 @@ PairLJClass2Kokkos::PairLJClass2Kokkos(LAMMPS *lmp) : PairLJClass2(l { respa_enable = 0; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | F_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK; diff --git a/src/KOKKOS/pair_lj_cut_coul_cut_kokkos.cpp b/src/KOKKOS/pair_lj_cut_coul_cut_kokkos.cpp index 9cfae7a05b..ccdfd127bd 100644 --- a/src/KOKKOS/pair_lj_cut_coul_cut_kokkos.cpp +++ b/src/KOKKOS/pair_lj_cut_coul_cut_kokkos.cpp @@ -38,6 +38,7 @@ PairLJCutCoulCutKokkos::PairLJCutCoulCutKokkos(LAMMPS *lmp):PairLJCu { respa_enable = 0; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | F_MASK | TYPE_MASK | Q_MASK | ENERGY_MASK | VIRIAL_MASK; diff --git a/src/KOKKOS/pair_lj_cut_coul_debye_kokkos.cpp b/src/KOKKOS/pair_lj_cut_coul_debye_kokkos.cpp index 2b523321e3..9a641b514f 100644 --- a/src/KOKKOS/pair_lj_cut_coul_debye_kokkos.cpp +++ b/src/KOKKOS/pair_lj_cut_coul_debye_kokkos.cpp @@ -42,6 +42,7 @@ PairLJCutCoulDebyeKokkos::PairLJCutCoulDebyeKokkos(LAMMPS *lmp):Pair { respa_enable = 0; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | F_MASK | TYPE_MASK | Q_MASK | ENERGY_MASK | VIRIAL_MASK; diff --git a/src/KOKKOS/pair_lj_cut_coul_dsf_kokkos.cpp b/src/KOKKOS/pair_lj_cut_coul_dsf_kokkos.cpp index 12ecb1b576..b1af8df018 100644 --- a/src/KOKKOS/pair_lj_cut_coul_dsf_kokkos.cpp +++ b/src/KOKKOS/pair_lj_cut_coul_dsf_kokkos.cpp @@ -52,6 +52,7 @@ PairLJCutCoulDSFKokkos::PairLJCutCoulDSFKokkos(LAMMPS *lmp):PairLJCu { respa_enable = 0; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | F_MASK | TYPE_MASK | Q_MASK | ENERGY_MASK | VIRIAL_MASK; diff --git a/src/KOKKOS/pair_lj_cut_coul_long_kokkos.cpp b/src/KOKKOS/pair_lj_cut_coul_long_kokkos.cpp index 2e2a756a70..68d6fe3a11 100644 --- a/src/KOKKOS/pair_lj_cut_coul_long_kokkos.cpp +++ b/src/KOKKOS/pair_lj_cut_coul_long_kokkos.cpp @@ -49,6 +49,7 @@ PairLJCutCoulLongKokkos::PairLJCutCoulLongKokkos(LAMMPS *lmp):PairLJ { respa_enable = 0; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | F_MASK | TYPE_MASK | Q_MASK | ENERGY_MASK | VIRIAL_MASK; diff --git a/src/KOKKOS/pair_lj_cut_kokkos.cpp b/src/KOKKOS/pair_lj_cut_kokkos.cpp index 518fb4d866..89bd82f682 100644 --- a/src/KOKKOS/pair_lj_cut_kokkos.cpp +++ b/src/KOKKOS/pair_lj_cut_kokkos.cpp @@ -37,6 +37,7 @@ PairLJCutKokkos::PairLJCutKokkos(LAMMPS *lmp) : PairLJCut(lmp) { respa_enable = 0; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | F_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK; diff --git a/src/KOKKOS/pair_lj_expand_kokkos.cpp b/src/KOKKOS/pair_lj_expand_kokkos.cpp index 07e37b75e7..1f80d501c5 100644 --- a/src/KOKKOS/pair_lj_expand_kokkos.cpp +++ b/src/KOKKOS/pair_lj_expand_kokkos.cpp @@ -42,6 +42,7 @@ PairLJExpandKokkos::PairLJExpandKokkos(LAMMPS *lmp) : PairLJExpand(l { respa_enable = 0; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | F_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK; diff --git a/src/KOKKOS/pair_lj_gromacs_coul_gromacs_kokkos.cpp b/src/KOKKOS/pair_lj_gromacs_coul_gromacs_kokkos.cpp index a0d86e3bdb..9bc294ae71 100644 --- a/src/KOKKOS/pair_lj_gromacs_coul_gromacs_kokkos.cpp +++ b/src/KOKKOS/pair_lj_gromacs_coul_gromacs_kokkos.cpp @@ -42,6 +42,7 @@ PairLJGromacsCoulGromacsKokkos::PairLJGromacsCoulGromacsKokkos(LAMMP { respa_enable = 0; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | F_MASK | TYPE_MASK | Q_MASK | ENERGY_MASK | VIRIAL_MASK; diff --git a/src/KOKKOS/pair_lj_gromacs_kokkos.cpp b/src/KOKKOS/pair_lj_gromacs_kokkos.cpp index c907dc9c25..ad9d8ddbc5 100644 --- a/src/KOKKOS/pair_lj_gromacs_kokkos.cpp +++ b/src/KOKKOS/pair_lj_gromacs_kokkos.cpp @@ -42,6 +42,7 @@ PairLJGromacsKokkos::PairLJGromacsKokkos(LAMMPS *lmp):PairLJGromacs( { respa_enable = 0; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | F_MASK | TYPE_MASK | Q_MASK | ENERGY_MASK | VIRIAL_MASK; diff --git a/src/KOKKOS/pair_lj_sdk_kokkos.cpp b/src/KOKKOS/pair_lj_sdk_kokkos.cpp index 27003089de..2c66aad25a 100644 --- a/src/KOKKOS/pair_lj_sdk_kokkos.cpp +++ b/src/KOKKOS/pair_lj_sdk_kokkos.cpp @@ -42,6 +42,7 @@ PairLJSDKKokkos::PairLJSDKKokkos(LAMMPS *lmp) : PairLJSDK(lmp) { respa_enable = 0; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | F_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK; diff --git a/src/KOKKOS/pair_morse_kokkos.cpp b/src/KOKKOS/pair_morse_kokkos.cpp index 47bd636aa8..f6a67f81d5 100644 --- a/src/KOKKOS/pair_morse_kokkos.cpp +++ b/src/KOKKOS/pair_morse_kokkos.cpp @@ -44,6 +44,7 @@ PairMorseKokkos::PairMorseKokkos(LAMMPS *lmp) : PairMorse(lmp) { respa_enable = 0; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | F_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK; diff --git a/src/KOKKOS/pair_multi_lucy_rx_kokkos.cpp b/src/KOKKOS/pair_multi_lucy_rx_kokkos.cpp index 644115ccd6..05421186c0 100644 --- a/src/KOKKOS/pair_multi_lucy_rx_kokkos.cpp +++ b/src/KOKKOS/pair_multi_lucy_rx_kokkos.cpp @@ -57,6 +57,7 @@ PairMultiLucyRXKokkos::PairMultiLucyRXKokkos(LAMMPS *lmp) : PairMult { respa_enable = 0; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = EMPTY_MASK; diff --git a/src/KOKKOS/pair_reaxc_kokkos.cpp b/src/KOKKOS/pair_reaxc_kokkos.cpp index eea397dc69..cfb273cd97 100644 --- a/src/KOKKOS/pair_reaxc_kokkos.cpp +++ b/src/KOKKOS/pair_reaxc_kokkos.cpp @@ -49,6 +49,7 @@ PairReaxCKokkos::PairReaxCKokkos(LAMMPS *lmp) : PairReaxC(lmp) cut_nbsq = cut_hbsq = cut_bosq = 0.0; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | Q_MASK | F_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK; diff --git a/src/KOKKOS/pair_snap_kokkos_impl.h b/src/KOKKOS/pair_snap_kokkos_impl.h index bacb5f75d6..1037985670 100644 --- a/src/KOKKOS/pair_snap_kokkos_impl.h +++ b/src/KOKKOS/pair_snap_kokkos_impl.h @@ -53,6 +53,7 @@ PairSNAPKokkos::PairSNAPKokkos(LAMMPS *lmp) : PairSNAP(lmp) { respa_enable = 0; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = EMPTY_MASK; diff --git a/src/KOKKOS/pair_sw_kokkos.cpp b/src/KOKKOS/pair_sw_kokkos.cpp index 3ff990ed4e..5d629dc42a 100644 --- a/src/KOKKOS/pair_sw_kokkos.cpp +++ b/src/KOKKOS/pair_sw_kokkos.cpp @@ -45,6 +45,7 @@ PairSWKokkos::PairSWKokkos(LAMMPS *lmp) : PairSW(lmp) respa_enable = 0; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | F_MASK | TAG_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK; diff --git a/src/KOKKOS/pair_table_kokkos.cpp b/src/KOKKOS/pair_table_kokkos.cpp index dbea12a1f0..f57956f1ea 100644 --- a/src/KOKKOS/pair_table_kokkos.cpp +++ b/src/KOKKOS/pair_table_kokkos.cpp @@ -35,6 +35,7 @@ template PairTableKokkos::PairTableKokkos(LAMMPS *lmp) : PairTable(lmp) { update_table = 0; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | F_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK; diff --git a/src/KOKKOS/pair_table_rx_kokkos.cpp b/src/KOKKOS/pair_table_rx_kokkos.cpp index 82807f944d..d6728098b5 100644 --- a/src/KOKKOS/pair_table_rx_kokkos.cpp +++ b/src/KOKKOS/pair_table_rx_kokkos.cpp @@ -141,6 +141,7 @@ template PairTableRXKokkos::PairTableRXKokkos(LAMMPS *lmp) : PairTable(lmp) { update_table = 0; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | F_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK | diff --git a/src/KOKKOS/pair_tersoff_kokkos.cpp b/src/KOKKOS/pair_tersoff_kokkos.cpp index f90a803a49..74d3521940 100644 --- a/src/KOKKOS/pair_tersoff_kokkos.cpp +++ b/src/KOKKOS/pair_tersoff_kokkos.cpp @@ -42,6 +42,7 @@ PairTersoffKokkos::PairTersoffKokkos(LAMMPS *lmp) : PairTersoff(lmp) { respa_enable = 0; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | F_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK; diff --git a/src/KOKKOS/pair_tersoff_mod_kokkos.cpp b/src/KOKKOS/pair_tersoff_mod_kokkos.cpp index 24f466d750..13222c2214 100644 --- a/src/KOKKOS/pair_tersoff_mod_kokkos.cpp +++ b/src/KOKKOS/pair_tersoff_mod_kokkos.cpp @@ -42,6 +42,7 @@ PairTersoffMODKokkos::PairTersoffMODKokkos(LAMMPS *lmp) : PairTersof { respa_enable = 0; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | F_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK; diff --git a/src/KOKKOS/pair_tersoff_zbl_kokkos.cpp b/src/KOKKOS/pair_tersoff_zbl_kokkos.cpp index 01612905b5..5e201dbc1c 100644 --- a/src/KOKKOS/pair_tersoff_zbl_kokkos.cpp +++ b/src/KOKKOS/pair_tersoff_zbl_kokkos.cpp @@ -44,6 +44,7 @@ PairTersoffZBLKokkos::PairTersoffZBLKokkos(LAMMPS *lmp) : PairTersof { respa_enable = 0; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | F_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK; diff --git a/src/KOKKOS/pair_vashishta_kokkos.cpp b/src/KOKKOS/pair_vashishta_kokkos.cpp index 23a0d10757..4b7b50afe9 100644 --- a/src/KOKKOS/pair_vashishta_kokkos.cpp +++ b/src/KOKKOS/pair_vashishta_kokkos.cpp @@ -45,6 +45,7 @@ PairVashishtaKokkos::PairVashishtaKokkos(LAMMPS *lmp) : PairVashisht { respa_enable = 0; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | F_MASK | TAG_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK; diff --git a/src/KOKKOS/pair_yukawa_kokkos.cpp b/src/KOKKOS/pair_yukawa_kokkos.cpp index d927526320..6a6c8bffba 100644 --- a/src/KOKKOS/pair_yukawa_kokkos.cpp +++ b/src/KOKKOS/pair_yukawa_kokkos.cpp @@ -41,6 +41,7 @@ PairYukawaKokkos::PairYukawaKokkos(LAMMPS *lmp) : PairYukawa(lmp) { respa_enable = 0; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | F_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK; diff --git a/src/KOKKOS/pair_zbl_kokkos.cpp b/src/KOKKOS/pair_zbl_kokkos.cpp index 2cbe65dcf7..a3cdbf3b6e 100644 --- a/src/KOKKOS/pair_zbl_kokkos.cpp +++ b/src/KOKKOS/pair_zbl_kokkos.cpp @@ -43,6 +43,7 @@ PairZBLKokkos::PairZBLKokkos(LAMMPS *lmp) : PairZBL(lmp) { respa_enable = 0; + kokkosable = 1; atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; datamask_read = X_MASK | F_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK; diff --git a/src/pair.cpp b/src/pair.cpp index 5c8422c91a..afc5eb2785 100644 --- a/src/pair.cpp +++ b/src/pair.cpp @@ -115,6 +115,7 @@ Pair::Pair(LAMMPS *lmp) : Pointers(lmp) datamask_read = ALL_MASK; datamask_modify = ALL_MASK; + kokkosable = 0; copymode = 0; } diff --git a/src/pair.h b/src/pair.h index ff0ce82cc8..5801941458 100644 --- a/src/pair.h +++ b/src/pair.h @@ -115,6 +115,7 @@ class Pair : protected Pointers { ExecutionSpace execution_space; unsigned int datamask_read,datamask_modify; + int kokkosable; // 1 if Kokkos pair Pair(class LAMMPS *); virtual ~Pair();