From aa4f0447091dce31254c66fe8564c06d207c68a1 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Thu, 5 Apr 2018 11:44:19 -0600 Subject: [PATCH 1/4] Deallocate views of views in serial to prevent race condition in Kokkos profiling tools --- src/KOKKOS/pair_reaxc_kokkos.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/KOKKOS/pair_reaxc_kokkos.cpp b/src/KOKKOS/pair_reaxc_kokkos.cpp index 7a72a24e3b..3a4a91ede4 100644 --- a/src/KOKKOS/pair_reaxc_kokkos.cpp +++ b/src/KOKKOS/pair_reaxc_kokkos.cpp @@ -89,6 +89,19 @@ PairReaxCKokkos::~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_y = decltype(k_LR.h_view(i,j).d_y )(); + k_LR.h_view(i,j).d_H = decltype(k_LR.h_view(i,j).d_H )(); + 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)(); + } + } } /* ---------------------------------------------------------------------- */ From 4517c85c779ca08429ef5a74d7bdf43b98501545 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Thu, 5 Apr 2018 11:47:22 -0600 Subject: [PATCH 2/4] Use reference to improve performance in pair_reaxc_kokkos --- src/KOKKOS/pair_reaxc_kokkos.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/KOKKOS/pair_reaxc_kokkos.cpp b/src/KOKKOS/pair_reaxc_kokkos.cpp index 3a4a91ede4..c5106775b4 100644 --- a/src/KOKKOS/pair_reaxc_kokkos.cpp +++ b/src/KOKKOS/pair_reaxc_kokkos.cpp @@ -1229,7 +1229,7 @@ void PairReaxCKokkos::operator()(PairReaxComputeTabulatedLJCoulomb t = d_LR(tmin,tmax); + const LR_lookup_table_kk& t = d_LR(tmin,tmax); /* Cubic Spline Interpolation */ From 3c6102a0c34f211055da39e97809b18fb138cd0c Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Thu, 5 Apr 2018 11:49:57 -0600 Subject: [PATCH 3/4] Tweak whitespace in Makefile.kokkos_cuda_mpi --- src/MAKE/OPTIONS/Makefile.kokkos_cuda_mpi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/MAKE/OPTIONS/Makefile.kokkos_cuda_mpi b/src/MAKE/OPTIONS/Makefile.kokkos_cuda_mpi index 54122c1b19..d6c5c566aa 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 From 49d524e442755619a1f6076ea7cec2e16a2397e6 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Thu, 5 Apr 2018 11:58:47 -0600 Subject: [PATCH 4/4] Remove unused variables in pair_reaxc_kokkos --- src/KOKKOS/pair_reaxc_kokkos.cpp | 18 ------------------ src/KOKKOS/pair_reaxc_kokkos.h | 10 ---------- 2 files changed, 28 deletions(-) diff --git a/src/KOKKOS/pair_reaxc_kokkos.cpp b/src/KOKKOS/pair_reaxc_kokkos.cpp index c5106775b4..9352d8367c 100644 --- a/src/KOKKOS/pair_reaxc_kokkos.cpp +++ b/src/KOKKOS/pair_reaxc_kokkos.cpp @@ -94,8 +94,6 @@ PairReaxCKokkos::~PairReaxCKokkos() 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_y = decltype(k_LR.h_view(i,j).d_y )(); - k_LR.h_view(i,j).d_H = decltype(k_LR.h_view(i,j).d_H )(); 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 )(); @@ -389,47 +387,31 @@ void PairReaxCKokkos::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::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.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]; - 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(); - k_H.template modify(); k_vdW.template modify(); k_CEvd.template modify(); k_ele.template modify(); k_CEclmb.template modify(); - k_y.template sync(); - k_H.template sync(); k_vdW.template sync(); k_CEvd.template sync(); k_ele.template sync(); diff --git a/src/KOKKOS/pair_reaxc_kokkos.h b/src/KOKKOS/pair_reaxc_kokkos.h index f5a3220c9a..e69b80c2a7 100644 --- a/src/KOKKOS/pair_reaxc_kokkos.h +++ b/src/KOKKOS/pair_reaxc_kokkos.h @@ -42,21 +42,11 @@ namespace LAMMPS_NS { 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; - 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; };