2011-12-03 00:02:36 +08:00
|
|
|
// **************************************************************************
|
|
|
|
// atom.cu
|
|
|
|
// -------------------
|
|
|
|
// W. Michael Brown (ORNL)
|
|
|
|
//
|
|
|
|
// Device code for handling CPU generated neighbor lists
|
|
|
|
//
|
|
|
|
// __________________________________________________________________________
|
|
|
|
// This file is part of the LAMMPS Accelerator Library (LAMMPS_AL)
|
|
|
|
// __________________________________________________________________________
|
|
|
|
//
|
|
|
|
// begin :
|
|
|
|
// email : brownw@ornl.gov
|
|
|
|
// ***************************************************************************/
|
|
|
|
|
|
|
|
#ifdef NV_KERNEL
|
|
|
|
#include "lal_preprocessor.h"
|
|
|
|
#endif
|
|
|
|
|
2012-09-21 23:57:23 +08:00
|
|
|
__kernel void kernel_unpack(__global int *dev_nbor,
|
|
|
|
const __global int *dev_ij,
|
2011-12-03 00:02:36 +08:00
|
|
|
const int inum, const int t_per_atom) {
|
|
|
|
int tid=THREAD_ID_X;
|
|
|
|
int offset=tid & (t_per_atom-1);
|
|
|
|
int ii=fast_mul((int)BLOCK_ID_X,(int)(BLOCK_SIZE_X)/t_per_atom)+tid/t_per_atom;
|
|
|
|
|
|
|
|
if (ii<inum) {
|
|
|
|
__global int *nbor=dev_nbor+ii+inum;
|
|
|
|
int numj=*nbor;
|
|
|
|
nbor+=inum;
|
2012-09-21 23:57:23 +08:00
|
|
|
const __global int *list=dev_ij+*nbor;
|
|
|
|
const __global int *list_end=list+numj;
|
2011-12-03 00:02:36 +08:00
|
|
|
list+=offset;
|
|
|
|
nbor+=fast_mul(ii,t_per_atom-1)+offset;
|
|
|
|
int stride=fast_mul(t_per_atom,inum);
|
|
|
|
|
|
|
|
for ( ; list<list_end; list++) {
|
|
|
|
*nbor=*list;
|
|
|
|
nbor+=stride;
|
|
|
|
}
|
|
|
|
} // if ii
|
|
|
|
}
|
|
|
|
|