-
-
Notifications
You must be signed in to change notification settings - Fork 5.7k
Open
Labels
performanceMust go fasterMust go faster
Description
previous saga:
- in-place broadcast (e.g.
.+=) significanctly slower for reinterpreted array #48801 ntoh/bswapare 10x slower when operating in-place onreinterpretarray #42227
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
Labels
performanceMust go fasterMust go faster