diff --git a/src/KOKKOS/pair_reaxc_kokkos.cpp b/src/KOKKOS/pair_reaxc_kokkos.cpp index 7a72a24e3b434d1f93fbef6d65ef5730c67569fd..9352d8367c441919accde7f5a2c286f739ac26cb 100644 --- a/src/KOKKOS/pair_reaxc_kokkos.cpp +++ b/src/KOKKOS/pair_reaxc_kokkos.cpp @@ -89,6 +89,17 @@ PairReaxCKokkos<DeviceType>::~PairReaxCKokkos() tmpid = NULL; memoryKK->destroy_kokkos(k_tmpbo,tmpbo); tmpbo = NULL; + + // deallocate views of views in serial to prevent race condition in profiling tools + + for (int i = 0; i < k_LR.extent(0); i++) { + for (int j = 0; j < k_LR.extent(1); j++) { + k_LR.h_view(i,j).d_vdW = decltype(k_LR.h_view(i,j).d_vdW )(); + k_LR.h_view(i,j).d_CEvd = decltype(k_LR.h_view(i,j).d_CEvd )(); + k_LR.h_view(i,j).d_ele = decltype(k_LR.h_view(i,j).d_ele )(); + k_LR.h_view(i,j).d_CEclmb = decltype(k_LR.h_view(i,j).d_CEclmb)(); + } + } } /* ---------------------------------------------------------------------- */ @@ -376,47 +387,31 @@ void PairReaxCKokkos<DeviceType>::init_md() for (int j = i; j <= ntypes; ++j) { int n = LR[i][j].n; if (n == 0) continue; - k_LR.h_view(i,j).xmin = LR[i][j].xmin; - k_LR.h_view(i,j).xmax = LR[i][j].xmax; - k_LR.h_view(i,j).n = LR[i][j].n; k_LR.h_view(i,j).dx = LR[i][j].dx; k_LR.h_view(i,j).inv_dx = LR[i][j].inv_dx; - k_LR.h_view(i,j).a = LR[i][j].a; - k_LR.h_view(i,j).m = LR[i][j].m; - k_LR.h_view(i,j).c = LR[i][j].c; - typename LR_lookup_table_kk<DeviceType>::tdual_LR_data_1d k_y = typename LR_lookup_table_kk<DeviceType>::tdual_LR_data_1d("lookup:LR[i,j].y",n); - typename LR_lookup_table_kk<DeviceType>::tdual_cubic_spline_coef_1d k_H = typename LR_lookup_table_kk<DeviceType>::tdual_cubic_spline_coef_1d("lookup:LR[i,j].H",n); typename LR_lookup_table_kk<DeviceType>::tdual_cubic_spline_coef_1d k_vdW = typename LR_lookup_table_kk<DeviceType>::tdual_cubic_spline_coef_1d("lookup:LR[i,j].vdW",n); typename LR_lookup_table_kk<DeviceType>::tdual_cubic_spline_coef_1d k_CEvd = typename LR_lookup_table_kk<DeviceType>::tdual_cubic_spline_coef_1d("lookup:LR[i,j].CEvd",n); typename LR_lookup_table_kk<DeviceType>::tdual_cubic_spline_coef_1d k_ele = typename LR_lookup_table_kk<DeviceType>::tdual_cubic_spline_coef_1d("lookup:LR[i,j].ele",n); typename LR_lookup_table_kk<DeviceType>::tdual_cubic_spline_coef_1d k_CEclmb = typename LR_lookup_table_kk<DeviceType>::tdual_cubic_spline_coef_1d("lookup:LR[i,j].CEclmb",n); - k_LR.h_view(i,j).d_y = k_y.template view<DeviceType>(); - k_LR.h_view(i,j).d_H = k_H.template view<DeviceType>(); k_LR.h_view(i,j).d_vdW = k_vdW.template view<DeviceType>(); k_LR.h_view(i,j).d_CEvd = k_CEvd.template view<DeviceType>(); k_LR.h_view(i,j).d_ele = k_ele.template view<DeviceType>(); k_LR.h_view(i,j).d_CEclmb = k_CEclmb.template view<DeviceType>(); for (int k = 0; k < n; k++) { - k_y.h_view(k) = LR[i][j].y[k]; - k_H.h_view(k) = LR[i][j].H[k]; k_vdW.h_view(k) = LR[i][j].vdW[k]; k_CEvd.h_view(k) = LR[i][j].CEvd[k]; k_ele.h_view(k) = LR[i][j].ele[k]; k_CEclmb.h_view(k) = LR[i][j].CEclmb[k]; } - k_y.template modify<LMPHostType>(); - k_H.template modify<LMPHostType>(); k_vdW.template modify<LMPHostType>(); k_CEvd.template modify<LMPHostType>(); k_ele.template modify<LMPHostType>(); k_CEclmb.template modify<LMPHostType>(); - k_y.template sync<DeviceType>(); - k_H.template sync<DeviceType>(); k_vdW.template sync<DeviceType>(); k_CEvd.template sync<DeviceType>(); k_ele.template sync<DeviceType>(); @@ -1216,7 +1211,7 @@ void PairReaxCKokkos<DeviceType>::operator()(PairReaxComputeTabulatedLJCoulomb<N const int tmin = MIN( itype, jtype ); const int tmax = MAX( itype, jtype ); - const LR_lookup_table_kk<DeviceType> t = d_LR(tmin,tmax); + const LR_lookup_table_kk<DeviceType>& 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 f5a3220c9ab89a601b6b1fdf0b3b836fefb1d637..e69b80c2a7f5bcabdc982c2e133952def3910e1b 100644 --- a/src/KOKKOS/pair_reaxc_kokkos.h +++ b/src/KOKKOS/pair_reaxc_kokkos.h @@ -42,21 +42,11 @@ namespace LAMMPS_NS { template<class DeviceType> struct LR_lookup_table_kk { - typedef Kokkos::DualView<LR_data*,Kokkos::LayoutRight,DeviceType> tdual_LR_data_1d; - typedef typename tdual_LR_data_1d::t_dev t_LR_data_1d; - typedef Kokkos::DualView<cubic_spline_coef*,Kokkos::LayoutRight,DeviceType> 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; - double a; - double m; - double c; - t_LR_data_1d d_y; - t_cubic_spline_coef_1d d_H; t_cubic_spline_coef_1d d_vdW, d_CEvd; t_cubic_spline_coef_1d d_ele, d_CEclmb; }; diff --git a/src/MAKE/OPTIONS/Makefile.kokkos_cuda_mpi b/src/MAKE/OPTIONS/Makefile.kokkos_cuda_mpi index 54122c1b19811665de75b321cb1ec4dc7fb47d22..d6c5c566aa5e07f67c7c09429a1ca78a9ba903f4 100644 --- a/src/MAKE/OPTIONS/Makefile.kokkos_cuda_mpi +++ b/src/MAKE/OPTIONS/Makefile.kokkos_cuda_mpi @@ -23,7 +23,7 @@ ARCHIVE = ar ARFLAGS = -rc SHLIBFLAGS = -shared KOKKOS_DEVICES = Cuda -KOKKOS_ARCH = Kepler35 +KOKKOS_ARCH = Kepler35 # --------------------------------------------------------------------- # LAMMPS-specific settings, all OPTIONAL