# Why does profiling suggest that integer comparison dominates broadcasted assignment?

**URL:** <https://discourse.julialang.org/t/why-does-profiling-suggest-that-integer-comparison-dominates-broadcasted-assignment/109606>\
**Category:** Performance\
**Tags:** broadcast, array, profiling\
**Created:** [February 2, 2024, 8:17am UTC](https://discourse.julialang.org/t/why-does-profiling-suggest-that-integer-comparison-dominates-broadcasted-assignment/109606 "2024-02-02T08:17:44Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![jishnub](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jishnub/32/33620_2.png) [@jishnub](https://discourse.julialang.org/u/jishnub)\
**Post date:** [February 2, 2024, 8:17am UTC](https://discourse.julialang.org/t/why-does-profiling-suggest-that-integer-comparison-dominates-broadcasted-assignment/109606/1 "2024-02-02T08:17:44Z")

</div>

```julia
julia> a = rand(40000,4000); b = rand(40000,4000);

julia> Profile.clear()

julia> @bprofile $a[1:end, 1:end] .= $b
BenchmarkTools.Trial: 9 samples with 1 evaluation.
 Range (min … max): 571.819 ms … 586.555 ms ┊ GC (min … max): 0.00% … 0.00%
 Time (median): 574.424 ms ┊ GC (median): 0.00%
 Time (mean ± σ): 575.275 ms ± 4.457 ms ┊ GC (mean ± σ): 0.00% ± 0.00%

  █ ▁ ▁ █ ▁▁ ▁  
  █▁▁▁▁█▁█▁▁█▁▁▁▁██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁
  572 ms Histogram: frequency by time 587 ms <

 Memory estimate: 0 bytes, allocs estimate: 0.

julia> Profile.print()
Overhead ╎ [+additional indent] Count File:Line; Function
=========================================================
    ╎4752 @Base/client.jl:535; _start()
    ╎ 4752 @Base/client.jl:561; repl_main
    ╎ 4752 @Base/client.jl:424; run_main_repl(interactive::Bool, quiet::Bool, banner::Symbol, history_file::Bool, color_set::Bool)
    ╎ 4752 @Base/essentials.jl:1017; invokelatest
    ╎ 4752 @Base/essentials.jl:1020; #invokelatest#2
    ╎ 4752 @Base/client.jl:440; (::Base.var"#1100#1102"{Bool, Symbol, Bool})(REPL::Module)
    ╎ ╎ 4752 …a-master/usr/share/julia/stdlib/v1.11/REPL/src/REPL.jl:447; run_repl(repl::REPL.AbstractREPL, consumer::Any)
    ╎ ╎ 4752 …-master/usr/share/julia/stdlib/v1.11/REPL/src/REPL.jl:461; run_repl(repl::REPL.AbstractREPL, consumer::Any; backend_on_current_task::Bool, backend::…
    ╎ ╎ 4752 …-master/usr/share/julia/stdlib/v1.11/REPL/src/REPL.jl:302; kwcall(::NamedTuple, ::typeof(REPL.start_repl_backend), backend::REPL.REPLBackend, consu…
    ╎ ╎ 4752 …-master/usr/share/julia/stdlib/v1.11/REPL/src/REPL.jl:305; start_repl_backend(backend::REPL.REPLBackend, consumer::Any; get_module::Function)
    ╎ ╎ 4752 …master/usr/share/julia/stdlib/v1.11/REPL/src/REPL.jl:320; repl_backend_loop(backend::REPL.REPLBackend, get_module::Function)
    ╎ ╎ ╎ 4752 …master/usr/share/julia/stdlib/v1.11/REPL/src/REPL.jl:224; eval_user_input(ast::Any, backend::REPL.REPLBackend, mod::Module)
    ╎ ╎ ╎ 4752 @Base/boot.jl:428; eval
    ╎ ╎ ╎ 4752 @BenchmarkTools/src/execution.jl:126; run(b::BenchmarkTools.Benchmark)
    ╎ ╎ ╎ 4752 @BenchmarkTools/src/execution.jl:126; run
    ╎ ╎ ╎ 4752 @BenchmarkTools/src/execution.jl:134; run(b::BenchmarkTools.Benchmark, p::BenchmarkTools.Parameters; progressid::Nothing, nleaves::Float64, n…
    ╎ ╎ ╎ ╎ 4752 @BenchmarkTools/src/execution.jl:40; run_result
    ╎ ╎ ╎ ╎ 4752 @BenchmarkTools/src/execution.jl:41; #run_result#45
    ╎ ╎ ╎ ╎ 4752 @Base/essentials.jl:1017; invokelatest
    ╎ ╎ ╎ ╎ 4752 @Base/essentials.jl:1020; #invokelatest#2
    ╎ ╎ ╎ ╎ 4752 @BenchmarkTools/src/execution.jl:102; _run(b::BenchmarkTools.Benchmark, p::BenchmarkTools.Parameters)
    ╎ ╎ ╎ ╎ ╎ 525 @BenchmarkTools/src/execution.jl:109; _run(b::BenchmarkTools.Benchmark, p::BenchmarkTools.Parameters; verbose::Bool, pad::String, kwarg…
    ╎ ╎ ╎ ╎ ╎ 525 @BenchmarkTools/src/execution.jl:556; var"##sample#344"(::Tuple{Matrix{Float64}, Matrix{Float64}}, __params::BenchmarkTools.Parameters)
    ╎ ╎ ╎ ╎ ╎ 525 @BenchmarkTools/src/execution.jl:547; var"##core#343"(a#341::Matrix{Float64}, b#342::Matrix{Float64})
    ╎ ╎ ╎ ╎ ╎ 525 @Base/broadcast.jl:875; materialize!
    ╎ ╎ ╎ ╎ ╎ 525 @Base/broadcast.jl:878; materialize!
    ╎ ╎ ╎ ╎ ╎ ╎ 525 @Base/broadcast.jl:920; copyto!
    ╎ ╎ ╎ ╎ ╎ ╎ 525 @Base/broadcast.jl:961; copyto!
    ╎ ╎ ╎ ╎ ╎ ╎ 525 @Base/abstractarray.jl:1061; copyto!
  60╎ ╎ ╎ ╎ ╎ ╎ 60 @Base/abstractarray.jl:0; copyto_unaliased!(deststyle::IndexCartesian, dest::SubArray{Float64, 2, Matrix{Float64}, Tuple{UnitRa…
    ╎ ╎ ╎ ╎ ╎ ╎ 58 @Base/abstractarray.jl:1116; copyto_unaliased!(deststyle::IndexCartesian, dest::SubArray{Float64, 2, Matrix{Float64}, Tuple{Uni…
    ╎ ╎ ╎ ╎ ╎ ╎ 58 @Base/abstractarray.jl:1411; setindex!
    ╎ ╎ ╎ ╎ ╎ ╎ ╎ 58 @Base/abstractarray.jl:1441; _setindex!
    ╎ ╎ ╎ ╎ ╎ ╎ ╎ 58 @Base/subarray.jl:366; setindex!
    ╎ ╎ ╎ ╎ ╎ ╎ ╎ 58 @Base/array.jl:979; setindex!
    ╎ ╎ ╎ ╎ ╎ ╎ ╎ 58 @Base/abstractarray.jl:1345; _to_linear_index
    ╎ ╎ ╎ ╎ ╎ ╎ ╎ 58 @Base/abstractarray.jl:2975; _sub2ind
    ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 58 @Base/abstractarray.jl:2991; _sub2ind
    ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 58 @Base/abstractarray.jl:3007; _sub2ind_recurse
    ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 58 @Base/abstractarray.jl:3007; _sub2ind_recurse
  58╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 58 @Base/int.jl:88; *
    ╎ ╎ ╎ ╎ ╎ ╎ 407 @Base/abstractarray.jl:1120; copyto_unaliased!(deststyle::IndexCartesian, dest::SubArray{Float64, 2, Matrix{Float64}, Tuple{Uni…
    ╎ ╎ ╎ ╎ ╎ ╎ 407 @Base/multidimensional.jl:422; iterate
    ╎ ╎ ╎ ╎ ╎ ╎ ╎ 78 @Base/multidimensional.jl:446; __inc
  78╎ ╎ ╎ ╎ ╎ ╎ ╎ 78 @Base/int.jl:87; +
    ╎ ╎ ╎ ╎ ╎ ╎ ╎ 329 @Base/multidimensional.jl:447; __inc
    ╎ ╎ ╎ ╎ ╎ ╎ ╎ 329 @Base/operators.jl:276; !=
 328╎ ╎ ╎ ╎ ╎ ╎ ╎ 329 @Base/promotion.jl:620; ==
   1╎ ╎ ╎ ╎ ╎ 4227 @BenchmarkTools/src/execution.jl:115; _run(b::BenchmarkTools.Benchmark, p::BenchmarkTools.Parameters; verbose::Bool, pad::String, kwarg…
    ╎ ╎ ╎ ╎ ╎ 4226 @BenchmarkTools/src/execution.jl:556; var"##sample#344"(::Tuple{Matrix{Float64}, Matrix{Float64}}, __params::BenchmarkTools.Parameters)
    ╎ ╎ ╎ ╎ ╎ 4226 @BenchmarkTools/src/execution.jl:547; var"##core#343"(a#341::Matrix{Float64}, b#342::Matrix{Float64})
    ╎ ╎ ╎ ╎ ╎ 4226 @Base/broadcast.jl:875; materialize!
    ╎ ╎ ╎ ╎ ╎ 4226 @Base/broadcast.jl:878; materialize!
    ╎ ╎ ╎ ╎ ╎ ╎ 4226 @Base/broadcast.jl:920; copyto!
    ╎ ╎ ╎ ╎ ╎ ╎ 4226 @Base/broadcast.jl:961; copyto!
    ╎ ╎ ╎ ╎ ╎ ╎ 4226 @Base/abstractarray.jl:1061; copyto!
 527╎ ╎ ╎ ╎ ╎ ╎ 527 @Base/abstractarray.jl:0; copyto_unaliased!(deststyle::IndexCartesian, dest::SubArray{Float64, 2, Matrix{Float64}, Tuple{UnitRa…
    ╎ ╎ ╎ ╎ ╎ ╎ 478 @Base/abstractarray.jl:1116; copyto_unaliased!(deststyle::IndexCartesian, dest::SubArray{Float64, 2, Matrix{Float64}, Tuple{Uni…
    ╎ ╎ ╎ ╎ ╎ ╎ 477 @Base/abstractarray.jl:1411; setindex!
    ╎ ╎ ╎ ╎ ╎ ╎ ╎ 477 @Base/abstractarray.jl:1441; _setindex!
    ╎ ╎ ╎ ╎ ╎ ╎ ╎ 477 @Base/subarray.jl:366; setindex!
    ╎ ╎ ╎ ╎ ╎ ╎ ╎ 474 @Base/array.jl:979; setindex!
    ╎ ╎ ╎ ╎ ╎ ╎ ╎ 474 @Base/abstractarray.jl:1345; _to_linear_index
    ╎ ╎ ╎ ╎ ╎ ╎ ╎ 474 @Base/abstractarray.jl:2975; _sub2ind
    ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 474 @Base/abstractarray.jl:2991; _sub2ind
    ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 474 @Base/abstractarray.jl:3007; _sub2ind_recurse
    ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 474 @Base/abstractarray.jl:3007; _sub2ind_recurse
    ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 1 @Base/abstractarray.jl:3014; offsetin
   1╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 1 @Base/int.jl:86; -
 473╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 473 @Base/int.jl:88; *
    ╎ ╎ ╎ ╎ ╎ ╎ ╎ 3 @Base/subarray.jl:293; reindex
    ╎ ╎ ╎ ╎ ╎ ╎ ╎ 3 @Base/array.jl:3058; getindex
    ╎ ╎ ╎ ╎ ╎ ╎ ╎ 3 @Base/range.jl:932; _getindex
   3╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 3 @Base/int.jl:87; +
   1╎ ╎ ╎ ╎ ╎ ╎ 1 @Base/essentials.jl:882; getindex
    ╎ ╎ ╎ ╎ ╎ ╎ 3218 @Base/abstractarray.jl:1120; copyto_unaliased!(deststyle::IndexCartesian, dest::SubArray{Float64, 2, Matrix{Float64}, Tuple{Uni…
    ╎ ╎ ╎ ╎ ╎ ╎ 3218 @Base/multidimensional.jl:422; iterate
    ╎ ╎ ╎ ╎ ╎ ╎ ╎ 519 @Base/multidimensional.jl:446; __inc
 519╎ ╎ ╎ ╎ ╎ ╎ ╎ 519 @Base/int.jl:87; +
   8╎ ╎ ╎ ╎ ╎ ╎ ╎ 2699 @Base/multidimensional.jl:447; __inc
    ╎ ╎ ╎ ╎ ╎ ╎ ╎ 2691 @Base/operators.jl:276; !=
2691╎ ╎ ╎ ╎ ╎ ╎ ╎ 2691 @Base/promotion.jl:620; ==
    ╎ ╎ ╎ ╎ ╎ ╎ 3 @Base/abstractarray.jl:1121; copyto_unaliased!(deststyle::IndexCartesian, dest::SubArray{Float64, 2, Matrix{Float64}, Tuple{Uni…
    ╎ ╎ ╎ ╎ ╎ ╎ 3 @Base/range.jl:902; iterate
   3╎ ╎ ╎ ╎ ╎ ╎ ╎ 3 @Base/promotion.jl:620; ==
Total snapshots: 4752. Utilization: 100% across all threads and tasks. Use the `groupby` kwarg to break down by thread and/or task.

```

I’m puzzled at why comparing `Int`s in iterating over a `CartesianIndices` appears to be the most expensive step of all? I wonder if this may be improved? At first glance, I would have expected `setindex!` to dominate.

---

<div class="post-metadata">

**Author:** ![jakobnissen](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jakobnissen/32/13477_2.png) [@jakobnissen](https://discourse.julialang.org/u/jakobnissen)\
**Post date:** [February 2, 2024, 9:23am UTC](https://discourse.julialang.org/t/why-does-profiling-suggest-that-integer-comparison-dominates-broadcasted-assignment/109606/2 "2024-02-02T09:23:38Z")

</div>

Interesting, this is not what I get on neither Julia 1.9, nor Julia 1.10. It takes ~100 ms for me, nearly all time is spent in `setindex!`, and it compiles to nearly optimal code (`memcpy` takes 78 ms).  
I’m on a Zen4 AMD x86\_64 CPU.

---

<div class="post-metadata">

**Author:** ![jishnub](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jishnub/32/33620_2.png) [@jishnub](https://discourse.julialang.org/u/jishnub)\
**Post date:** [February 2, 2024, 9:26am UTC](https://discourse.julialang.org/t/why-does-profiling-suggest-that-integer-comparison-dominates-broadcasted-assignment/109606/3 "2024-02-02T09:26:31Z")

</div>

Yes sorry I was on nightly.

```julia
julia> versioninfo()
Julia Version 1.11.0-DEV.1442
Commit c16472b0014 (2024-02-01 14:59 UTC)
Build Info:
  Official https://julialang.org/ release
Platform Info:
  OS: Linux (x86_64-linux-gnu)
  CPU: 8 × 11th Gen Intel(R) Core(TM) i5-1135G7 @ 2.40GHz
  WORD_SIZE: 64
  LLVM: libLLVM-16.0.6 (ORCJIT, tigerlake)
Threads: 1 default, 0 interactive, 1 GC (on 8 virtual cores)
Environment:
  LD_LIBRARY_PATH = :/usr/lib/x86_64-linux-gnu/gtk-3.0/modules
  JULIA_EDITOR = subl

```

---

<div class="post-metadata">

**Author:** ![jakobnissen](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jakobnissen/32/13477_2.png) [@jakobnissen](https://discourse.julialang.org/u/jakobnissen)\
**Post date:** [February 2, 2024, 9:59am UTC](https://discourse.julialang.org/t/why-does-profiling-suggest-that-integer-comparison-dominates-broadcasted-assignment/109606/4 "2024-02-02T09:59:50Z")

</div>

This is a regression on nightly, it goes from 100 → 300 ms for me. Will you make an issue?

Edit: And it’s not fixed by d54a455, which only applies to vectors.

---

<div class="post-metadata">

**Author:** ![jishnub](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jishnub/32/33620_2.png) [@jishnub](https://discourse.julialang.org/u/jishnub)\
**Post date:** [February 3, 2024, 2:47am UTC](https://discourse.julialang.org/t/why-does-profiling-suggest-that-integer-comparison-dominates-broadcasted-assignment/109606/5 "2024-02-03T02:47:53Z")

</div>

> <https://github.com/JuliaLang/julia/issues/53158>
>
> On v1.10.0
> \`\`\`julia
> julia\> a = zeros(40000,4000); b = rand(size(a)...);
> 
> jul…ia\> @benchmark $a\[1:end, 1:end\] .= $b
> BenchmarkTools.Trial: 17 samples with 1 evaluation.
> Range (min … max): 293.806 ms … 296.067 ms ┊ GC (min … max): 0.00% … 0.00%
> Time (median): 294.500 ms ┊ GC (median): 0.00%
> Time (mean ± σ): 294.634 ms ± 639.044 μs ┊ GC (mean ± σ): 0.00% ± 0.00%
> 
> ▁ ▁▁ ▁ ▁▁▁▁ ▁ ▁ ▁ █ ▁ ▁ ▁ ▁  
> █▁▁▁▁██▁▁█▁████▁▁▁█▁▁█▁█▁▁█▁▁▁█▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▁█ ▁
> 294 ms Histogram: frequency by time 296 ms \<
> 
> Memory estimate: 0 bytes, allocs estimate: 0.
> \`\`\`
> vs on v"1.11.0-DEV.1442" as well as the current master (d54a4550cb)
> \`\`\`julia
> julia\> @benchmark $a\[1:end, 1:end\] .= $b
> BenchmarkTools.Trial: 10 samples with 1 evaluation.
> Range (min … max): 547.709 ms … 551.888 ms ┊ GC (min … max): 0.00% … 0.00%
> Time (median): 548.422 ms ┊ GC (median): 0.00%
> Time (mean ± σ): 548.925 ms ± 1.418 ms ┊ GC (mean ± σ): 0.00% ± 0.00%
> 
> █ ▁▁▁▁ ▁▁ ▁ ▁  
> █▁▁▁▁▁▁████▁▁██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁█ ▁
> 548 ms Histogram: frequency by time 552 ms \<
> 
> Memory estimate: 0 bytes, allocs estimate: 0.
> \`\`\`
> versioninfo:
> \`\`\`julia
> julia\> versioninfo()
> Julia Version 1.11.0-DEV.1442
> Commit c16472b0014 (2024-02-01 14:59 UTC)
> Build Info:
> Official https://julialang.org/ release
> Platform Info:
> OS: Linux (x86\_64-linux-gnu)
> CPU: 8 × 11th Gen Intel(R) Core(TM) i5-1135G7 @ 2.40GHz
> WORD\_SIZE: 64
> LLVM: libLLVM-16.0.6 (ORCJIT, tigerlake)
> Threads: 1 default, 0 interactive, 1 GC (on 8 virtual cores)
> Environment:
> LD\_LIBRARY\_PATH = :/usr/lib/x86\_64-linux-gnu/gtk-3.0/modules
> JULIA\_EDITOR = subl
> \`\`\`
> Curiously, profiling points to integer comparison checks while iterating over \`CartesianIndices\` to be the most expensive step:
> \`\`\`julia
> julia\> @bprofile $a\[1:end, 1:end\] .= $b;
> 
> julia\> Profile.print()
> Overhead ╎ \[+additional indent\] Count File:Line; Function
> =========================================================
> ╎4638 @Base/client.jl:535; \_start()
> ╎ 4638 @Base/client.jl:561; repl\_main
> ╎ 4638 @Base/client.jl:424; run\_main\_repl(interactive::Bool, quiet::Bool, banner::Symbol, history\_file::Bool, color\_set::Bool)
> ╎ 4638 @Base/essentials.jl:1017; invokelatest
> ╎ 4638 @Base/essentials.jl:1020; #invokelatest#2
> ╎ 4638 @Base/client.jl:440; (::Base.var"#1100#1102"{Bool, Symbol, Bool})(REPL::Module)
> ╎ ╎ 4638 …a-master/usr/share/julia/stdlib/v1.11/REPL/src/REPL.jl:447; run\_repl(repl::REPL.AbstractREPL, consumer::Any)
> ╎ ╎ 4638 …-master/usr/share/julia/stdlib/v1.11/REPL/src/REPL.jl:461; run\_repl(repl::REPL.AbstractREPL, consumer::Any; backend\_on\_current\_task::Bool, backend::…
> ╎ ╎ 4638 …-master/usr/share/julia/stdlib/v1.11/REPL/src/REPL.jl:302; kwcall(::NamedTuple, ::typeof(REPL.start\_repl\_backend), backend::REPL.REPLBackend, consu…
> ╎ ╎ 4638 …-master/usr/share/julia/stdlib/v1.11/REPL/src/REPL.jl:305; start\_repl\_backend(backend::REPL.REPLBackend, consumer::Any; get\_module::Function)
> ╎ ╎ 4638 …master/usr/share/julia/stdlib/v1.11/REPL/src/REPL.jl:320; repl\_backend\_loop(backend::REPL.REPLBackend, get\_module::Function)
> ╎ ╎ ╎ 4638 …master/usr/share/julia/stdlib/v1.11/REPL/src/REPL.jl:224; eval\_user\_input(ast::Any, backend::REPL.REPLBackend, mod::Module)
> 13╎ ╎ ╎ 4638 @Base/boot.jl:428; eval
> ╎ ╎ ╎ 4624 @BenchmarkTools/src/execution.jl:126; run(b::BenchmarkTools.Benchmark)
> ╎ ╎ ╎ 4624 @BenchmarkTools/src/execution.jl:126; run
> ╎ ╎ ╎ 4624 @BenchmarkTools/src/execution.jl:134; run(b::BenchmarkTools.Benchmark, p::BenchmarkTools.Parameters; progressid::Nothing, nleaves::Float64, n…
> ╎ ╎ ╎ ╎ 4624 @BenchmarkTools/src/execution.jl:40; run\_result
> ╎ ╎ ╎ ╎ 4624 @BenchmarkTools/src/execution.jl:41; #run\_result#45
> ╎ ╎ ╎ ╎ 4624 @Base/essentials.jl:1017; invokelatest
> 24╎ ╎ ╎ ╎ 4624 @Base/essentials.jl:1020; #invokelatest#2
> ╎ ╎ ╎ ╎ 2 @Base/compiler/typeinfer.jl:1073; typeinf\_ext\_toplevel(mi::Core.MethodInstance, world::UInt64)
> ╎ ╎ ╎ ╎ ╎ 2 @Base/compiler/typeinfer.jl:1077; typeinf\_ext\_toplevel(interp::Core.Compiler.NativeInterpreter, mi::Core.MethodInstance)
> ╎ ╎ ╎ ╎ ╎ 2 @Base/compiler/typeinfer.jl:1039; typeinf\_ext(interp::Core.Compiler.NativeInterpreter, mi::Core.MethodInstance)
> ╎ ╎ ╎ ╎ ╎ 2 @Base/compiler/typeinfer.jl:216; typeinf(interp::Core.Compiler.NativeInterpreter, frame::Core.Compiler.InferenceState)
> ╎ ╎ ╎ ╎ ╎ 2 @Base/compiler/typeinfer.jl:246; \_typeinf(interp::Core.Compiler.NativeInterpreter, frame::Core.Compiler.InferenceState)
> ╎ ╎ ╎ ╎ ╎ 2 @Base/compiler/abstractinterpretation.jl:3373; typeinf\_nocycle(interp::Core.Compiler.NativeInterpreter, frame::Core.Compiler.Infere…
> ╎ ╎ ╎ ╎ ╎ ╎ 2 @Base/compiler/abstractinterpretation.jl:3295; typeinf\_local(interp::Core.Compiler.NativeInterpreter, frame::Core.Compiler.Inferen…
> ╎ ╎ ╎ ╎ ╎ ╎ 2 @Base/compiler/abstractinterpretation.jl:3041; abstract\_eval\_basic\_statement(interp::Core.Compiler.NativeInterpreter, stmt::Any, …
> ╎ ╎ ╎ ╎ ╎ ╎ 2 @Base/compiler/abstractinterpretation.jl:2730; abstract\_eval\_statement(interp::Core.Compiler.NativeInterpreter, e::Any, vtypes::…
> ╎ ╎ ╎ ╎ ╎ ╎ 2 @Base/compiler/abstractinterpretation.jl:2425; abstract\_eval\_statement\_expr(interp::Core.Compiler.NativeInterpreter, e::Expr, v…
> ╎ ╎ ╎ ╎ ╎ ╎ 2 @Base/compiler/abstractinterpretation.jl:2409; abstract\_eval\_call(interp::Core.Compiler.NativeInterpreter, e::Expr, vtypes::Ve…
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ 2 @Base/compiler/abstractinterpretation.jl:2394; abstract\_call(interp::Core.Compiler.NativeInterpreter, arginfo::Core.Compiler.…
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ 2 @Base/compiler/abstractinterpretation.jl:2249; abstract\_call(interp::Core.Compiler.NativeInterpreter, arginfo::Core.Compiler…
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ 2 @Base/compiler/abstractinterpretation.jl:2256; abstract\_call(interp::Core.Compiler.NativeInterpreter, arginfo::Core.Compile…
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ 2 @Base/compiler/abstractinterpretation.jl:2174; abstract\_call\_known(interp::Core.Compiler.NativeInterpreter, f::Any, arginf…
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ 2 @Base/compiler/abstractinterpretation.jl:102; abstract\_call\_gf\_by\_type(interp::Core.Compiler.NativeInterpreter, f::Any, a…
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 2 @Base/compiler/abstractinterpretation.jl:650; abstract\_call\_method(interp::Core.Compiler.NativeInterpreter, method::Meth…
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 2 @Base/compiler/typeinfer.jl:867; typeinf\_edge(interp::Core.Compiler.NativeInterpreter, method::Method, atype::Any, spar…
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 2 @Base/compiler/typeinfer.jl:216; typeinf(interp::Core.Compiler.NativeInterpreter, frame::Core.Compiler.InferenceState)
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 1 @Base/compiler/typeinfer.jl:246; \_typeinf(interp::Core.Compiler.NativeInterpreter, frame::Core.Compiler.InferenceStat…
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 1 @Base/compiler/abstractinterpretation.jl:3373; typeinf\_nocycle(interp::Core.Compiler.NativeInterpreter, frame::Core.…
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 1 @Base/compiler/abstractinterpretation.jl:3295; typeinf\_local(interp::Core.Compiler.NativeInterpreter, frame::Core.C…
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 1 @Base/compiler/abstractinterpretation.jl:3041; abstract\_eval\_basic\_statement(interp::Core.Compiler.NativeInterpret…
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 1 @Base/compiler/abstractinterpretation.jl:2730; abstract\_eval\_statement(interp::Core.Compiler.NativeInterpreter, e…
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 1 …ase/compiler/abstractinterpretation.jl:2425; abstract\_eval\_statement\_expr(interp::Core.Compiler.NativeInterpret…
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 1 …ase/compiler/abstractinterpretation.jl:2409; abstract\_eval\_call(interp::Core.Compiler.NativeInterpreter, e::Ex…
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 1 …se/compiler/abstractinterpretation.jl:2394; abstract\_call(interp::Core.Compiler.NativeInterpreter, arginfo::C…
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 1 …se/compiler/abstractinterpretation.jl:2249; abstract\_call(interp::Core.Compiler.NativeInterpreter, arginfo::…
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 1 …se/compiler/abstractinterpretation.jl:2256; abstract\_call(interp::Core.Compiler.NativeInterpreter, arginfo:…
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 1 …e/compiler/abstractinterpretation.jl:2174; abstract\_call\_known(interp::Core.Compiler.NativeInterpreter, f:…
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 1 …e/compiler/abstractinterpretation.jl:111; abstract\_call\_gf\_by\_type(interp::Core.Compiler.NativeInterprete…
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 1 …e/compiler/abstractinterpretation.jl:813; abstract\_call\_method\_with\_const\_args(interp::Core.Compiler.Nat…
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 1 …/compiler/abstractinterpretation.jl:837; abstract\_call\_method\_with\_const\_args(interp::Core.Compiler.Nat…
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 1 …/compiler/abstractinterpretation.jl:1201; semi\_concrete\_eval\_call(interp::Core.Compiler.NativeInterpre…
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 1 @Base/compiler/ssair/irinterp.jl:440; ir\_abstract\_constant\_propagation(interp::Core.Compiler.NativeInt…
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 1 @Base/compiler/ssair/irinterp.jl:280; \_ir\_abstract\_constant\_propagation(interp::Core.Compiler.NativeI…
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 1 @Base/compiler/ssair/irinterp.jl:294; \_ir\_abstract\_constant\_propagation(interp::Core.Compiler.Native…
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 1 @Base/compiler/ssair/irinterp.jl:248; scan!(callback::Core.Compiler.var"#559#562"{Nothing, Core.Com…
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 1 @Base/compiler/ssair/irinterp.jl:326; (::Core.Compiler.var"#559#562"{Nothing, Core.Compiler.Native…
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 1 @Base/compiler/ssair/irinterp.jl:141; reprocess\_instruction!(interp::Core.Compiler.NativeInterpre…
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 1 …mpiler/abstractinterpretation.jl:2428; abstract\_eval\_statement\_expr(interp::Core.Compiler.Nativ…
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 1 @Base/compiler/tfuncs.jl:99; instanceof\_tfunc(t::Any, astag::Bool)
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 1 @Base/compiler/tfuncs.jl:100; instanceof\_tfunc(t::Any, astag::Bool, troot::Core.Const)
> 1╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 1 @Base/compiler/typeutils.jl:115; valid\_as\_lattice(x::Any, astag::Bool)
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 1 @Base/compiler/typeinfer.jl:264; \_typeinf(interp::Core.Compiler.NativeInterpreter, frame::Core.Compiler.InferenceStat…
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 1 @Base/compiler/optimize.jl:950; optimize(interp::Core.Compiler.NativeInterpreter, opt::Core.Compiler.OptimizationSta…
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 1 @Base/compiler/optimize.jl:976; run\_passes\_ipo\_safe
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 1 @Base/compiler/optimize.jl:961; run\_passes\_ipo\_safe(ci::Core.CodeInfo, sv::Core.Compiler.OptimizationState{Core.Co…
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 1 @Base/compiler/ssair/passes.jl:2037; adce\_pass!(ir::Core.Compiler.IRCode, inlining::Core.Compiler.InliningState{C…
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 1 @Base/compiler/ssair/ir.jl:1725; iterate
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 1 @Base/compiler/ssair/ir.jl:1802; iterate\_compact(compact::Core.Compiler.IncrementalCompact)
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 1 @Base/compiler/ssair/ir.jl:276; setindex!
> 1╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 1 @Base/array.jl:972; setindex!
> ╎ ╎ ╎ ╎ 4598 @BenchmarkTools/src/execution.jl:102; \_run(b::BenchmarkTools.Benchmark, p::BenchmarkTools.Parameters)
> ╎ ╎ ╎ ╎ ╎ 510 @BenchmarkTools/src/execution.jl:109; \_run(b::BenchmarkTools.Benchmark, p::BenchmarkTools.Parameters; verbose::Bool, pad::String, kwarg…
> ╎ ╎ ╎ ╎ ╎ 510 @BenchmarkTools/src/execution.jl:556; var"##sample#224"(::Tuple{Matrix{Float64}, Matrix{Float64}}, \_\_params::BenchmarkTools.Parameters)
> ╎ ╎ ╎ ╎ ╎ 510 @BenchmarkTools/src/execution.jl:547; var"##core#223"(a#221::Matrix{Float64}, b#222::Matrix{Float64})
> ╎ ╎ ╎ ╎ ╎ 510 @Base/broadcast.jl:875; materialize!
> ╎ ╎ ╎ ╎ ╎ 510 @Base/broadcast.jl:878; materialize!
> ╎ ╎ ╎ ╎ ╎ ╎ 510 @Base/broadcast.jl:920; copyto!
> ╎ ╎ ╎ ╎ ╎ ╎ 510 @Base/broadcast.jl:961; copyto!
> ╎ ╎ ╎ ╎ ╎ ╎ 510 @Base/abstractarray.jl:1061; copyto!
> 60╎ ╎ ╎ ╎ ╎ ╎ 60 @Base/abstractarray.jl:0; copyto\_unaliased!(deststyle::IndexCartesian, dest::SubArray{Float64, 2, Matrix{Float64}, Tuple{UnitRa…
> ╎ ╎ ╎ ╎ ╎ ╎ 64 @Base/abstractarray.jl:1116; copyto\_unaliased!(deststyle::IndexCartesian, dest::SubArray{Float64, 2, Matrix{Float64}, Tuple{Uni…
> ╎ ╎ ╎ ╎ ╎ ╎ 64 @Base/abstractarray.jl:1411; setindex!
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ 64 @Base/abstractarray.jl:1441; \_setindex!
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ 64 @Base/subarray.jl:366; setindex!
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ 64 @Base/array.jl:979; setindex!
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ 64 @Base/abstractarray.jl:1345; \_to\_linear\_index
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ 64 @Base/abstractarray.jl:2975; \_sub2ind
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 64 @Base/abstractarray.jl:2991; \_sub2ind
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 64 @Base/abstractarray.jl:3007; \_sub2ind\_recurse
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 64 @Base/abstractarray.jl:3007; \_sub2ind\_recurse
> 64╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 64 @Base/int.jl:88; \*
> ╎ ╎ ╎ ╎ ╎ ╎ 386 @Base/abstractarray.jl:1120; copyto\_unaliased!(deststyle::IndexCartesian, dest::SubArray{Float64, 2, Matrix{Float64}, Tuple{Uni…
> ╎ ╎ ╎ ╎ ╎ ╎ 386 @Base/multidimensional.jl:422; iterate
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ 62 @Base/multidimensional.jl:446; \_\_inc
> 62╎ ╎ ╎ ╎ ╎ ╎ ╎ 62 @Base/int.jl:87; +
> 1╎ ╎ ╎ ╎ ╎ ╎ ╎ 324 @Base/multidimensional.jl:447; \_\_inc
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ 323 @Base/operators.jl:276; !=
> 323╎ ╎ ╎ ╎ ╎ ╎ ╎ 323 @Base/promotion.jl:620; ==
> ╎ ╎ ╎ ╎ ╎ 4088 @BenchmarkTools/src/execution.jl:115; \_run(b::BenchmarkTools.Benchmark, p::BenchmarkTools.Parameters; verbose::Bool, pad::String, kwarg…
> ╎ ╎ ╎ ╎ ╎ 4088 @BenchmarkTools/src/execution.jl:556; var"##sample#224"(::Tuple{Matrix{Float64}, Matrix{Float64}}, \_\_params::BenchmarkTools.Parameters)
> ╎ ╎ ╎ ╎ ╎ 4088 @BenchmarkTools/src/execution.jl:547; var"##core#223"(a#221::Matrix{Float64}, b#222::Matrix{Float64})
> ╎ ╎ ╎ ╎ ╎ 4088 @Base/broadcast.jl:875; materialize!
> ╎ ╎ ╎ ╎ ╎ 4088 @Base/broadcast.jl:878; materialize!
> ╎ ╎ ╎ ╎ ╎ ╎ 4088 @Base/broadcast.jl:920; copyto!
> ╎ ╎ ╎ ╎ ╎ ╎ 4088 @Base/broadcast.jl:961; copyto!
> ╎ ╎ ╎ ╎ ╎ ╎ 4088 @Base/abstractarray.jl:1061; copyto!
> 488╎ ╎ ╎ ╎ ╎ ╎ 488 @Base/abstractarray.jl:0; copyto\_unaliased!(deststyle::IndexCartesian, dest::SubArray{Float64, 2, Matrix{Float64}, Tuple{UnitRa…
> ╎ ╎ ╎ ╎ ╎ ╎ 449 @Base/abstractarray.jl:1116; copyto\_unaliased!(deststyle::IndexCartesian, dest::SubArray{Float64, 2, Matrix{Float64}, Tuple{Uni…
> ╎ ╎ ╎ ╎ ╎ ╎ 448 @Base/abstractarray.jl:1411; setindex!
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ 448 @Base/abstractarray.jl:1441; \_setindex!
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ 448 @Base/subarray.jl:366; setindex!
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ 445 @Base/array.jl:979; setindex!
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ 445 @Base/abstractarray.jl:1345; \_to\_linear\_index
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ 445 @Base/abstractarray.jl:2975; \_sub2ind
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 445 @Base/abstractarray.jl:2991; \_sub2ind
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 445 @Base/abstractarray.jl:3007; \_sub2ind\_recurse
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 445 @Base/abstractarray.jl:3007; \_sub2ind\_recurse
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 2 @Base/abstractarray.jl:3014; offsetin
> 2╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 2 @Base/int.jl:86; -
> 439╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 439 @Base/int.jl:88; \*
> 4╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 4 @Base/int.jl:87; +
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ 3 @Base/subarray.jl:293; reindex
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ 3 @Base/array.jl:3058; getindex
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ 3 @Base/range.jl:932; \_getindex
> 3╎ ╎ ╎ ╎ ╎ ╎ ╎ ╎ 3 @Base/int.jl:87; +
> 1╎ ╎ ╎ ╎ ╎ ╎ 1 @Base/essentials.jl:882; getindex
> ╎ ╎ ╎ ╎ ╎ ╎ 3151 @Base/abstractarray.jl:1120; copyto\_unaliased!(deststyle::IndexCartesian, dest::SubArray{Float64, 2, Matrix{Float64}, Tuple{Uni…
> ╎ ╎ ╎ ╎ ╎ ╎ 3151 @Base/multidimensional.jl:422; iterate
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ 499 @Base/multidimensional.jl:446; \_\_inc
> 499╎ ╎ ╎ ╎ ╎ ╎ ╎ 499 @Base/int.jl:87; +
> 3╎ ╎ ╎ ╎ ╎ ╎ ╎ 2652 @Base/multidimensional.jl:447; \_\_inc
> ╎ ╎ ╎ ╎ ╎ ╎ ╎ 2649 @Base/operators.jl:276; !=
> 2649╎ ╎ ╎ ╎ ╎ ╎ ╎ 2649 @Base/promotion.jl:620; ==
> Total snapshots: 4645. Utilization: 100% across all threads and tasks. Use the \`groupby\` kwarg to break down by thread and/or task.
> \`\`\`
