From 3dc2f246f5307a14cd2441f84f47900b3219c4b4 Mon Sep 17 00:00:00 2001 From: quinnj Date: Wed, 16 Aug 2017 22:02:32 -0600 Subject: [PATCH 1/2] Add isbits Union benchmarks --- src/misc/MiscellaneousBenchmarks.jl | 47 +++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/src/misc/MiscellaneousBenchmarks.jl b/src/misc/MiscellaneousBenchmarks.jl index 1c2ea1fd..087abdc9 100644 --- a/src/misc/MiscellaneousBenchmarks.jl +++ b/src/misc/MiscellaneousBenchmarks.jl @@ -8,6 +8,53 @@ using Compat const SUITE = BenchmarkGroup() +########################################################################### +# isbits Union optimizations for type fields & array elements (issue #22441) + +g = addgroup!(SUITE, "isbitsunions", ["indexing", "simd", "union"]) + +mutable struct UnionField + u::Union{Int64, Void} +end + +function getsetfield(A) + for i = 1:length(A)-1 + A[i].u = A[i + 1].u + end +end + +function makeUnionFieldArray(N) + A = [UnionField(i) for i in rand(Int64, N)] + for i in rand(1:N, div(N, 4)) + A[i].u = nothing + end + return A +end + +g["getsetfield"] = @benchmarkable getsetfield($(makeUnionFieldArray(10000))) + +function getsetindex(A) + for i = 1:length(A)-1 + # v = A[i + 1] + # if v isa Void + # A[i] = v + # else + # A[i] = v + # end + A[i] = A[i + 1] + end +end + +function makeIsBitsUnionArray(N) + A = Union{Int64, Void}[i for i in rand(Int64, N)] + for i in rand(1:N, div(N, 4)) + A[i] = nothing + end + return A +end + +g["getsetindex"] = @benchmarkable getsetindex($(makeIsBitsUnionArray(10000))) + ########################################################################### # Splatting penalties (issue #13359) From c94d495ee98adbd673b80e123072a58348ee4b24 Mon Sep 17 00:00:00 2001 From: Alex Arslan Date: Fri, 12 Jan 2018 22:24:37 -0800 Subject: [PATCH 2/2] Stylistic updates and updates for 0.7 changes --- src/misc/MiscellaneousBenchmarks.jl | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/misc/MiscellaneousBenchmarks.jl b/src/misc/MiscellaneousBenchmarks.jl index 087abdc9..13755fc4 100644 --- a/src/misc/MiscellaneousBenchmarks.jl +++ b/src/misc/MiscellaneousBenchmarks.jl @@ -14,7 +14,7 @@ const SUITE = BenchmarkGroup() g = addgroup!(SUITE, "isbitsunions", ["indexing", "simd", "union"]) mutable struct UnionField - u::Union{Int64, Void} + u::Union{Int64, Nothing} end function getsetfield(A) @@ -23,7 +23,7 @@ function getsetfield(A) end end -function makeUnionFieldArray(N) +function make_union_field_array(N) A = [UnionField(i) for i in rand(Int64, N)] for i in rand(1:N, div(N, 4)) A[i].u = nothing @@ -31,12 +31,12 @@ function makeUnionFieldArray(N) return A end -g["getsetfield"] = @benchmarkable getsetfield($(makeUnionFieldArray(10000))) +g["getsetfield"] = @benchmarkable getsetfield($(make_union_field_array(10000))) function getsetindex(A) for i = 1:length(A)-1 # v = A[i + 1] - # if v isa Void + # if v isa Nothing # A[i] = v # else # A[i] = v @@ -45,15 +45,15 @@ function getsetindex(A) end end -function makeIsBitsUnionArray(N) - A = Union{Int64, Void}[i for i in rand(Int64, N)] +function make_isbits_union_array(N) + A = Union{Int64, Nothing}[i for i in rand(Int64, N)] for i in rand(1:N, div(N, 4)) A[i] = nothing end return A end -g["getsetindex"] = @benchmarkable getsetindex($(makeIsBitsUnionArray(10000))) +g["getsetindex"] = @benchmarkable getsetindex($(make_isbits_union_array(10000))) ########################################################################### # Splatting penalties (issue #13359)