Commit 406aaf01 authored by Denis Taniguchi's avatar Denis Taniguchi
Browse files

Improving global memory access pattern for firstflag and firstvalue in FixNeighHistoryKokkos.

parent 0d1e55c9
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -174,8 +174,8 @@ void FixNeighHistoryKokkos<DeviceType>::post_neighbor()

  if (maxatom < nlocal || k_list->maxneighs > d_firstflag.extent(1)) {
    maxatom = nall;
    d_firstflag = typename ArrayTypes<DeviceType>::t_int_2d("neighbor_history:firstflag",maxatom,k_list->maxneighs);
    d_firstvalue = typename ArrayTypes<DeviceType>::t_float_2d("neighbor_history:firstvalue",maxatom,k_list->maxneighs*dnum);
    d_firstflag = Kokkos::View<int**>("neighbor_history:firstflag",maxatom,k_list->maxneighs);
    d_firstvalue = Kokkos::View<LMP_FLOAT**>("neighbor_history:firstvalue",maxatom,k_list->maxneighs*dnum);
  }

  copymode = 1;
+2 −2
Original line number Diff line number Diff line
@@ -49,8 +49,8 @@ class FixNeighHistoryKokkos : public FixNeighHistory {
  KOKKOS_INLINE_FUNCTION
  void post_neighbor_item(const int &ii) const;

  typename ArrayTypes<DeviceType>::t_int_2d d_firstflag;
  typename ArrayTypes<DeviceType>::t_float_2d d_firstvalue;
  typename Kokkos::View<int**> d_firstflag;
  typename Kokkos::View<LMP_FLOAT**> d_firstvalue;

 private:
  typename ArrayTypes<DeviceType>::tdual_int_1d k_npartner;
+19 −19
Original line number Diff line number Diff line
@@ -278,14 +278,14 @@ void PairGranHookeHistoryKokkos<DeviceType>::operator()(TagPairGranHookeHistoryC
  Kokkos::View<F_FLOAT*[3], typename DAT::t_f_array::array_layout,DeviceType,Kokkos::MemoryTraits<AtomicF<NEIGHFLAG>::value> > a_f = f;
  Kokkos::View<F_FLOAT*[3], typename DAT::t_f_array::array_layout,DeviceType,Kokkos::MemoryTraits<AtomicF<NEIGHFLAG>::value> > a_torque = torque;

  int i = d_ilist[ii];
  X_FLOAT xtmp = x(i,0);
  X_FLOAT ytmp = x(i,1);
  X_FLOAT ztmp = x(i,2);
  int itype = type[i];
  LMP_FLOAT imass = rmass[i];
  LMP_FLOAT irad = radius[i];
  int jnum = d_numneigh[i];
  const int i = d_ilist[ii];
  const X_FLOAT xtmp = x(i,0);
  const X_FLOAT ytmp = x(i,1);
  const X_FLOAT ztmp = x(i,2);
  const int itype = type[i];
  const LMP_FLOAT imass = rmass[i];
  const LMP_FLOAT irad = radius[i];
  const int jnum = d_numneigh[i];
  
  F_FLOAT fx_i = 0.0;
  F_FLOAT fy_i = 0.0;
@@ -299,14 +299,14 @@ void PairGranHookeHistoryKokkos<DeviceType>::operator()(TagPairGranHookeHistoryC
    int j = d_neighbors(i,jj);
    j &= NEIGHMASK;

    X_FLOAT delx = xtmp - x(j,0);
    X_FLOAT dely = ytmp - x(j,1);
    X_FLOAT delz = ztmp - x(j,2);
    X_FLOAT rsq = delx*delx + dely*dely + delz*delz;
    int jtype = type[j];
    LMP_FLOAT jmass = rmass[j];
    LMP_FLOAT jrad = radius[j];
    LMP_FLOAT radsum = irad + jrad;
    const X_FLOAT delx = xtmp - x(j,0);
    const X_FLOAT dely = ytmp - x(j,1);
    const X_FLOAT delz = ztmp - x(j,2);
    const X_FLOAT rsq = delx*delx + dely*dely + delz*delz;
    const int jtype = type[j];
    const LMP_FLOAT jmass = rmass[j];
    const LMP_FLOAT jrad = radius[j];
    const LMP_FLOAT radsum = irad + jrad;

    // check for touching neighbors

@@ -316,9 +316,9 @@ void PairGranHookeHistoryKokkos<DeviceType>::operator()(TagPairGranHookeHistoryC
      d_firstshear(i,3*jj+1) = 0;
      d_firstshear(i,3*jj+2) = 0;
    } else {
      LMP_FLOAT r = sqrt(rsq);
      LMP_FLOAT rinv = 1.0/r;
      LMP_FLOAT rsqinv = 1/rsq;
      const LMP_FLOAT r = sqrt(rsq);
      const LMP_FLOAT rinv = 1.0/r;
      const LMP_FLOAT rsqinv = 1/rsq;

      // relative translational velocity

+2 −2
Original line number Diff line number Diff line
@@ -86,8 +86,8 @@ class PairGranHookeHistoryKokkos : public PairGranHookeHistory {
  typename AT::t_int_1d_randomread d_ilist;
  typename AT::t_int_1d_randomread d_numneigh;

  typename AT::t_int_2d d_firsttouch;
  typename AT::t_float_2d d_firstshear;
  typename Kokkos::View<int**> d_firsttouch;
  typename Kokkos::View<LMP_FLOAT**> d_firstshear;
  
  int newton_pair;
  double special_lj[4];