Updating to master
This commit is contained in:
@ -174,6 +174,8 @@ action pair_reax_c_kokkos.cpp pair_reax_c.cpp
|
||||
action pair_reax_c_kokkos.h pair_reax_c.h
|
||||
action pair_sw_kokkos.cpp pair_sw.cpp
|
||||
action pair_sw_kokkos.h pair_sw.h
|
||||
action pair_vashishta_kokkos.cpp pair_vashishta.cpp
|
||||
action pair_vashishta_kokkos.h pair_vashishta.h
|
||||
action pair_table_kokkos.cpp
|
||||
action pair_table_kokkos.h
|
||||
action pair_tersoff_kokkos.cpp pair_tersoff.cpp
|
||||
|
||||
@ -83,8 +83,13 @@ class AtomVecKokkos : public AtomVec {
|
||||
std::is_same<typename ViewType::execution_space,LMPDeviceType>::value,
|
||||
Kokkos::CudaHostPinnedSpace,typename ViewType::memory_space>::type,
|
||||
Kokkos::MemoryTraits<Kokkos::Unmanaged> > mirror_type;
|
||||
if(buffer_size < src.capacity())
|
||||
if (buffer_size == 0) {
|
||||
buffer = Kokkos::kokkos_malloc<Kokkos::CudaHostPinnedSpace>(src.capacity());
|
||||
buffer_size = src.capacity();
|
||||
} else if (buffer_size < src.capacity()) {
|
||||
buffer = Kokkos::kokkos_realloc<Kokkos::CudaHostPinnedSpace>(buffer,src.capacity());
|
||||
buffer_size = src.capacity();
|
||||
}
|
||||
return mirror_type( buffer ,
|
||||
src.dimension_0() ,
|
||||
src.dimension_1() ,
|
||||
@ -104,8 +109,13 @@ class AtomVecKokkos : public AtomVec {
|
||||
std::is_same<typename ViewType::execution_space,LMPDeviceType>::value,
|
||||
Kokkos::CudaHostPinnedSpace,typename ViewType::memory_space>::type,
|
||||
Kokkos::MemoryTraits<Kokkos::Unmanaged> > mirror_type;
|
||||
if(buffer_size < src.capacity())
|
||||
if (buffer_size == 0) {
|
||||
buffer = Kokkos::kokkos_malloc<Kokkos::CudaHostPinnedSpace>(src.capacity()*sizeof(typename ViewType::value_type));
|
||||
buffer_size = src.capacity();
|
||||
} else if (buffer_size < src.capacity()) {
|
||||
buffer = Kokkos::kokkos_realloc<Kokkos::CudaHostPinnedSpace>(buffer,src.capacity()*sizeof(typename ViewType::value_type));
|
||||
buffer_size = src.capacity();
|
||||
}
|
||||
mirror_type tmp_view( (typename ViewType::value_type*)buffer ,
|
||||
src.dimension_0() ,
|
||||
src.dimension_1() ,
|
||||
|
||||
@ -74,6 +74,19 @@ void NeighborKokkos::init()
|
||||
atomKK = (AtomKokkos *) atom;
|
||||
Neighbor::init();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// 1st time allocation of xhold
|
||||
|
||||
if (dist_check)
|
||||
@ -358,8 +371,8 @@ void NeighborKokkos::init_topology() {
|
||||
normally built with pair lists, but USER-CUDA separates them
|
||||
------------------------------------------------------------------------- */
|
||||
|
||||
void NeighborKokkos::build_topology() {
|
||||
if (device_flag) {
|
||||
void NeighborKokkos::build_topology_kokkos() {
|
||||
if (nlist_device) {
|
||||
neighbond_device.build_topology_kk();
|
||||
|
||||
k_bondlist = neighbond_device.k_bondlist;
|
||||
@ -376,22 +389,34 @@ void NeighborKokkos::build_topology() {
|
||||
k_anglelist.modify<LMPDeviceType>();
|
||||
k_dihedrallist.modify<LMPDeviceType>();
|
||||
k_improperlist.modify<LMPDeviceType>();
|
||||
} else {
|
||||
|
||||
// Transfer topology neighbor lists to Host for non-Kokkos styles
|
||||
|
||||
if (force->bond && force->bond->execution_space == Host)
|
||||
k_bondlist.sync<LMPHostType>();
|
||||
if (force->angle && force->angle->execution_space == Host)
|
||||
k_anglelist.sync<LMPHostType>();
|
||||
if (force->dihedral && force->dihedral->execution_space == Host)
|
||||
k_dihedrallist.sync<LMPHostType>();
|
||||
if (force->improper && force->improper->execution_space == Host)
|
||||
k_improperlist.sync<LMPHostType>();
|
||||
|
||||
} else {
|
||||
neighbond_host.build_topology_kk();
|
||||
|
||||
|
||||
k_bondlist = neighbond_host.k_bondlist;
|
||||
k_anglelist = neighbond_host.k_anglelist;
|
||||
k_dihedrallist = neighbond_host.k_dihedrallist;
|
||||
k_improperlist = neighbond_host.k_improperlist;
|
||||
|
||||
|
||||
k_bondlist.sync<LMPHostType>();
|
||||
k_anglelist.sync<LMPHostType>();
|
||||
k_dihedrallist.sync<LMPHostType>();
|
||||
k_improperlist.sync<LMPHostType>();
|
||||
|
||||
|
||||
k_bondlist.modify<LMPHostType>();
|
||||
k_anglelist.modify<LMPHostType>();
|
||||
k_dihedrallist.modify<LMPHostType>();
|
||||
k_improperlist.modify<LMPHostType>();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -125,26 +125,26 @@ void PairTersoffKokkos<DeviceType>::setup_params()
|
||||
for (i = 1; i <= n; i++)
|
||||
for (j = 1; j <= n; j++)
|
||||
for (k = 1; k <= n; k++) {
|
||||
m = elem2param[i-1][j-1][k-1];
|
||||
k_params.h_view(i,j,k).powerm = params[m].powerm;
|
||||
k_params.h_view(i,j,k).gamma = params[m].gamma;
|
||||
k_params.h_view(i,j,k).lam3 = params[m].lam3;
|
||||
k_params.h_view(i,j,k).c = params[m].c;
|
||||
k_params.h_view(i,j,k).d = params[m].d;
|
||||
k_params.h_view(i,j,k).h = params[m].h;
|
||||
k_params.h_view(i,j,k).powern = params[m].powern;
|
||||
k_params.h_view(i,j,k).beta = params[m].beta;
|
||||
k_params.h_view(i,j,k).lam2 = params[m].lam2;
|
||||
k_params.h_view(i,j,k).bigb = params[m].bigb;
|
||||
k_params.h_view(i,j,k).bigr = params[m].bigr;
|
||||
k_params.h_view(i,j,k).bigd = params[m].bigd;
|
||||
k_params.h_view(i,j,k).lam1 = params[m].lam1;
|
||||
k_params.h_view(i,j,k).biga = params[m].biga;
|
||||
k_params.h_view(i,j,k).cutsq = params[m].cutsq;
|
||||
k_params.h_view(i,j,k).c1 = params[m].c1;
|
||||
k_params.h_view(i,j,k).c2 = params[m].c2;
|
||||
k_params.h_view(i,j,k).c3 = params[m].c3;
|
||||
k_params.h_view(i,j,k).c4 = params[m].c4;
|
||||
m = elem2param[map[i]][map[j]][map[k]];
|
||||
k_params.h_view(i,j,k).powerm = params[m].powerm;
|
||||
k_params.h_view(i,j,k).gamma = params[m].gamma;
|
||||
k_params.h_view(i,j,k).lam3 = params[m].lam3;
|
||||
k_params.h_view(i,j,k).c = params[m].c;
|
||||
k_params.h_view(i,j,k).d = params[m].d;
|
||||
k_params.h_view(i,j,k).h = params[m].h;
|
||||
k_params.h_view(i,j,k).powern = params[m].powern;
|
||||
k_params.h_view(i,j,k).beta = params[m].beta;
|
||||
k_params.h_view(i,j,k).lam2 = params[m].lam2;
|
||||
k_params.h_view(i,j,k).bigb = params[m].bigb;
|
||||
k_params.h_view(i,j,k).bigr = params[m].bigr;
|
||||
k_params.h_view(i,j,k).bigd = params[m].bigd;
|
||||
k_params.h_view(i,j,k).lam1 = params[m].lam1;
|
||||
k_params.h_view(i,j,k).biga = params[m].biga;
|
||||
k_params.h_view(i,j,k).cutsq = params[m].cutsq;
|
||||
k_params.h_view(i,j,k).c1 = params[m].c1;
|
||||
k_params.h_view(i,j,k).c2 = params[m].c2;
|
||||
k_params.h_view(i,j,k).c3 = params[m].c3;
|
||||
k_params.h_view(i,j,k).c4 = params[m].c4;
|
||||
}
|
||||
|
||||
k_params.template modify<LMPHostType>();
|
||||
|
||||
@ -124,27 +124,27 @@ void PairTersoffMODKokkos<DeviceType>::setup_params()
|
||||
for (i = 1; i <= n; i++)
|
||||
for (j = 1; j <= n; j++)
|
||||
for (k = 1; k <= n; k++) {
|
||||
m = elem2param[i-1][j-1][k-1];
|
||||
k_params.h_view(i,j,k).powerm = params[m].powerm;
|
||||
k_params.h_view(i,j,k).lam3 = params[m].lam3;
|
||||
k_params.h_view(i,j,k).h = params[m].h;
|
||||
k_params.h_view(i,j,k).powern = params[m].powern;
|
||||
k_params.h_view(i,j,k).beta = params[m].beta;
|
||||
k_params.h_view(i,j,k).lam2 = params[m].lam2;
|
||||
k_params.h_view(i,j,k).bigb = params[m].bigb;
|
||||
k_params.h_view(i,j,k).bigr = params[m].bigr;
|
||||
k_params.h_view(i,j,k).bigd = params[m].bigd;
|
||||
k_params.h_view(i,j,k).lam1 = params[m].lam1;
|
||||
k_params.h_view(i,j,k).biga = params[m].biga;
|
||||
k_params.h_view(i,j,k).cutsq = params[m].cutsq;
|
||||
k_params.h_view(i,j,k).c1 = params[m].c1;
|
||||
k_params.h_view(i,j,k).c2 = params[m].c2;
|
||||
k_params.h_view(i,j,k).c3 = params[m].c3;
|
||||
k_params.h_view(i,j,k).c4 = params[m].c4;
|
||||
k_params.h_view(i,j,k).c5 = params[m].c5;
|
||||
k_params.h_view(i,j,k).ca1 = params[m].ca1;
|
||||
k_params.h_view(i,j,k).ca4 = params[m].ca4;
|
||||
k_params.h_view(i,j,k).powern_del = params[m].powern_del;
|
||||
m = elem2param[map[i]][map[j]][map[k]];
|
||||
k_params.h_view(i,j,k).powerm = params[m].powerm;
|
||||
k_params.h_view(i,j,k).lam3 = params[m].lam3;
|
||||
k_params.h_view(i,j,k).h = params[m].h;
|
||||
k_params.h_view(i,j,k).powern = params[m].powern;
|
||||
k_params.h_view(i,j,k).beta = params[m].beta;
|
||||
k_params.h_view(i,j,k).lam2 = params[m].lam2;
|
||||
k_params.h_view(i,j,k).bigb = params[m].bigb;
|
||||
k_params.h_view(i,j,k).bigr = params[m].bigr;
|
||||
k_params.h_view(i,j,k).bigd = params[m].bigd;
|
||||
k_params.h_view(i,j,k).lam1 = params[m].lam1;
|
||||
k_params.h_view(i,j,k).biga = params[m].biga;
|
||||
k_params.h_view(i,j,k).cutsq = params[m].cutsq;
|
||||
k_params.h_view(i,j,k).c1 = params[m].c1;
|
||||
k_params.h_view(i,j,k).c2 = params[m].c2;
|
||||
k_params.h_view(i,j,k).c3 = params[m].c3;
|
||||
k_params.h_view(i,j,k).c4 = params[m].c4;
|
||||
k_params.h_view(i,j,k).c5 = params[m].c5;
|
||||
k_params.h_view(i,j,k).ca1 = params[m].ca1;
|
||||
k_params.h_view(i,j,k).ca4 = params[m].ca4;
|
||||
k_params.h_view(i,j,k).powern_del = params[m].powern_del;
|
||||
}
|
||||
|
||||
k_params.template modify<LMPHostType>();
|
||||
|
||||
@ -135,30 +135,30 @@ void PairTersoffZBLKokkos<DeviceType>::setup_params()
|
||||
for (i = 1; i <= n; i++)
|
||||
for (j = 1; j <= n; j++)
|
||||
for (k = 1; k <= n; k++) {
|
||||
m = elem2param[i-1][j-1][k-1];
|
||||
k_params.h_view(i,j,k).powerm = params[m].powerm;
|
||||
k_params.h_view(i,j,k).gamma = params[m].gamma;
|
||||
k_params.h_view(i,j,k).lam3 = params[m].lam3;
|
||||
k_params.h_view(i,j,k).c = params[m].c;
|
||||
k_params.h_view(i,j,k).d = params[m].d;
|
||||
k_params.h_view(i,j,k).h = params[m].h;
|
||||
k_params.h_view(i,j,k).powern = params[m].powern;
|
||||
k_params.h_view(i,j,k).beta = params[m].beta;
|
||||
k_params.h_view(i,j,k).lam2 = params[m].lam2;
|
||||
k_params.h_view(i,j,k).bigb = params[m].bigb;
|
||||
k_params.h_view(i,j,k).bigr = params[m].bigr;
|
||||
k_params.h_view(i,j,k).bigd = params[m].bigd;
|
||||
k_params.h_view(i,j,k).lam1 = params[m].lam1;
|
||||
k_params.h_view(i,j,k).biga = params[m].biga;
|
||||
k_params.h_view(i,j,k).cutsq = params[m].cutsq;
|
||||
k_params.h_view(i,j,k).c1 = params[m].c1;
|
||||
k_params.h_view(i,j,k).c2 = params[m].c2;
|
||||
k_params.h_view(i,j,k).c3 = params[m].c3;
|
||||
k_params.h_view(i,j,k).c4 = params[m].c4;
|
||||
k_params.h_view(i,j,k).Z_i = params[m].Z_i;
|
||||
k_params.h_view(i,j,k).Z_j = params[m].Z_j;
|
||||
k_params.h_view(i,j,k).ZBLcut = params[m].ZBLcut;
|
||||
k_params.h_view(i,j,k).ZBLexpscale = params[m].ZBLexpscale;
|
||||
m = elem2param[map[i]][map[j]][map[k]];
|
||||
k_params.h_view(i,j,k).powerm = params[m].powerm;
|
||||
k_params.h_view(i,j,k).gamma = params[m].gamma;
|
||||
k_params.h_view(i,j,k).lam3 = params[m].lam3;
|
||||
k_params.h_view(i,j,k).c = params[m].c;
|
||||
k_params.h_view(i,j,k).d = params[m].d;
|
||||
k_params.h_view(i,j,k).h = params[m].h;
|
||||
k_params.h_view(i,j,k).powern = params[m].powern;
|
||||
k_params.h_view(i,j,k).beta = params[m].beta;
|
||||
k_params.h_view(i,j,k).lam2 = params[m].lam2;
|
||||
k_params.h_view(i,j,k).bigb = params[m].bigb;
|
||||
k_params.h_view(i,j,k).bigr = params[m].bigr;
|
||||
k_params.h_view(i,j,k).bigd = params[m].bigd;
|
||||
k_params.h_view(i,j,k).lam1 = params[m].lam1;
|
||||
k_params.h_view(i,j,k).biga = params[m].biga;
|
||||
k_params.h_view(i,j,k).cutsq = params[m].cutsq;
|
||||
k_params.h_view(i,j,k).c1 = params[m].c1;
|
||||
k_params.h_view(i,j,k).c2 = params[m].c2;
|
||||
k_params.h_view(i,j,k).c3 = params[m].c3;
|
||||
k_params.h_view(i,j,k).c4 = params[m].c4;
|
||||
k_params.h_view(i,j,k).Z_i = params[m].Z_i;
|
||||
k_params.h_view(i,j,k).Z_j = params[m].Z_j;
|
||||
k_params.h_view(i,j,k).ZBLcut = params[m].ZBLcut;
|
||||
k_params.h_view(i,j,k).ZBLexpscale = params[m].ZBLexpscale;
|
||||
}
|
||||
|
||||
k_params.template modify<LMPHostType>();
|
||||
|
||||
@ -33,10 +33,10 @@ template<class DeviceType>
|
||||
class RegBlockKokkos : public RegBlock {
|
||||
friend class FixPour;
|
||||
|
||||
public:
|
||||
typedef DeviceType device_type;
|
||||
typedef ArrayTypes<DeviceType> AT;
|
||||
|
||||
public:
|
||||
RegBlockKokkos(class LAMMPS *, int, char **);
|
||||
~RegBlockKokkos();
|
||||
void match_all_kokkos(int, DAT::t_int_1d);
|
||||
|
||||
@ -856,7 +856,7 @@ void mpi_timings(const char *label, Timer *t, enum Timer::ttype tt,
|
||||
time_cpu = tmp/nprocs*100.0;
|
||||
|
||||
// % variance from the average as measure of load imbalance
|
||||
if (time > 1.0e-10)
|
||||
if ((time_sq/time - time) > 1.0e-10)
|
||||
time_sq = sqrt(time_sq/time - time)*100.0;
|
||||
else
|
||||
time_sq = 0.0;
|
||||
@ -908,7 +908,7 @@ void omp_times(FixOMP *fix, const char *label, enum Timer::ttype which,
|
||||
time_std /= nthreads;
|
||||
time_total /= nthreads;
|
||||
|
||||
if (time_avg > 1.0e-10)
|
||||
if ((time_std/time_avg -time_avg) > 1.0e-10)
|
||||
time_std = sqrt(time_std/time_avg - time_avg)*100.0;
|
||||
else
|
||||
time_std = 0.0;
|
||||
|
||||
Reference in New Issue
Block a user