Skip to content

10x slower looping over reinterpret array #51658

@Moelf

Description

@Moelf

previous saga:


julia> _from_zigzag(n) = (n >> one(n))  -(n & one(n))
_from_zigzag (generic function with 1 method)

julia> function g(res)
           @simd for i in eachindex(res)
               res[i] = _from_zigzag(res[i])
           end
       end
g (generic function with 1 method)

julia> ARY = reinterpret(Int16, rand(UInt8, 10^5));

julia> using BenchmarkTools

julia> @benchmark g(x) setup=begin x = copy(ARY) end
BenchmarkTools.Trial: 10000 samples with 10 evaluations.
 Range (min  max):  1.281 μs   3.130 μs  ┊ GC (min  max): 0.00%  0.00%
 Time  (median):     1.290 μs              ┊ GC (median):    0.00%
 Time  (mean ± σ):   1.304 μs ± 64.783 ns  ┊ GC (mean ± σ):  0.00% ± 0.00%

  ▅█▇▆▅▄▃▂▂▁▁                       ▂▂▁                      ▂
  ██████████████▇▆▆▅▅▅▁▁▁▃▃▁▃▁▁▁▁▁▅█████▇▆▁▅▄▄▃▅▃▄▄▄▄▃▃▄▄▃▄▅ █
  1.28 μs      Histogram: log(frequency) by time     1.52 μs <

 Memory estimate: 0 bytes, allocs estimate: 0.

julia> @benchmark g(x) setup=begin x = deepcopy(ARY) end
BenchmarkTools.Trial: 10000 samples with 1 evaluation.
 Range (min  max):  322.640 μs  481.445 μs  ┊ GC (min  max): 0.00%  0.00%
 Time  (median):     324.080 μs               ┊ GC (median):    0.00%
 Time  (mean ± σ):   325.580 μs ±   6.105 μs  ┊ GC (mean ± σ):  0.00% ± 0.00%

  ▂██▆▆▅▃▂▂                                                     ▂
  ███████████▇▇▇▆▆▆▆▆▆▅▆▆▅▅▆▆▆▆▇▇▅▆▅▅▆▄▅▅▄▅▅▅▄▃▄▅▄▄▅▂▄▄▅▅▅▄▃▄▅▅ █
  323 μs        Histogram: log(frequency) by time        358 μs <

 Memory estimate: 0 bytes, allocs estimate: 0.

that's a 300x slowdown?

notice, it's faster to first copy...

julia> @benchmark g(copy(x)) setup=begin x = ARY end
BenchmarkTools.Trial: 10000 samples with 1 evaluation.
 Range (min  max):  29.527 μs  444.092 μs  ┊ GC (min  max): 0.00%  84.11%
 Time  (median):     32.452 μs               ┊ GC (median):    0.00%
 Time  (mean ± σ):   33.225 μs ±  10.909 μs  ┊ GC (mean ± σ):  0.90% ±  2.60%

         ▄█▅▅▆▁
  ▂▃▅▆▄▅▇██████▅▃▃▃▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▁▂▂▁▁▂▂▂▂▂▂▂▂▂▂▂▂▂▂ ▃
  29.5 μs         Histogram: frequency by time         48.3 μs <

 Memory estimate: 97.73 KiB, allocs estimate: 2.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions