# StaticArrays compilation performance bug

**URL:** <https://discourse.julialang.org/t/staticarrays-compilation-performance-bug/64811>\
**Category:** Performance\
**Tags:** staticarrays\
**Created:** [July 17, 2021, 1:45pm UTC](https://discourse.julialang.org/t/staticarrays-compilation-performance-bug/64811 "2021-07-17T13:45:24Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![nabla](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nabla/32/26089_2.png) [@nabla](https://discourse.julialang.org/u/nabla)\
**Post date:** [July 17, 2021, 1:45pm UTC](https://discourse.julialang.org/t/staticarrays-compilation-performance-bug/64811/1 "2021-07-17T13:45:24Z")

</div>

I also posted this as a StaticArrays issue: with Julia 1.7 and StaticArrays v0.12.5:

```julia
julia> N = 14; m = SMatrix{N,N}(rand(N,N));

julia> x->x*m # works fine
#1 (generic function with 1 method)

julia> @time [x->x*g for g∈[m]]
  3.018892 seconds (57.49 k allocations: 3.383 MiB, 100.06% compilation time)
1-element Vector{var"#20#22"{SMatrix{14, 14, Float64, 196}}}:
 #20 (generic function with 1 method)

```

Why does it take 3 seconds? It seems to scale horribly, too: for N=10, I get 0.449260 seconds; for N=15, 5.230108 seconds; for N=16, 9.209356 seconds.

---

<div class="post-metadata">

**Author:** ![simeonschaub](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/simeonschaub/32/216566_2.png) [@simeonschaub](https://discourse.julialang.org/u/simeonschaub)\
**Post date:** [July 17, 2021, 2:07pm UTC](https://discourse.julialang.org/t/staticarrays-compilation-performance-bug/64811/2 "2021-07-17T14:07:46Z")

</div>

This is expected for large `SArrays`. From the README:

> Note that in the current implementation, working with large `StaticArray` s puts a lot of stress on the compiler, and becomes slower than `Base.Array` as the size increases. A very rough rule of thumb is that you should consider using a normal `Array` for arrays larger than 100 elements.

---

<div class="post-metadata">

**Author:** ![brenhinkeller](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/brenhinkeller/32/36648_2.png) [@brenhinkeller](https://discourse.julialang.org/u/brenhinkeller)\
**Post date:** [July 17, 2021, 6:14pm UTC](https://discourse.julialang.org/t/staticarrays-compilation-performance-bug/64811/3 "2021-07-17T18:14:21Z")

</div>

Check out [https://github.com/chriselrod/StrideArrays.jl](https://github.com/chriselrod/StrideArrays.jl) for an in-development package that would allow much larger static-like arrays AFAICT

---

<div class="post-metadata">

**Author:** ![brenhinkeller](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/brenhinkeller/32/36648_2.png) [@brenhinkeller](https://discourse.julialang.org/u/brenhinkeller)\
**Post date:** [July 17, 2021, 6:15pm UTC](https://discourse.julialang.org/t/staticarrays-compilation-performance-bug/64811/4 "2021-07-17T18:15:19Z")

</div>

[https://chriselrod.github.io/StrideArrays.jl/dev/stack\_allocation/](https://chriselrod.github.io/StrideArrays.jl/dev/stack_allocation/)

```julia
julia> @benchmark sum(exp.(@StrideArray randn(8,10))) # StrideArrays
BenchmarkTools.Trial:
  memory estimate: 0 bytes
  allocs estimate: 0
  --------------
  minimum time: 127.557 ns (0.00% GC)
  median time: 127.986 ns (0.00% GC)
  mean time: 128.116 ns (0.00% GC)
  maximum time: 165.890 ns (0.00% GC)
  --------------
  samples: 10000
  evals/sample: 888

julia> @benchmark sum(exp.(@MMatrix randn(8,10))) # StaticArrays
BenchmarkTools.Trial:
  memory estimate: 672 bytes
  allocs estimate: 1
  --------------
  minimum time: 703.599 ns (0.00% GC)
  median time: 862.130 ns (0.00% GC)
  mean time: 887.160 ns (4.56% GC)
  maximum time: 136.675 μs (99.29% GC)
  --------------
  samples: 10000
  evals/sample: 142

```

---

<div class="post-metadata">

**Author:** ![baggepinnen](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/baggepinnen/32/693_2.png) [@baggepinnen](https://discourse.julialang.org/u/baggepinnen)\
**Post date:** [July 18, 2021, 4:26am UTC](https://discourse.julialang.org/t/staticarrays-compilation-performance-bug/64811/5 "2021-07-18T04:26:01Z")

</div>

Related issue: [https://github.com/JuliaLang/julia/issues/35547](https://github.com/JuliaLang/julia/issues/35547)
