diff --git a/src/KOKKOS/memory_kokkos.h b/src/KOKKOS/memory_kokkos.h index 092e20b6c7..4d4d200745 100644 --- a/src/KOKKOS/memory_kokkos.h +++ b/src/KOKKOS/memory_kokkos.h @@ -284,7 +284,6 @@ template static void realloc_kokkos(TYPE &data, const char *name, int n1) { data = TYPE(); - assert(data.use_count() == 0); data = TYPE(Kokkos::NoInit(std::string(name)),n1); } @@ -292,7 +291,6 @@ template static void realloc_kokkos(TYPE &data, const char *name, int n1, int n2) { data = TYPE(); - assert(data.use_count() == 0); data = TYPE(Kokkos::NoInit(std::string(name)),n1,n2); } @@ -300,7 +298,6 @@ template static void realloc_kokkos(TYPE &data, const char *name, int n1, int n2, int n3) { data = TYPE(); - assert(data.use_count() == 0); data = TYPE(Kokkos::NoInit(std::string(name)),n1,n2,n3); } @@ -308,7 +305,6 @@ template static void realloc_kokkos(TYPE &data, const char *name, int n1, int n2, int n3, int n4) { data = TYPE(); - assert(data.use_count() == 0); data = TYPE(Kokkos::NoInit(std::string(name)),n1,n2,n3,n4); } @@ -316,7 +312,6 @@ template static void realloc_kokkos(TYPE &data, const char *name, int n1, int n2, int n3, int n4, int n5) { data = TYPE(); - assert(data.use_count() == 0); data = TYPE(Kokkos::NoInit(std::string(name)),n1,n2,n3,n4,n5); } @@ -324,7 +319,6 @@ template static void realloc_kokkos(TYPE &data, const char *name, int n1, int n2, int n3, int n4, int n5, int n6) { data = TYPE(); - assert(data.use_count() == 0); data = TYPE(Kokkos::NoInit(std::string(name)),n1,n2,n3,n4,n5,n6); } diff --git a/src/KOKKOS/pair_reaxff_kokkos.cpp b/src/KOKKOS/pair_reaxff_kokkos.cpp index 7f905c069f..61f3bb3037 100644 --- a/src/KOKKOS/pair_reaxff_kokkos.cpp +++ b/src/KOKKOS/pair_reaxff_kokkos.cpp @@ -884,17 +884,10 @@ void PairReaxFFKokkos::compute(int eflag_in, int vflag_in) Kokkos::parallel_for(Kokkos::RangePolicy(0,ignum),*this); // allocate duplicated memory - if (need_dup) { + if (need_dup) dup_CdDelta = Kokkos::Experimental::create_scatter_view(d_CdDelta); - //dup_Cdbo = Kokkos::Experimental::create_scatter_view(d_Cdbo); - //dup_Cdbopi = Kokkos::Experimental::create_scatter_view(d_Cdbopi); - //dup_Cdbopi2 = Kokkos::Experimental::create_scatter_view(d_Cdbopi2); - } else { + else ndup_CdDelta = Kokkos::Experimental::create_scatter_view(d_CdDelta); - //ndup_Cdbo = Kokkos::Experimental::create_scatter_view(d_Cdbo); - //ndup_Cdbopi = Kokkos::Experimental::create_scatter_view(d_Cdbopi); - //ndup_Cdbopi2 = Kokkos::Experimental::create_scatter_view(d_Cdbopi2); - } // reduction over duplicated memory if (need_dup) @@ -1034,26 +1027,12 @@ void PairReaxFFKokkos::compute(int eflag_in, int vflag_in) if (need_dup) { Kokkos::Experimental::contribute(d_dDeltap_self, dup_dDeltap_self); // needed in ComputeBond2 Kokkos::Experimental::contribute(d_CdDelta, dup_CdDelta); // needed in ComputeBond2 - - //Kokkos::Experimental::contribute(d_Cdbo, dup_Cdbo); // needed in UpdateBond, but also used in UpdateBond - //Kokkos::Experimental::contribute(d_Cdbopi, dup_Cdbopi); // needed in UpdateBond, but also used in UpdateBond - //Kokkos::Experimental::contribute(d_Cdbopi2, dup_Cdbopi2); // needed in UpdateBond, but also used in UpdateBond - //dup_Cdbo.reset_except(d_Cdbo); - //dup_Cdbopi.reset_except(d_Cdbopi); - //dup_Cdbopi2.reset_except(d_Cdbopi2); } // Bond force if (neighflag == HALF) { Kokkos::parallel_for(Kokkos::RangePolicy>(0,ignum),*this); - // reduction over duplicated memory - //if (need_dup) { - // Kokkos::Experimental::contribute(d_Cdbo, dup_Cdbo); // needed in ComputeBond2 - // Kokkos::Experimental::contribute(d_Cdbopi, dup_Cdbopi); // needed in ComputeBond2 - // Kokkos::Experimental::contribute(d_Cdbopi2, dup_Cdbopi2); // needed in ComputeBond2 - //} - if (vflag_either) Kokkos::parallel_reduce(Kokkos::RangePolicy>(0,ignum),*this,ev); else @@ -1063,13 +1042,6 @@ void PairReaxFFKokkos::compute(int eflag_in, int vflag_in) } else { //if (neighflag == HALFTHREAD) { Kokkos::parallel_for(Kokkos::RangePolicy>(0,ignum),*this); - // reduction over duplicated memory - //if (need_dup) { - // Kokkos::Experimental::contribute(d_Cdbo, dup_Cdbo); // needed in ComputeBond2 - // Kokkos::Experimental::contribute(d_Cdbopi, dup_Cdbopi); // needed in ComputeBond2 - // Kokkos::Experimental::contribute(d_Cdbopi2, dup_Cdbopi2); // needed in ComputeBond2 - //} - if (vflag_either) Kokkos::parallel_reduce(Kokkos::RangePolicy>(0,ignum),*this,ev); else @@ -1117,7 +1089,7 @@ void PairReaxFFKokkos::compute(int eflag_in, int vflag_in) copymode = 0; - // free duplicated memory + // free scatterview memory if (need_dup) { dup_f = decltype(dup_f)(); dup_eatom = decltype(dup_eatom)(); @@ -1125,9 +1097,13 @@ void PairReaxFFKokkos::compute(int eflag_in, int vflag_in) dup_dDeltap_self = decltype(dup_dDeltap_self)(); dup_total_bo = decltype(dup_total_bo)(); dup_CdDelta = decltype(dup_CdDelta)(); - //dup_Cdbo = decltype(dup_Cdbo)(); - //dup_Cdbopi = decltype(dup_Cdbopi)(); - //dup_Cdbopi2 = decltype(dup_Cdbopi2)(); + } else { + ndup_f = decltype(ndup_f)(); + ndup_eatom = decltype(ndup_eatom)(); + ndup_vatom = decltype(ndup_vatom)(); + ndup_dDeltap_self = decltype(ndup_dDeltap_self)(); + ndup_total_bo = decltype(ndup_total_bo)(); + ndup_CdDelta = decltype(ndup_CdDelta)(); } d_neighbors = typename AT::t_neighbors_2d(); @@ -1513,6 +1489,17 @@ void PairReaxFFKokkos::operator()(TagPairReaxComputeTabulatedLJCoulo template void PairReaxFFKokkos::allocate_array() { + // free scatterview memory + if (need_dup) { + dup_dDeltap_self = decltype(dup_dDeltap_self)(); + dup_total_bo = decltype(dup_total_bo)(); + dup_CdDelta = decltype(dup_CdDelta)(); + } else { + ndup_dDeltap_self = decltype(ndup_dDeltap_self)(); + ndup_total_bo = decltype(ndup_total_bo)(); + ndup_CdDelta = decltype(ndup_CdDelta)(); + } + if (cut_hbsq > 0.0) { MemKK::realloc_kokkos(d_hb_first,"reaxff/kk:hb_first",nmax); MemKK::realloc_kokkos(d_hb_num,"reaxff/kk:hb_num",nmax); @@ -3482,9 +3469,6 @@ void PairReaxFFKokkos::operator()(TagPairReaxUpdateBond, Kokkos::View::value>> a_Cdbo = d_Cdbo; Kokkos::View::value>> a_Cdbopi = d_Cdbopi; Kokkos::View::value>> a_Cdbopi2 = d_Cdbopi2; - //auto a_Cdbo = dup_Cdbo.template access>(); - //auto a_Cdbopi = dup_Cdbopi.template access>(); - //auto a_Cdbopi2 = dup_Cdbopi2.template access>(); const int i = d_ilist[ii]; const tagint itag = tag(i); diff --git a/src/KOKKOS/pair_reaxff_kokkos.h b/src/KOKKOS/pair_reaxff_kokkos.h index 434f3c63fa..39b323a0fe 100644 --- a/src/KOKKOS/pair_reaxff_kokkos.h +++ b/src/KOKKOS/pair_reaxff_kokkos.h @@ -435,6 +435,8 @@ class PairReaxFFKokkos : public PairReaxFF { typename AT::t_ffloat_2d_dl d_C1dbopi2, d_C2dbopi2, d_C3dbopi2, d_C4dbopi2; typename AT::t_ffloat_2d_dl d_Cdbo, d_Cdbopi, d_Cdbopi2, d_dDeltap_self; + int need_dup; + using KKDeviceType = typename KKDevice::value; template @@ -443,27 +445,19 @@ class PairReaxFFKokkos : public PairReaxFF { template using NonDupScatterView = KKScatterView; - DupScatterView dup_total_bo; - DupScatterView dup_CdDelta; - DupScatterView dup_eatom; DupScatterView dup_f; + DupScatterView dup_eatom; DupScatterView dup_vatom; DupScatterView dup_dDeltap_self; - DupScatterView dup_Cdbo; - DupScatterView dup_Cdbopi; - DupScatterView dup_Cdbopi2; + DupScatterView dup_total_bo; + DupScatterView dup_CdDelta; - NonDupScatterView ndup_total_bo; - NonDupScatterView ndup_CdDelta; - NonDupScatterView ndup_eatom; NonDupScatterView ndup_f; + NonDupScatterView ndup_eatom; NonDupScatterView ndup_vatom; NonDupScatterView ndup_dDeltap_self; - NonDupScatterView ndup_Cdbo; - NonDupScatterView ndup_Cdbopi; - NonDupScatterView ndup_Cdbopi2; - - int need_dup; + NonDupScatterView ndup_total_bo; + NonDupScatterView ndup_CdDelta; typedef Kokkos::DualView tdual_ffloat_2d_n7; typedef typename tdual_ffloat_2d_n7::t_dev_const_randomread t_ffloat_2d_n7_randomread;