System extrema
|
1 |
64 |
Calculate the maximum and minimum dimensions of the system, define the size and shape of the lookup table. When periodic boundaries are used, these calculations only need to be performed once and this kernel is ignored. |
Reset lookup table
|
dimX * dimY * dimZ |
1 |
Each block attends one voxel, and the single thread in each block sets the number of atoms per voxel to 0. |
Fill lookup table
|
number of atoms |
256 |
Each block attends one atom, and each thread attends one voxel near that atom. If the atom resides in this voxel (see eq. 21), then this atom's index is recorded. |
Sort lookup table
|
dimX * dimY * dimZ |
25 |
Each block sorts one voxel of space. Each thread sorts one atom in the 1D lookup list at the block's voxel. Atoms are sorted by distance to the voxel's center ratom, voxel using a parallel bubble-sort. Although O(N2) comparisons take place during the sort, the parallel architecture allows it to run in O(N) time. Since the sorted array finds quadrature points inside atoms faster than unsorted arrays, it speeds up the Born radius calculation by about 40 % over using an unsorted lookup table. |