m3g / CellListMap.jl

Flexible implementation of cell lists to map the calculations of particle-pair dependent functions, such as forces, energies, neighbor lists, etc.
https://m3g.github.io/CellListMap.jl/
MIT License
87 stars 4 forks source link

Implement padding #18

Open lmiq opened 3 years ago

lmiq commented 3 years ago
julia> using StaticArrays, FastPow, BenchmarkTools

julia> function forces!(x,f,d,idxs)
           @inbounds for id in axes(idxs,1)
               i = idxs[id,1]
               j = idxs[id,2]
               r = x[j] - x[i] 
               @fastpow dudr = -12*(1/d^7 - 1/d^4)*r
               f[i] = f[i] + dudr
               f[j] = f[j] - dudr
          end
          return f
       end
forces! (generic function with 1 method)

julia> @benchmark forces!(x,f,d,idxs) setup = ( 
           x = [ rand(SVector{3,Float64}) for _ in 1:1000 ];
           f = [ zeros(SVector{3,Float64}) for _ in 1:1000 ];
           d = rand();
           idxs = rand(1:1000,200,2)
       )
BenchmarkTools.Trial: 10000 samples with 196 evaluations.
 Range (min … max):  468.296 ns …  2.371 μs  ┊ GC (min … max): 0.00% … 0.00%
 Time  (median):     485.852 ns              ┊ GC (median):    0.00%
 Time  (mean ± σ):   506.027 ns ± 68.256 ns  ┊ GC (mean ± σ):  0.00% ± 0.00%

  ▄▇█▇▆▅▅▄▃▃▃▂▂▁▁▁▁▁                                           ▂
  ████████████████████████▆█▇▇▇▇▅▆▆▇▇█▇█▇▇▆▇▇▆▇▆▆▆▆▄▅▅▆▅▅▄▅▄▄▄ █
  468 ns        Histogram: log(frequency) by time       774 ns <

 Memory estimate: 0 bytes, allocs estimate: 0.

julia> @benchmark forces!(x,f,d,idxs) setup = ( 
           x = [ rand(SVector{4,Float64}) for _ in 1:1000 ];
           f = [ zeros(SVector{4,Float64}) for _ in 1:1000 ];
           d = rand();
           idxs = rand(1:1000,200,2)
       )
BenchmarkTools.Trial: 10000 samples with 310 evaluations.
 Range (min … max):  259.797 ns …  1.496 μs  ┊ GC (min … max): 0.00% … 0.00%
 Time  (median):     296.848 ns              ┊ GC (median):    0.00%
 Time  (mean ± σ):   313.750 ns ± 55.203 ns  ┊ GC (mean ± σ):  0.00% ± 0.00%

     ▆█▇▄▃▁                                                     
  ▁▂████████▇▆▆▅▄▄▃▄▃▃▂▂▂▂▂▂▂▂▂▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ ▂
  260 ns          Histogram: frequency by time          550 ns <

 Memory estimate: 0 bytes, allocs es