USER-DPD: specialize PairTableRXKokkos's compute_all_items() on NEWTON_PAIR

No noticable performance change, but it does eliminate a deep conditional.
This commit is contained in:
Tim Mattox
2017-03-13 03:03:27 -04:00
parent d5eceebf32
commit 4b4bc7dc3b

View File

@ -514,9 +514,8 @@ compute_item(
return ev;
}
template<class DeviceType, int NEIGHFLAG, bool STACKPARAMS, int TABSTYLE>
template<class DeviceType, int NEIGHFLAG, bool STACKPARAMS, int TABSTYLE, int NEWTON_PAIR>
static void compute_all_items(
int newton_pair,
EV_FLOAT& ev,
int nlocal,
int inum,
@ -560,42 +559,23 @@ static void compute_all_items(
if (eflag || vflag) {
Kokkos::parallel_reduce(inum,
LAMMPS_LAMBDA(int i, EV_FLOAT& energy_virial) {
if (newton_pair) {
energy_virial +=
compute_item<DeviceType,NEIGHFLAG,STACKPARAMS,TABSTYLE,1,1>(
compute_item<DeviceType,NEIGHFLAG,STACKPARAMS,TABSTYLE,1,NEWTON_PAIR>(
i, nlocal, d_ilist, d_neighbors, d_numneigh, x, type,
mixWtSite1old, mixWtSite2old, mixWtSite1, mixWtSite2,
special_lj, m_cutsq, d_cutsq, f, uCG, uCGnew, isite1, isite2,
d_table_const, eflag, eflag_atom,
vflag, vflag_global, vflag_atom, v_vatom, v_eatom);
} else {
energy_virial +=
compute_item<DeviceType,NEIGHFLAG,STACKPARAMS,TABSTYLE,1,0>(
i, nlocal, d_ilist, d_neighbors, d_numneigh, x, type,
mixWtSite1old, mixWtSite2old, mixWtSite1, mixWtSite2,
special_lj, m_cutsq, d_cutsq, f, uCG, uCGnew, isite1, isite2,
d_table_const, eflag, eflag_atom,
vflag, vflag_global, vflag_atom, v_vatom, v_eatom);
}
}, ev);
} else {
Kokkos::parallel_for(inum,
LAMMPS_LAMBDA(int i) {
if (newton_pair) {
compute_item<DeviceType,NEIGHFLAG,STACKPARAMS,TABSTYLE,0,1>(
compute_item<DeviceType,NEIGHFLAG,STACKPARAMS,TABSTYLE,0,NEWTON_PAIR>(
i, nlocal, d_ilist, d_neighbors, d_numneigh, x, type,
mixWtSite1old, mixWtSite2old, mixWtSite1, mixWtSite2,
special_lj, m_cutsq, d_cutsq, f, uCG, uCGnew, isite1, isite2,
d_table_const, eflag, eflag_atom,
vflag, vflag_global, vflag_atom, v_vatom, v_eatom);
} else {
compute_item<DeviceType,NEIGHFLAG,STACKPARAMS,TABSTYLE,0,0>(
i, nlocal, d_ilist, d_neighbors, d_numneigh, x, type,
mixWtSite1old, mixWtSite2old, mixWtSite1, mixWtSite2,
special_lj, m_cutsq, d_cutsq, f, uCG, uCGnew, isite1, isite2,
d_table_const, eflag, eflag_atom,
vflag, vflag_global, vflag_atom, v_vatom, v_eatom);
}
});
}
}
@ -678,55 +658,103 @@ void PairTableRXKokkos<DeviceType>::compute_style(int eflag_in, int vflag_in)
EV_FLOAT ev;
if(atom->ntypes > MAX_TYPES_STACKPARAMS) {
if (neighflag == HALFTHREAD) {
compute_all_items<DeviceType,HALFTHREAD,false,TABSTYLE>(
newton_pair, ev, nlocal,
l->inum, l->d_ilist, l->d_neighbors, l->d_numneigh,
if (newton_pair) {
compute_all_items<DeviceType,HALFTHREAD,false,TABSTYLE,1>(
ev, nlocal, l->inum, l->d_ilist, l->d_neighbors, l->d_numneigh,
x, type, mixWtSite1old, mixWtSite2old, mixWtSite1, mixWtSite2,
special_lj_local, m_cutsq, d_cutsq, f, uCG, uCGnew, isite1, isite2,
d_table_const, eflag, eflag_atom,
vflag, vflag_global, vflag_atom, d_vatom, d_eatom);
} else {
compute_all_items<DeviceType,HALFTHREAD,false,TABSTYLE,0>(
ev, nlocal, l->inum, l->d_ilist, l->d_neighbors, l->d_numneigh,
x, type, mixWtSite1old, mixWtSite2old, mixWtSite1, mixWtSite2,
special_lj_local, m_cutsq, d_cutsq, f, uCG, uCGnew, isite1, isite2,
d_table_const, eflag, eflag_atom,
vflag, vflag_global, vflag_atom, d_vatom, d_eatom);
}
} else if (neighflag == HALF) {
compute_all_items<DeviceType,HALF,false,TABSTYLE>(
newton_pair, ev, nlocal,
l->inum, l->d_ilist, l->d_neighbors, l->d_numneigh,
if (newton_pair) {
compute_all_items<DeviceType,HALF,false,TABSTYLE,1>(
ev, nlocal, l->inum, l->d_ilist, l->d_neighbors, l->d_numneigh,
x, type, mixWtSite1old, mixWtSite2old, mixWtSite1, mixWtSite2,
special_lj_local, m_cutsq, d_cutsq, f, uCG, uCGnew, isite1, isite2,
d_table_const, eflag, eflag_atom,
vflag, vflag_global, vflag_atom, d_vatom, d_eatom);
} else {
compute_all_items<DeviceType,HALF,false,TABSTYLE,0>(
ev, nlocal, l->inum, l->d_ilist, l->d_neighbors, l->d_numneigh,
x, type, mixWtSite1old, mixWtSite2old, mixWtSite1, mixWtSite2,
special_lj_local, m_cutsq, d_cutsq, f, uCG, uCGnew, isite1, isite2,
d_table_const, eflag, eflag_atom,
vflag, vflag_global, vflag_atom, d_vatom, d_eatom);
}
} else if (neighflag == FULL) {
compute_all_items<DeviceType,FULL,false,TABSTYLE>(
newton_pair, ev, nlocal,
l->inum, l->d_ilist, l->d_neighbors, l->d_numneigh,
if (newton_pair) {
compute_all_items<DeviceType,FULL,false,TABSTYLE,1>(
ev, nlocal, l->inum, l->d_ilist, l->d_neighbors, l->d_numneigh,
x, type, mixWtSite1old, mixWtSite2old, mixWtSite1, mixWtSite2,
special_lj_local, m_cutsq, d_cutsq, f, uCG, uCGnew, isite1, isite2,
d_table_const, eflag, eflag_atom,
vflag, vflag_global, vflag_atom, d_vatom, d_eatom);
} else {
compute_all_items<DeviceType,FULL,false,TABSTYLE,0>(
ev, nlocal, l->inum, l->d_ilist, l->d_neighbors, l->d_numneigh,
x, type, mixWtSite1old, mixWtSite2old, mixWtSite1, mixWtSite2,
special_lj_local, m_cutsq, d_cutsq, f, uCG, uCGnew, isite1, isite2,
d_table_const, eflag, eflag_atom,
vflag, vflag_global, vflag_atom, d_vatom, d_eatom);
}
}
} else {
if (neighflag == HALFTHREAD) {
compute_all_items<DeviceType,HALFTHREAD,true,TABSTYLE>(
newton_pair, ev, nlocal,
l->inum, l->d_ilist, l->d_neighbors, l->d_numneigh,
if (newton_pair) {
compute_all_items<DeviceType,HALFTHREAD,true,TABSTYLE,1>(
ev, nlocal, l->inum, l->d_ilist, l->d_neighbors, l->d_numneigh,
x, type, mixWtSite1old, mixWtSite2old, mixWtSite1, mixWtSite2,
special_lj_local, m_cutsq, d_cutsq, f, uCG, uCGnew, isite1, isite2,
d_table_const, eflag, eflag_atom,
vflag, vflag_global, vflag_atom, d_vatom, d_eatom);
} else {
compute_all_items<DeviceType,HALFTHREAD,true,TABSTYLE,0>(
ev, nlocal, l->inum, l->d_ilist, l->d_neighbors, l->d_numneigh,
x, type, mixWtSite1old, mixWtSite2old, mixWtSite1, mixWtSite2,
special_lj_local, m_cutsq, d_cutsq, f, uCG, uCGnew, isite1, isite2,
d_table_const, eflag, eflag_atom,
vflag, vflag_global, vflag_atom, d_vatom, d_eatom);
}
} else if (neighflag == HALF) {
compute_all_items<DeviceType,HALF,true,TABSTYLE>(
newton_pair, ev, nlocal,
l->inum, l->d_ilist, l->d_neighbors, l->d_numneigh,
if (newton_pair) {
compute_all_items<DeviceType,HALF,true,TABSTYLE,1>(
ev, nlocal, l->inum, l->d_ilist, l->d_neighbors, l->d_numneigh,
x, type, mixWtSite1old, mixWtSite2old, mixWtSite1, mixWtSite2,
special_lj_local, m_cutsq, d_cutsq, f, uCG, uCGnew, isite1, isite2,
d_table_const, eflag, eflag_atom,
vflag, vflag_global, vflag_atom, d_vatom, d_eatom);
} else {
compute_all_items<DeviceType,HALF,true,TABSTYLE,0>(
ev, nlocal, l->inum, l->d_ilist, l->d_neighbors, l->d_numneigh,
x, type, mixWtSite1old, mixWtSite2old, mixWtSite1, mixWtSite2,
special_lj_local, m_cutsq, d_cutsq, f, uCG, uCGnew, isite1, isite2,
d_table_const, eflag, eflag_atom,
vflag, vflag_global, vflag_atom, d_vatom, d_eatom);
}
} else if (neighflag == FULL) {
compute_all_items<DeviceType,FULL,true,TABSTYLE>(
newton_pair, ev, nlocal,
l->inum, l->d_ilist, l->d_neighbors, l->d_numneigh,
if (newton_pair) {
compute_all_items<DeviceType,FULL,true,TABSTYLE,1>(
ev, nlocal, l->inum, l->d_ilist, l->d_neighbors, l->d_numneigh,
x, type, mixWtSite1old, mixWtSite2old, mixWtSite1, mixWtSite2,
special_lj_local, m_cutsq, d_cutsq, f, uCG, uCGnew, isite1, isite2,
d_table_const, eflag, eflag_atom,
vflag, vflag_global, vflag_atom, d_vatom, d_eatom);
} else {
compute_all_items<DeviceType,FULL,true,TABSTYLE,0>(
ev, nlocal, l->inum, l->d_ilist, l->d_neighbors, l->d_numneigh,
x, type, mixWtSite1old, mixWtSite2old, mixWtSite1, mixWtSite2,
special_lj_local, m_cutsq, d_cutsq, f, uCG, uCGnew, isite1, isite2,
d_table_const, eflag, eflag_atom,
vflag, vflag_global, vflag_atom, d_vatom, d_eatom);
}
}
}