Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RFC: setindex! for non-isbits MArrays #749

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open

Conversation

c42f
Copy link
Member

@c42f c42f commented Feb 27, 2020

Here I've tried implementing this for the sake of people using MArray in generic code, even though it's unlikely to be fast. (Furthermore I can't think of a way to make it fast. It's like we need a weird kind of mutable pseudo-container which is guaranteed to be inlined as a part of the parent struct, such that you can't access it separately. Ironically a mutable FieldArray should work like this.)

Overall I'm somewhat inclined to do this but not decided. If we leave this as-is, it doesn't leave a good option for people wanting to write generic code using MArray. It seems we can have:

  • "just works" but potentially quite slow. Could be nice for generic code, especially if people want to put in BigFloat or suchlike on occasion.
  • Fails hard but clearly directs people to use SizedArray. Good for aspiring performance hackers but kind of bad for everyone else.

The generated code for this isn't great. Basically m[i] = v turns into a big pile of (ifelse(i == 1, v, m[1]), ifelse(i == 2, v, m[2]), ...) to construct a new tuple which m.data will be set to.

Thoughts?

@github-actions
Copy link

Benchmark result

Judge result

Benchmark Report for /home/runner/work/StaticArrays.jl/StaticArrays.jl

Job Properties

  • Time of benchmarks:
    • Target: 27 Feb 2020 - 08:13
    • Baseline: 27 Feb 2020 - 08:22
  • Package commits:
    • Target: 371917
    • Baseline: f33060
  • Julia commits:
    • Target: 2d5741
    • Baseline: 2d5741
  • Julia command flags:
    • Target: None
    • Baseline: None
  • Environment variables:
    • Target: None
    • Baseline: None

Results

A ratio greater than 1.0 denotes a possible regression (marked with ❌), while a ratio less
than 1.0 denotes a possible improvement (marked with ✅). Only significant results - results
that indicate possible regressions or improvements - are shown below (thus, an empty table means that all
benchmark results remained invariant between builds).

ID time ratio memory ratio
["matrix_ops", "*", "01", "Matrix"] 1.07 (5%) ❌ 1.00 (1%)
["matrix_ops", "*", "02", "Matrix"] 1.07 (5%) ❌ 1.00 (1%)
["matrix_ops", "*", "10", "Matrix"] 1.14 (5%) ❌ 1.00 (1%)
["matrix_ops", "*", "10", "SMatrix"] 1.06 (5%) ❌ 1.00 (1%)
["matrix_ops", "*", "20", "Matrix"] 1.17 (5%) ❌ 1.00 (1%)
["matrix_ops", "*", "20", "SMatrix"] 1.07 (5%) ❌ 1.00 (1%)
["matrix_ops", "\\", "01", "Matrix"] 1.12 (5%) ❌ 1.00 (1%)
["matrix_ops", "\\", "01", "SMatrix"] 1.16 (5%) ❌ 1.00 (1%)
["matrix_ops", "\\", "02", "Matrix"] 1.12 (5%) ❌ 1.00 (1%)
["matrix_ops", "\\", "02", "SMatrix"] 1.08 (5%) ❌ 1.00 (1%)
["matrix_ops", "\\", "03", "Matrix"] 0.92 (5%) ✅ 1.00 (1%)
["matrix_ops", "\\", "03", "SMatrix"] 1.07 (5%) ❌ 1.00 (1%)
["matrix_ops", "\\", "04", "Matrix"] 0.93 (5%) ✅ 1.00 (1%)
["matrix_ops", "\\", "04", "SMatrix"] 1.07 (5%) ❌ 1.00 (1%)
["matrix_ops", "\\", "10", "SMatrix"] 1.06 (5%) ❌ 1.00 (1%)
["matrix_ops", "det", "01", "Matrix"] 1.06 (5%) ❌ 1.00 (1%)
["matrix_ops", "det", "02", "Matrix"] 1.06 (5%) ❌ 1.00 (1%)
["matrix_ops", "det", "03", "Matrix"] 1.06 (5%) ❌ 1.00 (1%)
["matrix_ops", "det", "03", "SMatrix"] 1.08 (5%) ❌ 1.00 (1%)
["matrix_ops", "det", "04", "Matrix"] 1.07 (5%) ❌ 1.00 (1%)
["matrix_ops", "det", "10", "SMatrix"] 1.11 (5%) ❌ 1.00 (1%)
["matrix_ops", "exp", "02", "Matrix"] 1.05 (5%) ❌ 1.00 (1%)
["matrix_ops", "exp", "02", "SMatrix"] 1.07 (5%) ❌ 1.00 (1%)
["matrix_ops", "exp", "10", "SMatrix"] 1.09 (5%) ❌ 1.00 (1%)
["matrix_ops", "inv", "01", "Matrix"] 0.94 (5%) ✅ 1.00 (1%)
["matrix_ops", "inv", "04", "Matrix"] 0.82 (5%) ✅ 1.00 (1%)
["matrix_ops", "inv", "10", "Matrix"] 1.08 (5%) ❌ 1.00 (1%)
["matrix_ops", "inv", "10", "SMatrix"] 1.07 (5%) ❌ 1.00 (1%)
["qr", "S=1", "SMatrix"] 1.11 (5%) ❌ 1.00 (1%)
["qr", "S=11", "Matrix"] 1.06 (5%) ❌ 1.00 (1%)
["qr", "S=11", "SMatrix"] 1.26 (5%) ❌ 1.00 (1%)
["qr", "S=14", "Matrix"] 0.91 (5%) ✅ 1.00 (1%)
["qr", "S=14", "SMatrix"] 1.07 (5%) ❌ 1.00 (1%)
["qr", "S=15", "Matrix"] 0.93 (5%) ✅ 1.00 (1%)
["qr", "S=5", "Matrix"] 0.93 (5%) ✅ 1.00 (1%)
["qr", "S=6", "Matrix"] 0.93 (5%) ✅ 1.00 (1%)
["qr", "S=6", "SMatrix"] 0.92 (5%) ✅ 1.00 (1%)
["qr", "S=9", "Matrix"] 0.92 (5%) ✅ 1.00 (1%)

Benchmark Group List

Here's a list of all the benchmark groups executed by this job:

  • ["matrix_ops", "*", "01"]
  • ["matrix_ops", "*", "02"]
  • ["matrix_ops", "*", "03"]
  • ["matrix_ops", "*", "04"]
  • ["matrix_ops", "*", "10"]
  • ["matrix_ops", "*", "20"]
  • ["matrix_ops", "\\", "01"]
  • ["matrix_ops", "\\", "02"]
  • ["matrix_ops", "\\", "03"]
  • ["matrix_ops", "\\", "04"]
  • ["matrix_ops", "\\", "10"]
  • ["matrix_ops", "\\", "20"]
  • ["matrix_ops", "det", "01"]
  • ["matrix_ops", "det", "02"]
  • ["matrix_ops", "det", "03"]
  • ["matrix_ops", "det", "04"]
  • ["matrix_ops", "det", "10"]
  • ["matrix_ops", "det", "20"]
  • ["matrix_ops", "exp", "01"]
  • ["matrix_ops", "exp", "02"]
  • ["matrix_ops", "exp", "03"]
  • ["matrix_ops", "exp", "04"]
  • ["matrix_ops", "exp", "10"]
  • ["matrix_ops", "exp", "20"]
  • ["matrix_ops", "inv", "01"]
  • ["matrix_ops", "inv", "02"]
  • ["matrix_ops", "inv", "03"]
  • ["matrix_ops", "inv", "04"]
  • ["matrix_ops", "inv", "10"]
  • ["matrix_ops", "inv", "20"]
  • ["qr", "S=1"]
  • ["qr", "S=10"]
  • ["qr", "S=11"]
  • ["qr", "S=12"]
  • ["qr", "S=13"]
  • ["qr", "S=14"]
  • ["qr", "S=15"]
  • ["qr", "S=16"]
  • ["qr", "S=17"]
  • ["qr", "S=18"]
  • ["qr", "S=19"]
  • ["qr", "S=2"]
  • ["qr", "S=20"]
  • ["qr", "S=21"]
  • ["qr", "S=22"]
  • ["qr", "S=3"]
  • ["qr", "S=4"]
  • ["qr", "S=5"]
  • ["qr", "S=6"]
  • ["qr", "S=7"]
  • ["qr", "S=8"]
  • ["qr", "S=9"]

Julia versioninfo

Target

Julia Version 1.3.1
Commit 2d5741174c (2019-12-30 21:36 UTC)
Platform Info:
  OS: Linux (x86_64-pc-linux-gnu)
      Ubuntu 18.04.4 LTS
  uname: Linux 5.0.0-1031-azure #33-Ubuntu SMP Thu Feb 6 22:26:13 UTC 2020 x86_64 x86_64
  CPU: Intel(R) Xeon(R) CPU E5-2673 v3 @ 2.40GHz: 
              speed         user         nice          sys         idle          irq
       #1  2397 MHz      43481 s          0 s       6350 s      45525 s          0 s
       #2  2397 MHz      51029 s          0 s       3670 s      40571 s          0 s
       
  Memory: 6.782741546630859 GB (3030.7109375 MB free)
  Uptime: 972.0 sec
  Load Avg:  1.052734375  1.15771484375  0.80615234375
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-6.0.1 (ORCJIT, haswell)

Baseline

Julia Version 1.3.1
Commit 2d5741174c (2019-12-30 21:36 UTC)
Platform Info:
  OS: Linux (x86_64-pc-linux-gnu)
      Ubuntu 18.04.4 LTS
  uname: Linux 5.0.0-1031-azure #33-Ubuntu SMP Thu Feb 6 22:26:13 UTC 2020 x86_64 x86_64
  CPU: Intel(R) Xeon(R) CPU E5-2673 v3 @ 2.40GHz: 
              speed         user         nice          sys         idle          irq
       #1  2397 MHz      80399 s          0 s       7128 s      58808 s          0 s
       #2  2397 MHz      66177 s          0 s       4508 s      75707 s          0 s
       
  Memory: 6.782741546630859 GB (3000.26953125 MB free)
  Uptime: 1486.0 sec
  Load Avg:  1.06787109375  1.0751953125  0.93115234375
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-6.0.1 (ORCJIT, haswell)

Target result

Benchmark Report for /home/runner/work/StaticArrays.jl/StaticArrays.jl

Job Properties

  • Time of benchmark: 27 Feb 2020 - 8:13
  • Package commit: 371917
  • Julia commit: 2d5741
  • Julia command flags: None
  • Environment variables: None

Results

Below is a table of this job's results, obtained by running the benchmarks.
The values listed in the ID column have the structure [parent_group, child_group, ..., key], and can be used to
index into the BaseBenchmarks suite to retrieve the corresponding benchmarks.
The percentages accompanying time and memory values in the below table are noise tolerances. The "true"
time/memory value for a given benchmark is expected to fall within this percentage of the reported value.
An empty cell means that the value was zero.

ID time GC time memory allocations
["matrix_ops", "*", "01", "Matrix"] 196.615 ns (5%) 96 bytes (1%) 1
["matrix_ops", "*", "01", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "*", "02", "Matrix"] 48.630 ns (5%) 112 bytes (1%) 1
["matrix_ops", "*", "02", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "*", "03", "Matrix"] 60.836 ns (5%) 160 bytes (1%) 1
["matrix_ops", "*", "03", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "*", "04", "Matrix"] 229.821 ns (5%) 208 bytes (1%) 1
["matrix_ops", "*", "04", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "*", "10", "Matrix"] 583.179 ns (5%) 896 bytes (1%) 1
["matrix_ops", "*", "10", "SMatrix"] 219.479 ns (5%)
["matrix_ops", "*", "20", "Matrix"] 2.167 μs (5%) 3.25 KiB (1%) 1
["matrix_ops", "*", "20", "SMatrix"] 1.780 μs (5%)
["matrix_ops", "\\", "01", "Matrix"] 119.703 ns (5%) 208 bytes (1%) 3
["matrix_ops", "\\", "01", "SMatrix"] 5.200 ns (5%)
["matrix_ops", "\\", "02", "Matrix"] 1.940 μs (5%) 352 bytes (1%) 4
["matrix_ops", "\\", "02", "SMatrix"] 10.410 ns (5%)
["matrix_ops", "\\", "03", "Matrix"] 2.011 μs (5%) 464 bytes (1%) 4
["matrix_ops", "\\", "03", "SMatrix"] 25.930 ns (5%)
["matrix_ops", "\\", "04", "Matrix"] 2.089 μs (5%) 560 bytes (1%) 4
["matrix_ops", "\\", "04", "SMatrix"] 257.312 ns (5%)
["matrix_ops", "\\", "10", "Matrix"] 4.157 μs (5%) 1.94 KiB (1%) 4
["matrix_ops", "\\", "10", "SMatrix"] 1.860 μs (5%)
["matrix_ops", "\\", "20", "Matrix"] 13.300 μs (5%) 6.77 KiB (1%) 4
["matrix_ops", "\\", "20", "SMatrix"] 14.600 μs (5%) 10.02 KiB (1%) 5
["matrix_ops", "det", "01", "Matrix"] 57.361 ns (5%) 112 bytes (1%) 2
["matrix_ops", "det", "01", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "det", "02", "Matrix"] 239.234 ns (5%) 240 bytes (1%) 3
["matrix_ops", "det", "02", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "det", "03", "Matrix"] 295.023 ns (5%) 304 bytes (1%) 3
["matrix_ops", "det", "03", "SMatrix"] 2.800 ns (5%)
["matrix_ops", "det", "04", "Matrix"] 369.777 ns (5%) 352 bytes (1%) 3
["matrix_ops", "det", "04", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "det", "10", "Matrix"] 1.180 μs (5%) 1.06 KiB (1%) 3
["matrix_ops", "det", "10", "SMatrix"] 664.179 ns (5%)
["matrix_ops", "det", "20", "Matrix"] 7.400 μs (5%) 3.52 KiB (1%) 3
["matrix_ops", "det", "20", "SMatrix"] 8.367 μs (5%) 6.77 KiB (1%) 4
["matrix_ops", "exp", "01", "Matrix"] 1.000 μs (5%) 1.69 KiB (1%) 20
["matrix_ops", "exp", "01", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "exp", "02", "Matrix"] 3.600 μs (5%) 3.52 KiB (1%) 32
["matrix_ops", "exp", "02", "SMatrix"] 76.765 ns (5%)
["matrix_ops", "exp", "03", "Matrix"] 4.157 μs (5%) 4.91 KiB (1%) 32
["matrix_ops", "exp", "03", "SMatrix"] 146.384 ns (5%)
["matrix_ops", "exp", "04", "Matrix"] 4.814 μs (5%) 3.25 KiB (1%) 17
["matrix_ops", "exp", "04", "SMatrix"] 488.160 ns (5%)
["matrix_ops", "exp", "10", "Matrix"] 11.400 μs (5%) 14.50 KiB (1%) 19
["matrix_ops", "exp", "10", "SMatrix"] 5.250 μs (5%)
["matrix_ops", "exp", "20", "Matrix"] 45.401 μs (5%) 55.91 KiB (1%) 20
["matrix_ops", "exp", "20", "SMatrix"] 400.011 μs (5%) 10.02 KiB (1%) 5
["matrix_ops", "inv", "01", "Matrix"] 193.465 ns (5%) 96 bytes (1%) 1
["matrix_ops", "inv", "01", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "inv", "02", "Matrix"] 554.661 ns (5%) 1.39 KiB (1%) 5
["matrix_ops", "inv", "02", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "inv", "03", "Matrix"] 676.403 ns (5%) 1.98 KiB (1%) 5
["matrix_ops", "inv", "03", "SMatrix"] 22.613 ns (5%)
["matrix_ops", "inv", "04", "Matrix"] 1.070 μs (5%) 2.50 KiB (1%) 5
["matrix_ops", "inv", "04", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "inv", "10", "Matrix"] 2.878 μs (5%) 6.22 KiB (1%) 5
["matrix_ops", "inv", "10", "SMatrix"] 1.940 μs (5%)
["matrix_ops", "inv", "20", "Matrix"] 12.300 μs (5%) 13.67 KiB (1%) 5
["matrix_ops", "inv", "20", "SMatrix"] 13.300 μs (5%) 16.92 KiB (1%) 6
["qr", "S=1", "Matrix"] 129.373 ns (5%) 320 bytes (1%) 4
["qr", "S=1", "SMatrix"] 2.100 ns (5%)
["qr", "S=10", "Matrix"] 12.800 μs (5%) 2.66 KiB (1%) 4
["qr", "S=10", "SMatrix"] 834.190 ns (5%)
["qr", "S=11", "Matrix"] 15.400 μs (5%) 3.22 KiB (1%) 4
["qr", "S=11", "SMatrix"] 1.480 μs (5%)
["qr", "S=12", "Matrix"] 16.200 μs (5%) 3.69 KiB (1%) 4
["qr", "S=12", "SMatrix"] 1.350 μs (5%)
["qr", "S=13", "Matrix"] 19.200 μs (5%) 4.39 KiB (1%) 4
["qr", "S=13", "SMatrix"] 2.122 μs (5%)
["qr", "S=14", "Matrix"] 19.700 μs (5%) 5.33 KiB (1%) 4
["qr", "S=14", "SMatrix"] 3.011 μs (5%)
["qr", "S=15", "Matrix"] 21.500 μs (5%) 5.98 KiB (1%) 4
["qr", "S=15", "SMatrix"] 3.800 μs (5%)
["qr", "S=16", "Matrix"] 34.000 μs (5%) 6.41 KiB (1%) 4
["qr", "S=16", "SMatrix"] 5.029 μs (5%)
["qr", "S=17", "Matrix"] 36.101 μs (5%) 7.34 KiB (1%) 4
["qr", "S=17", "SMatrix"] 48.901 μs (5%) 19.56 KiB (1%) 10
["qr", "S=18", "Matrix"] 38.701 μs (5%) 8.09 KiB (1%) 4
["qr", "S=18", "SMatrix"] 52.001 μs (5%) 21.56 KiB (1%) 10
["qr", "S=19", "Matrix"] 41.001 μs (5%) 9.03 KiB (1%) 4
["qr", "S=19", "SMatrix"] 55.202 μs (5%) 24.06 KiB (1%) 10
["qr", "S=2", "Matrix"] 1.210 μs (5%) 368 bytes (1%) 4
["qr", "S=2", "SMatrix"] 19.057 ns (5%)
["qr", "S=20", "Matrix"] 42.601 μs (5%) 9.78 KiB (1%) 4
["qr", "S=20", "SMatrix"] 58.102 μs (5%) 26.06 KiB (1%) 10
["qr", "S=21", "Matrix"] 45.401 μs (5%) 10.91 KiB (1%) 4
["qr", "S=21", "SMatrix"] 63.001 μs (5%) 29.06 KiB (1%) 10
["qr", "S=22", "Matrix"] 48.301 μs (5%) 11.84 KiB (1%) 4
["qr", "S=22", "SMatrix"] 66.202 μs (5%) 31.56 KiB (1%) 10
["qr", "S=3", "Matrix"] 2.689 μs (5%) 512 bytes (1%) 4
["qr", "S=3", "SMatrix"] 56.034 ns (5%)
["qr", "S=4", "Matrix"] 4.125 μs (5%) 656 bytes (1%) 4
["qr", "S=4", "SMatrix"] 94.056 ns (5%)
["qr", "S=5", "Matrix"] 5.217 μs (5%) 896 bytes (1%) 4
["qr", "S=5", "SMatrix"] 176.159 ns (5%)
["qr", "S=6", "Matrix"] 6.680 μs (5%) 1.11 KiB (1%) 4
["qr", "S=6", "SMatrix"] 235.299 ns (5%)
["qr", "S=7", "Matrix"] 8.600 μs (5%) 1.48 KiB (1%) 4
["qr", "S=7", "SMatrix"] 338.761 ns (5%)
["qr", "S=8", "Matrix"] 9.601 μs (5%) 1.86 KiB (1%) 4
["qr", "S=8", "SMatrix"] 415.162 ns (5%)
["qr", "S=9", "Matrix"] 11.100 μs (5%) 2.19 KiB (1%) 4
["qr", "S=9", "SMatrix"] 677.115 ns (5%)

Benchmark Group List

Here's a list of all the benchmark groups executed by this job:

  • ["matrix_ops", "*", "01"]
  • ["matrix_ops", "*", "02"]
  • ["matrix_ops", "*", "03"]
  • ["matrix_ops", "*", "04"]
  • ["matrix_ops", "*", "10"]
  • ["matrix_ops", "*", "20"]
  • ["matrix_ops", "\\", "01"]
  • ["matrix_ops", "\\", "02"]
  • ["matrix_ops", "\\", "03"]
  • ["matrix_ops", "\\", "04"]
  • ["matrix_ops", "\\", "10"]
  • ["matrix_ops", "\\", "20"]
  • ["matrix_ops", "det", "01"]
  • ["matrix_ops", "det", "02"]
  • ["matrix_ops", "det", "03"]
  • ["matrix_ops", "det", "04"]
  • ["matrix_ops", "det", "10"]
  • ["matrix_ops", "det", "20"]
  • ["matrix_ops", "exp", "01"]
  • ["matrix_ops", "exp", "02"]
  • ["matrix_ops", "exp", "03"]
  • ["matrix_ops", "exp", "04"]
  • ["matrix_ops", "exp", "10"]
  • ["matrix_ops", "exp", "20"]
  • ["matrix_ops", "inv", "01"]
  • ["matrix_ops", "inv", "02"]
  • ["matrix_ops", "inv", "03"]
  • ["matrix_ops", "inv", "04"]
  • ["matrix_ops", "inv", "10"]
  • ["matrix_ops", "inv", "20"]
  • ["qr", "S=1"]
  • ["qr", "S=10"]
  • ["qr", "S=11"]
  • ["qr", "S=12"]
  • ["qr", "S=13"]
  • ["qr", "S=14"]
  • ["qr", "S=15"]
  • ["qr", "S=16"]
  • ["qr", "S=17"]
  • ["qr", "S=18"]
  • ["qr", "S=19"]
  • ["qr", "S=2"]
  • ["qr", "S=20"]
  • ["qr", "S=21"]
  • ["qr", "S=22"]
  • ["qr", "S=3"]
  • ["qr", "S=4"]
  • ["qr", "S=5"]
  • ["qr", "S=6"]
  • ["qr", "S=7"]
  • ["qr", "S=8"]
  • ["qr", "S=9"]

Julia versioninfo

Julia Version 1.3.1
Commit 2d5741174c (2019-12-30 21:36 UTC)
Platform Info:
  OS: Linux (x86_64-pc-linux-gnu)
      Ubuntu 18.04.4 LTS
  uname: Linux 5.0.0-1031-azure #33-Ubuntu SMP Thu Feb 6 22:26:13 UTC 2020 x86_64 x86_64
  CPU: Intel(R) Xeon(R) CPU E5-2673 v3 @ 2.40GHz: 
              speed         user         nice          sys         idle          irq
       #1  2397 MHz      43481 s          0 s       6350 s      45525 s          0 s
       #2  2397 MHz      51029 s          0 s       3670 s      40571 s          0 s
       
  Memory: 6.782741546630859 GB (3030.7109375 MB free)
  Uptime: 972.0 sec
  Load Avg:  1.052734375  1.15771484375  0.80615234375
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-6.0.1 (ORCJIT, haswell)

Baseline result

Benchmark Report for /home/runner/work/StaticArrays.jl/StaticArrays.jl

Job Properties

  • Time of benchmark: 27 Feb 2020 - 8:22
  • Package commit: f33060
  • Julia commit: 2d5741
  • Julia command flags: None
  • Environment variables: None

Results

Below is a table of this job's results, obtained by running the benchmarks.
The values listed in the ID column have the structure [parent_group, child_group, ..., key], and can be used to
index into the BaseBenchmarks suite to retrieve the corresponding benchmarks.
The percentages accompanying time and memory values in the below table are noise tolerances. The "true"
time/memory value for a given benchmark is expected to fall within this percentage of the reported value.
An empty cell means that the value was zero.

ID time GC time memory allocations
["matrix_ops", "*", "01", "Matrix"] 183.566 ns (5%) 96 bytes (1%) 1
["matrix_ops", "*", "01", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "*", "02", "Matrix"] 45.383 ns (5%) 112 bytes (1%) 1
["matrix_ops", "*", "02", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "*", "03", "Matrix"] 58.598 ns (5%) 160 bytes (1%) 1
["matrix_ops", "*", "03", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "*", "04", "Matrix"] 227.976 ns (5%) 208 bytes (1%) 1
["matrix_ops", "*", "04", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "*", "10", "Matrix"] 510.730 ns (5%) 896 bytes (1%) 1
["matrix_ops", "*", "10", "SMatrix"] 206.323 ns (5%)
["matrix_ops", "*", "20", "Matrix"] 1.845 μs (5%) 3.25 KiB (1%) 1
["matrix_ops", "*", "20", "SMatrix"] 1.660 μs (5%)
["matrix_ops", "\\", "01", "Matrix"] 106.749 ns (5%) 208 bytes (1%) 3
["matrix_ops", "\\", "01", "SMatrix"] 4.500 ns (5%)
["matrix_ops", "\\", "02", "Matrix"] 1.730 μs (5%) 352 bytes (1%) 4
["matrix_ops", "\\", "02", "SMatrix"] 9.610 ns (5%)
["matrix_ops", "\\", "03", "Matrix"] 2.178 μs (5%) 464 bytes (1%) 4
["matrix_ops", "\\", "03", "SMatrix"] 24.122 ns (5%)
["matrix_ops", "\\", "04", "Matrix"] 2.256 μs (5%) 560 bytes (1%) 4
["matrix_ops", "\\", "04", "SMatrix"] 239.550 ns (5%)
["matrix_ops", "\\", "10", "Matrix"] 3.986 μs (5%) 1.94 KiB (1%) 4
["matrix_ops", "\\", "10", "SMatrix"] 1.750 μs (5%)
["matrix_ops", "\\", "20", "Matrix"] 12.900 μs (5%) 6.77 KiB (1%) 4
["matrix_ops", "\\", "20", "SMatrix"] 14.300 μs (5%) 10.02 KiB (1%) 5
["matrix_ops", "det", "01", "Matrix"] 54.114 ns (5%) 112 bytes (1%) 2
["matrix_ops", "det", "01", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "det", "02", "Matrix"] 225.821 ns (5%) 240 bytes (1%) 3
["matrix_ops", "det", "02", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "det", "03", "Matrix"] 278.083 ns (5%) 304 bytes (1%) 3
["matrix_ops", "det", "03", "SMatrix"] 2.600 ns (5%)
["matrix_ops", "det", "04", "Matrix"] 345.130 ns (5%) 352 bytes (1%) 3
["matrix_ops", "det", "04", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "det", "10", "Matrix"] 1.180 μs (5%) 1.06 KiB (1%) 3
["matrix_ops", "det", "10", "SMatrix"] 599.445 ns (5%)
["matrix_ops", "det", "20", "Matrix"] 7.467 μs (5%) 3.52 KiB (1%) 3
["matrix_ops", "det", "20", "SMatrix"] 8.234 μs (5%) 6.77 KiB (1%) 4
["matrix_ops", "exp", "01", "Matrix"] 1.040 μs (5%) 1.69 KiB (1%) 20
["matrix_ops", "exp", "01", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "exp", "02", "Matrix"] 3.425 μs (5%) 3.52 KiB (1%) 32
["matrix_ops", "exp", "02", "SMatrix"] 71.475 ns (5%)
["matrix_ops", "exp", "03", "Matrix"] 4.100 μs (5%) 4.91 KiB (1%) 32
["matrix_ops", "exp", "03", "SMatrix"] 142.582 ns (5%)
["matrix_ops", "exp", "04", "Matrix"] 4.757 μs (5%) 3.25 KiB (1%) 17
["matrix_ops", "exp", "04", "SMatrix"] 464.964 ns (5%)
["matrix_ops", "exp", "10", "Matrix"] 11.200 μs (5%) 14.50 KiB (1%) 19
["matrix_ops", "exp", "10", "SMatrix"] 4.833 μs (5%)
["matrix_ops", "exp", "20", "Matrix"] 45.402 μs (5%) 55.91 KiB (1%) 20
["matrix_ops", "exp", "20", "SMatrix"] 399.916 μs (5%) 10.02 KiB (1%) 5
["matrix_ops", "inv", "01", "Matrix"] 206.546 ns (5%) 96 bytes (1%) 1
["matrix_ops", "inv", "01", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "inv", "02", "Matrix"] 528.437 ns (5%) 1.39 KiB (1%) 5
["matrix_ops", "inv", "02", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "inv", "03", "Matrix"] 670.160 ns (5%) 1.98 KiB (1%) 5
["matrix_ops", "inv", "03", "SMatrix"] 22.613 ns (5%)
["matrix_ops", "inv", "04", "Matrix"] 1.310 μs (5%) 2.50 KiB (1%) 5
["matrix_ops", "inv", "04", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "inv", "10", "Matrix"] 2.667 μs (5%) 6.22 KiB (1%) 5
["matrix_ops", "inv", "10", "SMatrix"] 1.820 μs (5%)
["matrix_ops", "inv", "20", "Matrix"] 12.000 μs (5%) 13.67 KiB (1%) 5
["matrix_ops", "inv", "20", "SMatrix"] 13.301 μs (5%) 16.92 KiB (1%) 6
["qr", "S=1", "Matrix"] 132.522 ns (5%) 320 bytes (1%) 4
["qr", "S=1", "SMatrix"] 1.900 ns (5%)
["qr", "S=10", "Matrix"] 12.900 μs (5%) 2.66 KiB (1%) 4
["qr", "S=10", "SMatrix"] 838.000 ns (5%)
["qr", "S=11", "Matrix"] 14.500 μs (5%) 3.22 KiB (1%) 4
["qr", "S=11", "SMatrix"] 1.170 μs (5%)
["qr", "S=12", "Matrix"] 16.300 μs (5%) 3.69 KiB (1%) 4
["qr", "S=12", "SMatrix"] 1.350 μs (5%)
["qr", "S=13", "Matrix"] 19.300 μs (5%) 4.39 KiB (1%) 4
["qr", "S=13", "SMatrix"] 2.156 μs (5%)
["qr", "S=14", "Matrix"] 21.701 μs (5%) 5.33 KiB (1%) 4
["qr", "S=14", "SMatrix"] 2.811 μs (5%)
["qr", "S=15", "Matrix"] 23.100 μs (5%) 5.98 KiB (1%) 4
["qr", "S=15", "SMatrix"] 3.713 μs (5%)
["qr", "S=16", "Matrix"] 33.901 μs (5%) 6.41 KiB (1%) 4
["qr", "S=16", "SMatrix"] 4.914 μs (5%)
["qr", "S=17", "Matrix"] 36.901 μs (5%) 7.34 KiB (1%) 4
["qr", "S=17", "SMatrix"] 50.302 μs (5%) 19.56 KiB (1%) 10
["qr", "S=18", "Matrix"] 38.801 μs (5%) 8.09 KiB (1%) 4
["qr", "S=18", "SMatrix"] 52.502 μs (5%) 21.56 KiB (1%) 10
["qr", "S=19", "Matrix"] 41.001 μs (5%) 9.03 KiB (1%) 4
["qr", "S=19", "SMatrix"] 55.502 μs (5%) 24.06 KiB (1%) 10
["qr", "S=2", "Matrix"] 1.230 μs (5%) 368 bytes (1%) 4
["qr", "S=2", "SMatrix"] 19.157 ns (5%)
["qr", "S=20", "Matrix"] 43.501 μs (5%) 9.78 KiB (1%) 4
["qr", "S=20", "SMatrix"] 59.102 μs (5%) 26.06 KiB (1%) 10
["qr", "S=21", "Matrix"] 45.801 μs (5%) 10.91 KiB (1%) 4
["qr", "S=21", "SMatrix"] 62.802 μs (5%) 29.06 KiB (1%) 10
["qr", "S=22", "Matrix"] 47.701 μs (5%) 11.84 KiB (1%) 4
["qr", "S=22", "SMatrix"] 66.602 μs (5%) 31.56 KiB (1%) 10
["qr", "S=3", "Matrix"] 2.700 μs (5%) 512 bytes (1%) 4
["qr", "S=3", "SMatrix"] 55.931 ns (5%)
["qr", "S=4", "Matrix"] 4.125 μs (5%) 656 bytes (1%) 4
["qr", "S=4", "SMatrix"] 94.057 ns (5%)
["qr", "S=5", "Matrix"] 5.600 μs (5%) 896 bytes (1%) 4
["qr", "S=5", "SMatrix"] 176.757 ns (5%)
["qr", "S=6", "Matrix"] 7.180 μs (5%) 1.11 KiB (1%) 4
["qr", "S=6", "SMatrix"] 254.598 ns (5%)
["qr", "S=7", "Matrix"] 8.634 μs (5%) 1.48 KiB (1%) 4
["qr", "S=7", "SMatrix"] 337.330 ns (5%)
["qr", "S=8", "Matrix"] 9.700 μs (5%) 1.86 KiB (1%) 4
["qr", "S=8", "SMatrix"] 412.136 ns (5%)
["qr", "S=9", "Matrix"] 12.100 μs (5%) 2.19 KiB (1%) 4
["qr", "S=9", "SMatrix"] 673.298 ns (5%)

Benchmark Group List

Here's a list of all the benchmark groups executed by this job:

  • ["matrix_ops", "*", "01"]
  • ["matrix_ops", "*", "02"]
  • ["matrix_ops", "*", "03"]
  • ["matrix_ops", "*", "04"]
  • ["matrix_ops", "*", "10"]
  • ["matrix_ops", "*", "20"]
  • ["matrix_ops", "\\", "01"]
  • ["matrix_ops", "\\", "02"]
  • ["matrix_ops", "\\", "03"]
  • ["matrix_ops", "\\", "04"]
  • ["matrix_ops", "\\", "10"]
  • ["matrix_ops", "\\", "20"]
  • ["matrix_ops", "det", "01"]
  • ["matrix_ops", "det", "02"]
  • ["matrix_ops", "det", "03"]
  • ["matrix_ops", "det", "04"]
  • ["matrix_ops", "det", "10"]
  • ["matrix_ops", "det", "20"]
  • ["matrix_ops", "exp", "01"]
  • ["matrix_ops", "exp", "02"]
  • ["matrix_ops", "exp", "03"]
  • ["matrix_ops", "exp", "04"]
  • ["matrix_ops", "exp", "10"]
  • ["matrix_ops", "exp", "20"]
  • ["matrix_ops", "inv", "01"]
  • ["matrix_ops", "inv", "02"]
  • ["matrix_ops", "inv", "03"]
  • ["matrix_ops", "inv", "04"]
  • ["matrix_ops", "inv", "10"]
  • ["matrix_ops", "inv", "20"]
  • ["qr", "S=1"]
  • ["qr", "S=10"]
  • ["qr", "S=11"]
  • ["qr", "S=12"]
  • ["qr", "S=13"]
  • ["qr", "S=14"]
  • ["qr", "S=15"]
  • ["qr", "S=16"]
  • ["qr", "S=17"]
  • ["qr", "S=18"]
  • ["qr", "S=19"]
  • ["qr", "S=2"]
  • ["qr", "S=20"]
  • ["qr", "S=21"]
  • ["qr", "S=22"]
  • ["qr", "S=3"]
  • ["qr", "S=4"]
  • ["qr", "S=5"]
  • ["qr", "S=6"]
  • ["qr", "S=7"]
  • ["qr", "S=8"]
  • ["qr", "S=9"]

Julia versioninfo

Julia Version 1.3.1
Commit 2d5741174c (2019-12-30 21:36 UTC)
Platform Info:
  OS: Linux (x86_64-pc-linux-gnu)
      Ubuntu 18.04.4 LTS
  uname: Linux 5.0.0-1031-azure #33-Ubuntu SMP Thu Feb 6 22:26:13 UTC 2020 x86_64 x86_64
  CPU: Intel(R) Xeon(R) CPU E5-2673 v3 @ 2.40GHz: 
              speed         user         nice          sys         idle          irq
       #1  2397 MHz      80399 s          0 s       7128 s      58808 s          0 s
       #2  2397 MHz      66177 s          0 s       4508 s      75707 s          0 s
       
  Memory: 6.782741546630859 GB (3000.26953125 MB free)
  Uptime: 1486.0 sec
  Load Avg:  1.06787109375  1.0751953125  0.93115234375
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-6.0.1 (ORCJIT, haswell)

Runtime information

Runtime Info
BLAS #threads 2
BLAS.vendor() openblas64
Sys.CPU_THREADS 2

lscpu output:

Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              2
On-line CPU(s) list: 0,1
Thread(s) per core:  1
Core(s) per socket:  2
Socket(s):           1
NUMA node(s):        1
Vendor ID:           GenuineIntel
CPU family:          6
Model:               63
Model name:          Intel(R) Xeon(R) CPU E5-2673 v3 @ 2.40GHz
Stepping:            2
CPU MHz:             2397.225
BogoMIPS:            4794.45
Hypervisor vendor:   Microsoft
Virtualization type: full
L1d cache:           32K
L1i cache:           32K
L2 cache:            256K
L3 cache:            30720K
NUMA node0 CPU(s):   0,1
Flags:               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm invpcid_single pti fsgsbase bmi1 avx2 smep bmi2 erms invpcid xsaveopt md_clear
Cpu Property Value
Brand Intel(R) Xeon(R) CPU E5-2673 v3 @ 2.40GHz
Vendor :Intel
Architecture :Haswell
Model Family: 0x06, Model: 0x3f, Stepping: 0x02, Type: 0x00
Cores 2 physical cores, 2 logical cores (on executing CPU)
No Hyperthreading detected
Clock Frequencies Not supported by CPU
Data Cache Level 1:3 : (32, 256, 30720) kbytes
64 byte cache line size
Address Size 48 bits virtual, 44 bits physical
SIMD 256 bit = 32 byte max. SIMD vector size
Time Stamp Counter TSC is accessible via rdtsc
TSC increased at every clock cycle (non-invariant TSC)
Perf. Monitoring Performance Monitoring Counters (PMC) are not supported
Hypervisor Yes, Microsoft

@c42f c42f force-pushed the cjf/setindex-MArray branch from c1e41aa to 4614a00 Compare February 27, 2020 08:29
@github-actions
Copy link

Benchmark result

Judge result

Benchmark Report for /home/runner/work/StaticArrays.jl/StaticArrays.jl

Job Properties

  • Time of benchmarks:
    • Target: 27 Feb 2020 - 08:43
    • Baseline: 27 Feb 2020 - 08:51
  • Package commits:
    • Target: 021e8c
    • Baseline: f33060
  • Julia commits:
    • Target: 2d5741
    • Baseline: 2d5741
  • Julia command flags:
    • Target: None
    • Baseline: None
  • Environment variables:
    • Target: None
    • Baseline: None

Results

A ratio greater than 1.0 denotes a possible regression (marked with ❌), while a ratio less
than 1.0 denotes a possible improvement (marked with ✅). Only significant results - results
that indicate possible regressions or improvements - are shown below (thus, an empty table means that all
benchmark results remained invariant between builds).

ID time ratio memory ratio
["matrix_ops", "*", "10", "Matrix"] 0.90 (5%) ✅ 1.00 (1%)
["matrix_ops", "*", "10", "SMatrix"] 0.87 (5%) ✅ 1.00 (1%)
["matrix_ops", "*", "20", "SMatrix"] 1.16 (5%) ❌ 1.00 (1%)
["matrix_ops", "\\", "01", "SMatrix"] 0.94 (5%) ✅ 1.00 (1%)
["matrix_ops", "\\", "02", "SMatrix"] 0.88 (5%) ✅ 1.00 (1%)
["matrix_ops", "\\", "03", "Matrix"] 1.12 (5%) ❌ 1.00 (1%)
["matrix_ops", "\\", "10", "Matrix"] 1.06 (5%) ❌ 1.00 (1%)
["matrix_ops", "det", "01", "Matrix"] 0.95 (5%) ✅ 1.00 (1%)
["matrix_ops", "det", "03", "SMatrix"] 1.18 (5%) ❌ 1.00 (1%)
["matrix_ops", "det", "10", "SMatrix"] 1.11 (5%) ❌ 1.00 (1%)
["matrix_ops", "det", "20", "Matrix"] 0.91 (5%) ✅ 1.00 (1%)
["matrix_ops", "det", "20", "SMatrix"] 0.94 (5%) ✅ 1.00 (1%)
["matrix_ops", "exp", "02", "Matrix"] 0.86 (5%) ✅ 1.00 (1%)
["matrix_ops", "exp", "03", "SMatrix"] 1.36 (5%) ❌ 1.00 (1%)
["matrix_ops", "exp", "10", "SMatrix"] 0.93 (5%) ✅ 1.00 (1%)
["matrix_ops", "inv", "20", "Matrix"] 1.07 (5%) ❌ 1.00 (1%)
["qr", "S=1", "SMatrix"] 0.88 (5%) ✅ 1.00 (1%)
["qr", "S=13", "SMatrix"] 0.94 (5%) ✅ 1.00 (1%)
["qr", "S=14", "SMatrix"] 1.05 (5%) ❌ 1.00 (1%)
["qr", "S=15", "SMatrix"] 1.75 (5%) ❌ 1.00 (1%)
["qr", "S=18", "SMatrix"] 1.09 (5%) ❌ 1.00 (1%)
["qr", "S=20", "SMatrix"] 1.10 (5%) ❌ 1.00 (1%)
["qr", "S=6", "SMatrix"] 0.91 (5%) ✅ 1.00 (1%)
["qr", "S=7", "Matrix"] 1.13 (5%) ❌ 1.00 (1%)
["qr", "S=9", "SMatrix"] 0.81 (5%) ✅ 1.00 (1%)

Benchmark Group List

Here's a list of all the benchmark groups executed by this job:

  • ["matrix_ops", "*", "01"]
  • ["matrix_ops", "*", "02"]
  • ["matrix_ops", "*", "03"]
  • ["matrix_ops", "*", "04"]
  • ["matrix_ops", "*", "10"]
  • ["matrix_ops", "*", "20"]
  • ["matrix_ops", "\\", "01"]
  • ["matrix_ops", "\\", "02"]
  • ["matrix_ops", "\\", "03"]
  • ["matrix_ops", "\\", "04"]
  • ["matrix_ops", "\\", "10"]
  • ["matrix_ops", "\\", "20"]
  • ["matrix_ops", "det", "01"]
  • ["matrix_ops", "det", "02"]
  • ["matrix_ops", "det", "03"]
  • ["matrix_ops", "det", "04"]
  • ["matrix_ops", "det", "10"]
  • ["matrix_ops", "det", "20"]
  • ["matrix_ops", "exp", "01"]
  • ["matrix_ops", "exp", "02"]
  • ["matrix_ops", "exp", "03"]
  • ["matrix_ops", "exp", "04"]
  • ["matrix_ops", "exp", "10"]
  • ["matrix_ops", "exp", "20"]
  • ["matrix_ops", "inv", "01"]
  • ["matrix_ops", "inv", "02"]
  • ["matrix_ops", "inv", "03"]
  • ["matrix_ops", "inv", "04"]
  • ["matrix_ops", "inv", "10"]
  • ["matrix_ops", "inv", "20"]
  • ["qr", "S=1"]
  • ["qr", "S=10"]
  • ["qr", "S=11"]
  • ["qr", "S=12"]
  • ["qr", "S=13"]
  • ["qr", "S=14"]
  • ["qr", "S=15"]
  • ["qr", "S=16"]
  • ["qr", "S=17"]
  • ["qr", "S=18"]
  • ["qr", "S=19"]
  • ["qr", "S=2"]
  • ["qr", "S=20"]
  • ["qr", "S=21"]
  • ["qr", "S=22"]
  • ["qr", "S=3"]
  • ["qr", "S=4"]
  • ["qr", "S=5"]
  • ["qr", "S=6"]
  • ["qr", "S=7"]
  • ["qr", "S=8"]
  • ["qr", "S=9"]

Julia versioninfo

Target

Julia Version 1.3.1
Commit 2d5741174c (2019-12-30 21:36 UTC)
Platform Info:
  OS: Linux (x86_64-pc-linux-gnu)
      Ubuntu 18.04.4 LTS
  uname: Linux 5.0.0-1032-azure #34-Ubuntu SMP Mon Feb 10 19:37:25 UTC 2020 x86_64 x86_64
  CPU: Intel(R) Xeon(R) CPU E5-2673 v4 @ 2.30GHz: 
              speed         user         nice          sys         idle          irq
       #1  2294 MHz      58591 s          0 s       5008 s      24416 s          0 s
       #2  2294 MHz      28397 s          0 s       7846 s      50252 s          0 s
       
  Memory: 6.782737731933594 GB (3145.97265625 MB free)
  Uptime: 925.0 sec
  Load Avg:  1.14013671875  1.2119140625  0.88427734375
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-6.0.1 (ORCJIT, broadwell)

Baseline

Julia Version 1.3.1
Commit 2d5741174c (2019-12-30 21:36 UTC)
Platform Info:
  OS: Linux (x86_64-pc-linux-gnu)
      Ubuntu 18.04.4 LTS
  uname: Linux 5.0.0-1032-azure #34-Ubuntu SMP Mon Feb 10 19:37:25 UTC 2020 x86_64 x86_64
  CPU: Intel(R) Xeon(R) CPU E5-2673 v4 @ 2.30GHz: 
              speed         user         nice          sys         idle          irq
       #1  2294 MHz      99408 s          0 s       5712 s      30504 s          0 s
       #2  2294 MHz      35897 s          0 s       9171 s      89043 s          0 s
       
  Memory: 6.782737731933594 GB (2881.6328125 MB free)
  Uptime: 1403.0 sec
  Load Avg:  1.1689453125  1.1826171875  1.00830078125
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-6.0.1 (ORCJIT, broadwell)

Target result

Benchmark Report for /home/runner/work/StaticArrays.jl/StaticArrays.jl

Job Properties

  • Time of benchmark: 27 Feb 2020 - 8:43
  • Package commit: 021e8c
  • Julia commit: 2d5741
  • Julia command flags: None
  • Environment variables: None

Results

Below is a table of this job's results, obtained by running the benchmarks.
The values listed in the ID column have the structure [parent_group, child_group, ..., key], and can be used to
index into the BaseBenchmarks suite to retrieve the corresponding benchmarks.
The percentages accompanying time and memory values in the below table are noise tolerances. The "true"
time/memory value for a given benchmark is expected to fall within this percentage of the reported value.
An empty cell means that the value was zero.

ID time GC time memory allocations
["matrix_ops", "*", "01", "Matrix"] 156.692 ns (5%) 96 bytes (1%) 1
["matrix_ops", "*", "01", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "*", "02", "Matrix"] 37.966 ns (5%) 112 bytes (1%) 1
["matrix_ops", "*", "02", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "*", "03", "Matrix"] 45.602 ns (5%) 160 bytes (1%) 1
["matrix_ops", "*", "03", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "*", "04", "Matrix"] 234.753 ns (5%) 208 bytes (1%) 1
["matrix_ops", "*", "04", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "*", "10", "Matrix"] 487.245 ns (5%) 896 bytes (1%) 1
["matrix_ops", "*", "10", "SMatrix"] 193.281 ns (5%)
["matrix_ops", "*", "20", "Matrix"] 1.800 μs (5%) 3.25 KiB (1%) 1
["matrix_ops", "*", "20", "SMatrix"] 1.620 μs (5%)
["matrix_ops", "\\", "01", "Matrix"] 92.380 ns (5%) 208 bytes (1%) 3
["matrix_ops", "\\", "01", "SMatrix"] 1.600 ns (5%)
["matrix_ops", "\\", "02", "Matrix"] 1.590 μs (5%) 352 bytes (1%) 4
["matrix_ops", "\\", "02", "SMatrix"] 5.700 ns (5%)
["matrix_ops", "\\", "03", "Matrix"] 2.067 μs (5%) 464 bytes (1%) 4
["matrix_ops", "\\", "03", "SMatrix"] 19.358 ns (5%)
["matrix_ops", "\\", "04", "Matrix"] 1.711 μs (5%) 560 bytes (1%) 4
["matrix_ops", "\\", "04", "SMatrix"] 185.246 ns (5%)
["matrix_ops", "\\", "10", "Matrix"] 4.200 μs (5%) 1.94 KiB (1%) 4
["matrix_ops", "\\", "10", "SMatrix"] 1.510 μs (5%)
["matrix_ops", "\\", "20", "Matrix"] 12.400 μs (5%) 6.77 KiB (1%) 4
["matrix_ops", "\\", "20", "SMatrix"] 13.900 μs (5%) 10.02 KiB (1%) 5
["matrix_ops", "det", "01", "Matrix"] 45.198 ns (5%) 112 bytes (1%) 2
["matrix_ops", "det", "01", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "det", "02", "Matrix"] 189.247 ns (5%) 240 bytes (1%) 3
["matrix_ops", "det", "02", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "det", "03", "Matrix"] 236.164 ns (5%) 304 bytes (1%) 3
["matrix_ops", "det", "03", "SMatrix"] 2.600 ns (5%)
["matrix_ops", "det", "04", "Matrix"] 293.561 ns (5%) 352 bytes (1%) 3
["matrix_ops", "det", "04", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "det", "10", "Matrix"] 1.140 μs (5%) 1.06 KiB (1%) 3
["matrix_ops", "det", "10", "SMatrix"] 681.287 ns (5%)
["matrix_ops", "det", "20", "Matrix"] 7.033 μs (5%) 3.52 KiB (1%) 3
["matrix_ops", "det", "20", "SMatrix"] 7.700 μs (5%) 6.77 KiB (1%) 4
["matrix_ops", "exp", "01", "Matrix"] 806.944 ns (5%) 1.69 KiB (1%) 20
["matrix_ops", "exp", "01", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "exp", "02", "Matrix"] 2.700 μs (5%) 3.52 KiB (1%) 32
["matrix_ops", "exp", "02", "SMatrix"] 58.087 ns (5%)
["matrix_ops", "exp", "03", "Matrix"] 3.900 μs (5%) 4.91 KiB (1%) 32
["matrix_ops", "exp", "03", "SMatrix"] 197.693 ns (5%)
["matrix_ops", "exp", "04", "Matrix"] 4.667 μs (5%) 3.25 KiB (1%) 17
["matrix_ops", "exp", "04", "SMatrix"] 413.000 ns (5%)
["matrix_ops", "exp", "10", "Matrix"] 10.700 μs (5%) 14.50 KiB (1%) 19
["matrix_ops", "exp", "10", "SMatrix"] 4.783 μs (5%)
["matrix_ops", "exp", "20", "Matrix"] 40.200 μs (5%) 55.91 KiB (1%) 20
["matrix_ops", "exp", "20", "SMatrix"] 424.401 μs (5%) 10.02 KiB (1%) 5
["matrix_ops", "inv", "01", "Matrix"] 162.842 ns (5%) 96 bytes (1%) 1
["matrix_ops", "inv", "01", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "inv", "02", "Matrix"] 448.731 ns (5%) 1.39 KiB (1%) 5
["matrix_ops", "inv", "02", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "inv", "03", "Matrix"] 562.903 ns (5%) 1.98 KiB (1%) 5
["matrix_ops", "inv", "03", "SMatrix"] 8.500 ns (5%)
["matrix_ops", "inv", "04", "Matrix"] 1.080 μs (5%) 2.50 KiB (1%) 5
["matrix_ops", "inv", "04", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "inv", "10", "Matrix"] 2.689 μs (5%) 6.22 KiB (1%) 5
["matrix_ops", "inv", "10", "SMatrix"] 1.590 μs (5%)
["matrix_ops", "inv", "20", "Matrix"] 12.200 μs (5%) 13.67 KiB (1%) 5
["matrix_ops", "inv", "20", "SMatrix"] 13.700 μs (5%) 16.92 KiB (1%) 6
["qr", "S=1", "Matrix"] 107.873 ns (5%) 320 bytes (1%) 4
["qr", "S=1", "SMatrix"] 1.500 ns (5%)
["qr", "S=10", "Matrix"] 13.500 μs (5%) 2.66 KiB (1%) 4
["qr", "S=10", "SMatrix"] 780.189 ns (5%)
["qr", "S=11", "Matrix"] 15.100 μs (5%) 3.22 KiB (1%) 4
["qr", "S=11", "SMatrix"] 1.180 μs (5%)
["qr", "S=12", "Matrix"] 16.900 μs (5%) 3.69 KiB (1%) 4
["qr", "S=12", "SMatrix"] 1.260 μs (5%)
["qr", "S=13", "Matrix"] 18.700 μs (5%) 4.39 KiB (1%) 4
["qr", "S=13", "SMatrix"] 2.011 μs (5%)
["qr", "S=14", "Matrix"] 20.200 μs (5%) 5.33 KiB (1%) 4
["qr", "S=14", "SMatrix"] 2.756 μs (5%)
["qr", "S=15", "Matrix"] 22.100 μs (5%) 5.98 KiB (1%) 4
["qr", "S=15", "SMatrix"] 6.380 μs (5%)
["qr", "S=16", "Matrix"] 32.000 μs (5%) 6.41 KiB (1%) 4
["qr", "S=16", "SMatrix"] 4.571 μs (5%)
["qr", "S=17", "Matrix"] 35.300 μs (5%) 7.34 KiB (1%) 4
["qr", "S=17", "SMatrix"] 47.700 μs (5%) 19.56 KiB (1%) 10
["qr", "S=18", "Matrix"] 37.200 μs (5%) 8.09 KiB (1%) 4
["qr", "S=18", "SMatrix"] 54.200 μs (5%) 21.56 KiB (1%) 10
["qr", "S=19", "Matrix"] 38.300 μs (5%) 9.03 KiB (1%) 4
["qr", "S=19", "SMatrix"] 52.900 μs (5%) 24.06 KiB (1%) 10
["qr", "S=2", "Matrix"] 1.020 μs (5%) 368 bytes (1%) 4
["qr", "S=2", "SMatrix"] 12.613 ns (5%)
["qr", "S=20", "Matrix"] 40.300 μs (5%) 9.78 KiB (1%) 4
["qr", "S=20", "SMatrix"] 61.501 μs (5%) 26.06 KiB (1%) 10
["qr", "S=21", "Matrix"] 42.900 μs (5%) 10.91 KiB (1%) 4
["qr", "S=21", "SMatrix"] 60.700 μs (5%) 29.06 KiB (1%) 10
["qr", "S=22", "Matrix"] 45.200 μs (5%) 11.84 KiB (1%) 4
["qr", "S=22", "SMatrix"] 63.000 μs (5%) 31.56 KiB (1%) 10
["qr", "S=3", "Matrix"] 2.533 μs (5%) 512 bytes (1%) 4
["qr", "S=3", "SMatrix"] 42.684 ns (5%)
["qr", "S=4", "Matrix"] 3.900 μs (5%) 656 bytes (1%) 4
["qr", "S=4", "SMatrix"] 75.880 ns (5%)
["qr", "S=5", "Matrix"] 5.317 μs (5%) 896 bytes (1%) 4
["qr", "S=5", "SMatrix"] 144.976 ns (5%)
["qr", "S=6", "Matrix"] 6.950 μs (5%) 1.11 KiB (1%) 4
["qr", "S=6", "SMatrix"] 192.824 ns (5%)
["qr", "S=7", "Matrix"] 9.000 μs (5%) 1.48 KiB (1%) 4
["qr", "S=7", "SMatrix"] 312.319 ns (5%)
["qr", "S=8", "Matrix"] 10.100 μs (5%) 1.86 KiB (1%) 4
["qr", "S=8", "SMatrix"] 359.048 ns (5%)
["qr", "S=9", "Matrix"] 11.600 μs (5%) 2.19 KiB (1%) 4
["qr", "S=9", "SMatrix"] 615.607 ns (5%)

Benchmark Group List

Here's a list of all the benchmark groups executed by this job:

  • ["matrix_ops", "*", "01"]
  • ["matrix_ops", "*", "02"]
  • ["matrix_ops", "*", "03"]
  • ["matrix_ops", "*", "04"]
  • ["matrix_ops", "*", "10"]
  • ["matrix_ops", "*", "20"]
  • ["matrix_ops", "\\", "01"]
  • ["matrix_ops", "\\", "02"]
  • ["matrix_ops", "\\", "03"]
  • ["matrix_ops", "\\", "04"]
  • ["matrix_ops", "\\", "10"]
  • ["matrix_ops", "\\", "20"]
  • ["matrix_ops", "det", "01"]
  • ["matrix_ops", "det", "02"]
  • ["matrix_ops", "det", "03"]
  • ["matrix_ops", "det", "04"]
  • ["matrix_ops", "det", "10"]
  • ["matrix_ops", "det", "20"]
  • ["matrix_ops", "exp", "01"]
  • ["matrix_ops", "exp", "02"]
  • ["matrix_ops", "exp", "03"]
  • ["matrix_ops", "exp", "04"]
  • ["matrix_ops", "exp", "10"]
  • ["matrix_ops", "exp", "20"]
  • ["matrix_ops", "inv", "01"]
  • ["matrix_ops", "inv", "02"]
  • ["matrix_ops", "inv", "03"]
  • ["matrix_ops", "inv", "04"]
  • ["matrix_ops", "inv", "10"]
  • ["matrix_ops", "inv", "20"]
  • ["qr", "S=1"]
  • ["qr", "S=10"]
  • ["qr", "S=11"]
  • ["qr", "S=12"]
  • ["qr", "S=13"]
  • ["qr", "S=14"]
  • ["qr", "S=15"]
  • ["qr", "S=16"]
  • ["qr", "S=17"]
  • ["qr", "S=18"]
  • ["qr", "S=19"]
  • ["qr", "S=2"]
  • ["qr", "S=20"]
  • ["qr", "S=21"]
  • ["qr", "S=22"]
  • ["qr", "S=3"]
  • ["qr", "S=4"]
  • ["qr", "S=5"]
  • ["qr", "S=6"]
  • ["qr", "S=7"]
  • ["qr", "S=8"]
  • ["qr", "S=9"]

Julia versioninfo

Julia Version 1.3.1
Commit 2d5741174c (2019-12-30 21:36 UTC)
Platform Info:
  OS: Linux (x86_64-pc-linux-gnu)
      Ubuntu 18.04.4 LTS
  uname: Linux 5.0.0-1032-azure #34-Ubuntu SMP Mon Feb 10 19:37:25 UTC 2020 x86_64 x86_64
  CPU: Intel(R) Xeon(R) CPU E5-2673 v4 @ 2.30GHz: 
              speed         user         nice          sys         idle          irq
       #1  2294 MHz      58591 s          0 s       5008 s      24416 s          0 s
       #2  2294 MHz      28397 s          0 s       7846 s      50252 s          0 s
       
  Memory: 6.782737731933594 GB (3145.97265625 MB free)
  Uptime: 925.0 sec
  Load Avg:  1.14013671875  1.2119140625  0.88427734375
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-6.0.1 (ORCJIT, broadwell)

Baseline result

Benchmark Report for /home/runner/work/StaticArrays.jl/StaticArrays.jl

Job Properties

  • Time of benchmark: 27 Feb 2020 - 8:51
  • Package commit: f33060
  • Julia commit: 2d5741
  • Julia command flags: None
  • Environment variables: None

Results

Below is a table of this job's results, obtained by running the benchmarks.
The values listed in the ID column have the structure [parent_group, child_group, ..., key], and can be used to
index into the BaseBenchmarks suite to retrieve the corresponding benchmarks.
The percentages accompanying time and memory values in the below table are noise tolerances. The "true"
time/memory value for a given benchmark is expected to fall within this percentage of the reported value.
An empty cell means that the value was zero.

ID time GC time memory allocations
["matrix_ops", "*", "01", "Matrix"] 157.451 ns (5%) 96 bytes (1%) 1
["matrix_ops", "*", "01", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "*", "02", "Matrix"] 38.369 ns (5%) 112 bytes (1%) 1
["matrix_ops", "*", "02", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "*", "03", "Matrix"] 46.512 ns (5%) 160 bytes (1%) 1
["matrix_ops", "*", "03", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "*", "04", "Matrix"] 233.410 ns (5%) 208 bytes (1%) 1
["matrix_ops", "*", "04", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "*", "10", "Matrix"] 542.857 ns (5%) 896 bytes (1%) 1
["matrix_ops", "*", "10", "SMatrix"] 222.530 ns (5%)
["matrix_ops", "*", "20", "Matrix"] 1.722 μs (5%) 3.25 KiB (1%) 1
["matrix_ops", "*", "20", "SMatrix"] 1.400 μs (5%)
["matrix_ops", "\\", "01", "Matrix"] 91.233 ns (5%) 208 bytes (1%) 3
["matrix_ops", "\\", "01", "SMatrix"] 1.700 ns (5%)
["matrix_ops", "\\", "02", "Matrix"] 1.560 μs (5%) 352 bytes (1%) 4
["matrix_ops", "\\", "02", "SMatrix"] 6.500 ns (5%)
["matrix_ops", "\\", "03", "Matrix"] 1.844 μs (5%) 464 bytes (1%) 4
["matrix_ops", "\\", "03", "SMatrix"] 19.559 ns (5%)
["matrix_ops", "\\", "04", "Matrix"] 1.778 μs (5%) 560 bytes (1%) 4
["matrix_ops", "\\", "04", "SMatrix"] 187.630 ns (5%)
["matrix_ops", "\\", "10", "Matrix"] 3.957 μs (5%) 1.94 KiB (1%) 4
["matrix_ops", "\\", "10", "SMatrix"] 1.540 μs (5%)
["matrix_ops", "\\", "20", "Matrix"] 12.600 μs (5%) 6.77 KiB (1%) 4
["matrix_ops", "\\", "20", "SMatrix"] 13.600 μs (5%) 10.02 KiB (1%) 5
["matrix_ops", "det", "01", "Matrix"] 47.826 ns (5%) 112 bytes (1%) 2
["matrix_ops", "det", "01", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "det", "02", "Matrix"] 195.084 ns (5%) 240 bytes (1%) 3
["matrix_ops", "det", "02", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "det", "03", "Matrix"] 237.263 ns (5%) 304 bytes (1%) 3
["matrix_ops", "det", "03", "SMatrix"] 2.200 ns (5%)
["matrix_ops", "det", "04", "Matrix"] 295.455 ns (5%) 352 bytes (1%) 3
["matrix_ops", "det", "04", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "det", "10", "Matrix"] 1.140 μs (5%) 1.06 KiB (1%) 3
["matrix_ops", "det", "10", "SMatrix"] 616.374 ns (5%)
["matrix_ops", "det", "20", "Matrix"] 7.733 μs (5%) 3.52 KiB (1%) 3
["matrix_ops", "det", "20", "SMatrix"] 8.200 μs (5%) 6.77 KiB (1%) 4
["matrix_ops", "exp", "01", "Matrix"] 833.333 ns (5%) 1.69 KiB (1%) 20
["matrix_ops", "exp", "01", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "exp", "02", "Matrix"] 3.125 μs (5%) 3.52 KiB (1%) 32
["matrix_ops", "exp", "02", "SMatrix"] 58.698 ns (5%)
["matrix_ops", "exp", "03", "Matrix"] 3.886 μs (5%) 4.91 KiB (1%) 32
["matrix_ops", "exp", "03", "SMatrix"] 145.790 ns (5%)
["matrix_ops", "exp", "04", "Matrix"] 4.717 μs (5%) 3.25 KiB (1%) 17
["matrix_ops", "exp", "04", "SMatrix"] 414.000 ns (5%)
["matrix_ops", "exp", "10", "Matrix"] 10.800 μs (5%) 14.50 KiB (1%) 19
["matrix_ops", "exp", "10", "SMatrix"] 5.117 μs (5%)
["matrix_ops", "exp", "20", "Matrix"] 40.100 μs (5%) 55.91 KiB (1%) 20
["matrix_ops", "exp", "20", "SMatrix"] 426.002 μs (5%) 10.02 KiB (1%) 5
["matrix_ops", "inv", "01", "Matrix"] 164.617 ns (5%) 96 bytes (1%) 1
["matrix_ops", "inv", "01", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "inv", "02", "Matrix"] 446.701 ns (5%) 1.39 KiB (1%) 5
["matrix_ops", "inv", "02", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "inv", "03", "Matrix"] 559.145 ns (5%) 1.98 KiB (1%) 5
["matrix_ops", "inv", "03", "SMatrix"] 8.500 ns (5%)
["matrix_ops", "inv", "04", "Matrix"] 1.090 μs (5%) 2.50 KiB (1%) 5
["matrix_ops", "inv", "04", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "inv", "10", "Matrix"] 2.700 μs (5%) 6.22 KiB (1%) 5
["matrix_ops", "inv", "10", "SMatrix"] 1.640 μs (5%)
["matrix_ops", "inv", "20", "Matrix"] 11.400 μs (5%) 13.67 KiB (1%) 5
["matrix_ops", "inv", "20", "SMatrix"] 13.200 μs (5%) 16.92 KiB (1%) 6
["qr", "S=1", "Matrix"] 106.916 ns (5%) 320 bytes (1%) 4
["qr", "S=1", "SMatrix"] 1.700 ns (5%)
["qr", "S=10", "Matrix"] 12.900 μs (5%) 2.66 KiB (1%) 4
["qr", "S=10", "SMatrix"] 773.585 ns (5%)
["qr", "S=11", "Matrix"] 14.500 μs (5%) 3.22 KiB (1%) 4
["qr", "S=11", "SMatrix"] 1.240 μs (5%)
["qr", "S=12", "Matrix"] 16.300 μs (5%) 3.69 KiB (1%) 4
["qr", "S=12", "SMatrix"] 1.240 μs (5%)
["qr", "S=13", "Matrix"] 19.400 μs (5%) 4.39 KiB (1%) 4
["qr", "S=13", "SMatrix"] 2.133 μs (5%)
["qr", "S=14", "Matrix"] 19.700 μs (5%) 5.33 KiB (1%) 4
["qr", "S=14", "SMatrix"] 2.622 μs (5%)
["qr", "S=15", "Matrix"] 22.200 μs (5%) 5.98 KiB (1%) 4
["qr", "S=15", "SMatrix"] 3.640 μs (5%)
["qr", "S=16", "Matrix"] 31.300 μs (5%) 6.41 KiB (1%) 4
["qr", "S=16", "SMatrix"] 4.729 μs (5%)
["qr", "S=17", "Matrix"] 33.900 μs (5%) 7.34 KiB (1%) 4
["qr", "S=17", "SMatrix"] 46.400 μs (5%) 19.56 KiB (1%) 10
["qr", "S=18", "Matrix"] 36.200 μs (5%) 8.09 KiB (1%) 4
["qr", "S=18", "SMatrix"] 49.500 μs (5%) 21.56 KiB (1%) 10
["qr", "S=19", "Matrix"] 37.300 μs (5%) 9.03 KiB (1%) 4
["qr", "S=19", "SMatrix"] 52.200 μs (5%) 24.06 KiB (1%) 10
["qr", "S=2", "Matrix"] 1.020 μs (5%) 368 bytes (1%) 4
["qr", "S=2", "SMatrix"] 12.613 ns (5%)
["qr", "S=20", "Matrix"] 39.800 μs (5%) 9.78 KiB (1%) 4
["qr", "S=20", "SMatrix"] 55.900 μs (5%) 26.06 KiB (1%) 10
["qr", "S=21", "Matrix"] 43.100 μs (5%) 10.91 KiB (1%) 4
["qr", "S=21", "SMatrix"] 61.200 μs (5%) 29.06 KiB (1%) 10
["qr", "S=22", "Matrix"] 45.200 μs (5%) 11.84 KiB (1%) 4
["qr", "S=22", "SMatrix"] 62.500 μs (5%) 31.56 KiB (1%) 10
["qr", "S=3", "Matrix"] 2.522 μs (5%) 512 bytes (1%) 4
["qr", "S=3", "SMatrix"] 41.271 ns (5%)
["qr", "S=4", "Matrix"] 3.914 μs (5%) 656 bytes (1%) 4
["qr", "S=4", "SMatrix"] 75.776 ns (5%)
["qr", "S=5", "Matrix"] 5.233 μs (5%) 896 bytes (1%) 4
["qr", "S=5", "SMatrix"] 146.172 ns (5%)
["qr", "S=6", "Matrix"] 6.750 μs (5%) 1.11 KiB (1%) 4
["qr", "S=6", "SMatrix"] 212.480 ns (5%)
["qr", "S=7", "Matrix"] 8.000 μs (5%) 1.48 KiB (1%) 4
["qr", "S=7", "SMatrix"] 319.565 ns (5%)
["qr", "S=8", "Matrix"] 9.700 μs (5%) 1.86 KiB (1%) 4
["qr", "S=8", "SMatrix"] 370.000 ns (5%)
["qr", "S=9", "Matrix"] 11.100 μs (5%) 2.19 KiB (1%) 4
["qr", "S=9", "SMatrix"] 757.231 ns (5%)

Benchmark Group List

Here's a list of all the benchmark groups executed by this job:

  • ["matrix_ops", "*", "01"]
  • ["matrix_ops", "*", "02"]
  • ["matrix_ops", "*", "03"]
  • ["matrix_ops", "*", "04"]
  • ["matrix_ops", "*", "10"]
  • ["matrix_ops", "*", "20"]
  • ["matrix_ops", "\\", "01"]
  • ["matrix_ops", "\\", "02"]
  • ["matrix_ops", "\\", "03"]
  • ["matrix_ops", "\\", "04"]
  • ["matrix_ops", "\\", "10"]
  • ["matrix_ops", "\\", "20"]
  • ["matrix_ops", "det", "01"]
  • ["matrix_ops", "det", "02"]
  • ["matrix_ops", "det", "03"]
  • ["matrix_ops", "det", "04"]
  • ["matrix_ops", "det", "10"]
  • ["matrix_ops", "det", "20"]
  • ["matrix_ops", "exp", "01"]
  • ["matrix_ops", "exp", "02"]
  • ["matrix_ops", "exp", "03"]
  • ["matrix_ops", "exp", "04"]
  • ["matrix_ops", "exp", "10"]
  • ["matrix_ops", "exp", "20"]
  • ["matrix_ops", "inv", "01"]
  • ["matrix_ops", "inv", "02"]
  • ["matrix_ops", "inv", "03"]
  • ["matrix_ops", "inv", "04"]
  • ["matrix_ops", "inv", "10"]
  • ["matrix_ops", "inv", "20"]
  • ["qr", "S=1"]
  • ["qr", "S=10"]
  • ["qr", "S=11"]
  • ["qr", "S=12"]
  • ["qr", "S=13"]
  • ["qr", "S=14"]
  • ["qr", "S=15"]
  • ["qr", "S=16"]
  • ["qr", "S=17"]
  • ["qr", "S=18"]
  • ["qr", "S=19"]
  • ["qr", "S=2"]
  • ["qr", "S=20"]
  • ["qr", "S=21"]
  • ["qr", "S=22"]
  • ["qr", "S=3"]
  • ["qr", "S=4"]
  • ["qr", "S=5"]
  • ["qr", "S=6"]
  • ["qr", "S=7"]
  • ["qr", "S=8"]
  • ["qr", "S=9"]

Julia versioninfo

Julia Version 1.3.1
Commit 2d5741174c (2019-12-30 21:36 UTC)
Platform Info:
  OS: Linux (x86_64-pc-linux-gnu)
      Ubuntu 18.04.4 LTS
  uname: Linux 5.0.0-1032-azure #34-Ubuntu SMP Mon Feb 10 19:37:25 UTC 2020 x86_64 x86_64
  CPU: Intel(R) Xeon(R) CPU E5-2673 v4 @ 2.30GHz: 
              speed         user         nice          sys         idle          irq
       #1  2294 MHz      99408 s          0 s       5712 s      30504 s          0 s
       #2  2294 MHz      35897 s          0 s       9171 s      89043 s          0 s
       
  Memory: 6.782737731933594 GB (2881.6328125 MB free)
  Uptime: 1403.0 sec
  Load Avg:  1.1689453125  1.1826171875  1.00830078125
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-6.0.1 (ORCJIT, broadwell)

Runtime information

Runtime Info
BLAS #threads 2
BLAS.vendor() openblas64
Sys.CPU_THREADS 2

lscpu output:

Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              2
On-line CPU(s) list: 0,1
Thread(s) per core:  1
Core(s) per socket:  2
Socket(s):           1
NUMA node(s):        1
Vendor ID:           GenuineIntel
CPU family:          6
Model:               79
Model name:          Intel(R) Xeon(R) CPU E5-2673 v4 @ 2.30GHz
Stepping:            1
CPU MHz:             2294.687
BogoMIPS:            4589.37
Hypervisor vendor:   Microsoft
Virtualization type: full
L1d cache:           32K
L1i cache:           32K
L2 cache:            256K
L3 cache:            51200K
NUMA node0 CPU(s):   0,1
Flags:               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single pti fsgsbase bmi1 hle avx2 smep bmi2 erms invpcid rtm rdseed adx smap xsaveopt
Cpu Property Value
Brand Intel(R) Xeon(R) CPU E5-2673 v4 @ 2.30GHz
Vendor :Intel
Architecture :Broadwell
Model Family: 0x06, Model: 0x4f, Stepping: 0x01, Type: 0x00
Cores 2 physical cores, 2 logical cores (on executing CPU)
No Hyperthreading detected
Clock Frequencies Not supported by CPU
Data Cache Level 1:3 : (32, 256, 51200) kbytes
64 byte cache line size
Address Size 48 bits virtual, 44 bits physical
SIMD 256 bit = 32 byte max. SIMD vector size
Time Stamp Counter TSC is accessible via rdtsc
TSC increased at every clock cycle (non-invariant TSC)
Perf. Monitoring Performance Monitoring Counters (PMC) are not supported
Hypervisor Yes, Microsoft

@github-actions
Copy link

Benchmark result

Judge result

Benchmark Report for /home/runner/work/StaticArrays.jl/StaticArrays.jl

Job Properties

  • Time of benchmarks:
    • Target: 27 Feb 2020 - 10:55
    • Baseline: 27 Feb 2020 - 11:03
  • Package commits:
    • Target: 30015a
    • Baseline: f33060
  • Julia commits:
    • Target: 2d5741
    • Baseline: 2d5741
  • Julia command flags:
    • Target: None
    • Baseline: None
  • Environment variables:
    • Target: None
    • Baseline: None

Results

A ratio greater than 1.0 denotes a possible regression (marked with ❌), while a ratio less
than 1.0 denotes a possible improvement (marked with ✅). Only significant results - results
that indicate possible regressions or improvements - are shown below (thus, an empty table means that all
benchmark results remained invariant between builds).

ID time ratio memory ratio
["matrix_ops", "*", "10", "SMatrix"] 0.87 (5%) ✅ 1.00 (1%)
["matrix_ops", "*", "20", "SMatrix"] 0.81 (5%) ✅ 1.00 (1%)
["matrix_ops", "\\", "03", "Matrix"] 1.05 (5%) ❌ 1.00 (1%)
["matrix_ops", "\\", "04", "Matrix"] 1.06 (5%) ❌ 1.00 (1%)
["matrix_ops", "\\", "20", "Matrix"] 1.06 (5%) ❌ 1.00 (1%)
["matrix_ops", "exp", "02", "Matrix"] 1.08 (5%) ❌ 1.00 (1%)
["matrix_ops", "exp", "10", "SMatrix"] 1.09 (5%) ❌ 1.00 (1%)
["matrix_ops", "inv", "20", "SMatrix"] 0.89 (5%) ✅ 1.00 (1%)
["qr", "S=1", "SMatrix"] 0.82 (5%) ✅ 1.00 (1%)
["qr", "S=15", "Matrix"] 0.91 (5%) ✅ 1.00 (1%)
["qr", "S=16", "SMatrix"] 0.89 (5%) ✅ 1.00 (1%)

Benchmark Group List

Here's a list of all the benchmark groups executed by this job:

  • ["matrix_ops", "*", "01"]
  • ["matrix_ops", "*", "02"]
  • ["matrix_ops", "*", "03"]
  • ["matrix_ops", "*", "04"]
  • ["matrix_ops", "*", "10"]
  • ["matrix_ops", "*", "20"]
  • ["matrix_ops", "\\", "01"]
  • ["matrix_ops", "\\", "02"]
  • ["matrix_ops", "\\", "03"]
  • ["matrix_ops", "\\", "04"]
  • ["matrix_ops", "\\", "10"]
  • ["matrix_ops", "\\", "20"]
  • ["matrix_ops", "det", "01"]
  • ["matrix_ops", "det", "02"]
  • ["matrix_ops", "det", "03"]
  • ["matrix_ops", "det", "04"]
  • ["matrix_ops", "det", "10"]
  • ["matrix_ops", "det", "20"]
  • ["matrix_ops", "exp", "01"]
  • ["matrix_ops", "exp", "02"]
  • ["matrix_ops", "exp", "03"]
  • ["matrix_ops", "exp", "04"]
  • ["matrix_ops", "exp", "10"]
  • ["matrix_ops", "exp", "20"]
  • ["matrix_ops", "inv", "01"]
  • ["matrix_ops", "inv", "02"]
  • ["matrix_ops", "inv", "03"]
  • ["matrix_ops", "inv", "04"]
  • ["matrix_ops", "inv", "10"]
  • ["matrix_ops", "inv", "20"]
  • ["qr", "S=1"]
  • ["qr", "S=10"]
  • ["qr", "S=11"]
  • ["qr", "S=12"]
  • ["qr", "S=13"]
  • ["qr", "S=14"]
  • ["qr", "S=15"]
  • ["qr", "S=16"]
  • ["qr", "S=17"]
  • ["qr", "S=18"]
  • ["qr", "S=19"]
  • ["qr", "S=2"]
  • ["qr", "S=20"]
  • ["qr", "S=21"]
  • ["qr", "S=22"]
  • ["qr", "S=3"]
  • ["qr", "S=4"]
  • ["qr", "S=5"]
  • ["qr", "S=6"]
  • ["qr", "S=7"]
  • ["qr", "S=8"]
  • ["qr", "S=9"]

Julia versioninfo

Target

Julia Version 1.3.1
Commit 2d5741174c (2019-12-30 21:36 UTC)
Platform Info:
  OS: Linux (x86_64-pc-linux-gnu)
      Ubuntu 18.04.4 LTS
  uname: Linux 5.0.0-1032-azure #34-Ubuntu SMP Mon Feb 10 19:37:25 UTC 2020 x86_64 x86_64
  CPU: Intel(R) Xeon(R) CPU E5-2673 v3 @ 2.40GHz: 
              speed         user         nice          sys         idle          irq
       #1  2397 MHz      56184 s          0 s       4374 s      27523 s          0 s
       #2  2397 MHz      38050 s          0 s       5427 s      45190 s          0 s
       
  Memory: 6.782737731933594 GB (3146.0234375 MB free)
  Uptime: 902.0 sec
  Load Avg:  1.3134765625  1.23193359375  0.828125
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-6.0.1 (ORCJIT, haswell)

Baseline

Julia Version 1.3.1
Commit 2d5741174c (2019-12-30 21:36 UTC)
Platform Info:
  OS: Linux (x86_64-pc-linux-gnu)
      Ubuntu 18.04.4 LTS
  uname: Linux 5.0.0-1032-azure #34-Ubuntu SMP Mon Feb 10 19:37:25 UTC 2020 x86_64 x86_64
  CPU: Intel(R) Xeon(R) CPU E5-2673 v3 @ 2.40GHz: 
              speed         user         nice          sys         idle          irq
       #1  2397 MHz      71130 s          0 s       5249 s      62625 s          0 s
       #2  2397 MHz      75070 s          0 s       6111 s      58327 s          0 s
       
  Memory: 6.782737731933594 GB (2835.1796875 MB free)
  Uptime: 1414.0 sec
  Load Avg:  1.06298828125  1.0751953125  0.9375
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-6.0.1 (ORCJIT, haswell)

Target result

Benchmark Report for /home/runner/work/StaticArrays.jl/StaticArrays.jl

Job Properties

  • Time of benchmark: 27 Feb 2020 - 10:55
  • Package commit: 30015a
  • Julia commit: 2d5741
  • Julia command flags: None
  • Environment variables: None

Results

Below is a table of this job's results, obtained by running the benchmarks.
The values listed in the ID column have the structure [parent_group, child_group, ..., key], and can be used to
index into the BaseBenchmarks suite to retrieve the corresponding benchmarks.
The percentages accompanying time and memory values in the below table are noise tolerances. The "true"
time/memory value for a given benchmark is expected to fall within this percentage of the reported value.
An empty cell means that the value was zero.

ID time GC time memory allocations
["matrix_ops", "*", "01", "Matrix"] 211.895 ns (5%) 96 bytes (1%) 1
["matrix_ops", "*", "01", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "*", "02", "Matrix"] 52.787 ns (5%) 112 bytes (1%) 1
["matrix_ops", "*", "02", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "*", "03", "Matrix"] 61.940 ns (5%) 160 bytes (1%) 1
["matrix_ops", "*", "03", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "*", "04", "Matrix"] 245.860 ns (5%) 208 bytes (1%) 1
["matrix_ops", "*", "04", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "*", "10", "Matrix"] 501.080 ns (5%) 896 bytes (1%) 1
["matrix_ops", "*", "10", "SMatrix"] 216.774 ns (5%)
["matrix_ops", "*", "20", "Matrix"] 1.822 μs (5%) 3.25 KiB (1%) 1
["matrix_ops", "*", "20", "SMatrix"] 1.460 μs (5%)
["matrix_ops", "\\", "01", "Matrix"] 122.664 ns (5%) 208 bytes (1%) 3
["matrix_ops", "\\", "01", "SMatrix"] 5.200 ns (5%)
["matrix_ops", "\\", "02", "Matrix"] 2.000 μs (5%) 352 bytes (1%) 4
["matrix_ops", "\\", "02", "SMatrix"] 10.410 ns (5%)
["matrix_ops", "\\", "03", "Matrix"] 2.133 μs (5%) 464 bytes (1%) 4
["matrix_ops", "\\", "03", "SMatrix"] 25.930 ns (5%)
["matrix_ops", "\\", "04", "Matrix"] 2.289 μs (5%) 560 bytes (1%) 4
["matrix_ops", "\\", "04", "SMatrix"] 257.189 ns (5%)
["matrix_ops", "\\", "10", "Matrix"] 4.443 μs (5%) 1.94 KiB (1%) 4
["matrix_ops", "\\", "10", "SMatrix"] 1.890 μs (5%)
["matrix_ops", "\\", "20", "Matrix"] 13.200 μs (5%) 6.77 KiB (1%) 4
["matrix_ops", "\\", "20", "SMatrix"] 15.400 μs (5%) 10.02 KiB (1%) 5
["matrix_ops", "det", "01", "Matrix"] 61.751 ns (5%) 112 bytes (1%) 2
["matrix_ops", "det", "01", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "det", "02", "Matrix"] 259.732 ns (5%) 240 bytes (1%) 3
["matrix_ops", "det", "02", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "det", "03", "Matrix"] 320.340 ns (5%) 304 bytes (1%) 3
["matrix_ops", "det", "03", "SMatrix"] 3.000 ns (5%)
["matrix_ops", "det", "04", "Matrix"] 400.500 ns (5%) 352 bytes (1%) 3
["matrix_ops", "det", "04", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "det", "10", "Matrix"] 1.180 μs (5%) 1.06 KiB (1%) 3
["matrix_ops", "det", "10", "SMatrix"] 666.680 ns (5%)
["matrix_ops", "det", "20", "Matrix"] 7.425 μs (5%) 3.52 KiB (1%) 3
["matrix_ops", "det", "20", "SMatrix"] 8.300 μs (5%) 6.77 KiB (1%) 4
["matrix_ops", "exp", "01", "Matrix"] 1.070 μs (5%) 1.69 KiB (1%) 20
["matrix_ops", "exp", "01", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "exp", "02", "Matrix"] 3.713 μs (5%) 3.52 KiB (1%) 32
["matrix_ops", "exp", "02", "SMatrix"] 76.733 ns (5%)
["matrix_ops", "exp", "03", "Matrix"] 4.129 μs (5%) 4.91 KiB (1%) 32
["matrix_ops", "exp", "03", "SMatrix"] 152.395 ns (5%)
["matrix_ops", "exp", "04", "Matrix"] 4.750 μs (5%) 3.25 KiB (1%) 17
["matrix_ops", "exp", "04", "SMatrix"] 513.380 ns (5%)
["matrix_ops", "exp", "10", "Matrix"] 11.500 μs (5%) 14.50 KiB (1%) 19
["matrix_ops", "exp", "10", "SMatrix"] 5.734 μs (5%)
["matrix_ops", "exp", "20", "Matrix"] 42.901 μs (5%) 55.91 KiB (1%) 20
["matrix_ops", "exp", "20", "SMatrix"] 411.410 μs (5%) 10.02 KiB (1%) 5
["matrix_ops", "inv", "01", "Matrix"] 222.872 ns (5%) 96 bytes (1%) 1
["matrix_ops", "inv", "01", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "inv", "02", "Matrix"] 610.129 ns (5%) 1.39 KiB (1%) 5
["matrix_ops", "inv", "02", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "inv", "03", "Matrix"] 788.605 ns (5%) 1.98 KiB (1%) 5
["matrix_ops", "inv", "03", "SMatrix"] 26.004 ns (5%)
["matrix_ops", "inv", "04", "Matrix"] 1.150 μs (5%) 2.50 KiB (1%) 5
["matrix_ops", "inv", "04", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "inv", "10", "Matrix"] 2.856 μs (5%) 6.22 KiB (1%) 5
["matrix_ops", "inv", "10", "SMatrix"] 1.940 μs (5%)
["matrix_ops", "inv", "20", "Matrix"] 12.001 μs (5%) 13.67 KiB (1%) 5
["matrix_ops", "inv", "20", "SMatrix"] 13.201 μs (5%) 16.92 KiB (1%) 6
["qr", "S=1", "Matrix"] 148.112 ns (5%) 320 bytes (1%) 4
["qr", "S=1", "SMatrix"] 1.800 ns (5%)
["qr", "S=10", "Matrix"] 13.700 μs (5%) 2.66 KiB (1%) 4
["qr", "S=10", "SMatrix"] 889.604 ns (5%)
["qr", "S=11", "Matrix"] 15.400 μs (5%) 3.22 KiB (1%) 4
["qr", "S=11", "SMatrix"] 1.280 μs (5%)
["qr", "S=12", "Matrix"] 17.300 μs (5%) 3.69 KiB (1%) 4
["qr", "S=12", "SMatrix"] 1.460 μs (5%)
["qr", "S=13", "Matrix"] 19.000 μs (5%) 4.39 KiB (1%) 4
["qr", "S=13", "SMatrix"] 2.500 μs (5%)
["qr", "S=14", "Matrix"] 21.000 μs (5%) 5.33 KiB (1%) 4
["qr", "S=14", "SMatrix"] 3.038 μs (5%)
["qr", "S=15", "Matrix"] 23.400 μs (5%) 5.98 KiB (1%) 4
["qr", "S=15", "SMatrix"] 4.037 μs (5%)
["qr", "S=16", "Matrix"] 33.401 μs (5%) 6.41 KiB (1%) 4
["qr", "S=16", "SMatrix"] 5.129 μs (5%)
["qr", "S=17", "Matrix"] 36.301 μs (5%) 7.34 KiB (1%) 4
["qr", "S=17", "SMatrix"] 49.701 μs (5%) 19.56 KiB (1%) 10
["qr", "S=18", "Matrix"] 38.601 μs (5%) 8.09 KiB (1%) 4
["qr", "S=18", "SMatrix"] 53.401 μs (5%) 21.56 KiB (1%) 10
["qr", "S=19", "Matrix"] 40.401 μs (5%) 9.03 KiB (1%) 4
["qr", "S=19", "SMatrix"] 55.301 μs (5%) 24.06 KiB (1%) 10
["qr", "S=2", "Matrix"] 1.390 μs (5%) 368 bytes (1%) 4
["qr", "S=2", "SMatrix"] 20.461 ns (5%)
["qr", "S=20", "Matrix"] 43.001 μs (5%) 9.78 KiB (1%) 4
["qr", "S=20", "SMatrix"] 60.002 μs (5%) 26.06 KiB (1%) 10
["qr", "S=21", "Matrix"] 45.601 μs (5%) 10.91 KiB (1%) 4
["qr", "S=21", "SMatrix"] 63.201 μs (5%) 29.06 KiB (1%) 10
["qr", "S=22", "Matrix"] 47.801 μs (5%) 11.84 KiB (1%) 4
["qr", "S=22", "SMatrix"] 65.001 μs (5%) 31.56 KiB (1%) 10
["qr", "S=3", "Matrix"] 2.700 μs (5%) 512 bytes (1%) 4
["qr", "S=3", "SMatrix"] 60.164 ns (5%)
["qr", "S=4", "Matrix"] 4.186 μs (5%) 656 bytes (1%) 4
["qr", "S=4", "SMatrix"] 101.866 ns (5%)
["qr", "S=5", "Matrix"] 5.567 μs (5%) 896 bytes (1%) 4
["qr", "S=5", "SMatrix"] 190.337 ns (5%)
["qr", "S=6", "Matrix"] 7.175 μs (5%) 1.11 KiB (1%) 4
["qr", "S=6", "SMatrix"] 253.729 ns (5%)
["qr", "S=7", "Matrix"] 8.567 μs (5%) 1.48 KiB (1%) 4
["qr", "S=7", "SMatrix"] 368.005 ns (5%)
["qr", "S=8", "Matrix"] 10.300 μs (5%) 1.86 KiB (1%) 4
["qr", "S=8", "SMatrix"] 438.389 ns (5%)
["qr", "S=9", "Matrix"] 11.900 μs (5%) 2.19 KiB (1%) 4
["qr", "S=9", "SMatrix"] 707.056 ns (5%)

Benchmark Group List

Here's a list of all the benchmark groups executed by this job:

  • ["matrix_ops", "*", "01"]
  • ["matrix_ops", "*", "02"]
  • ["matrix_ops", "*", "03"]
  • ["matrix_ops", "*", "04"]
  • ["matrix_ops", "*", "10"]
  • ["matrix_ops", "*", "20"]
  • ["matrix_ops", "\\", "01"]
  • ["matrix_ops", "\\", "02"]
  • ["matrix_ops", "\\", "03"]
  • ["matrix_ops", "\\", "04"]
  • ["matrix_ops", "\\", "10"]
  • ["matrix_ops", "\\", "20"]
  • ["matrix_ops", "det", "01"]
  • ["matrix_ops", "det", "02"]
  • ["matrix_ops", "det", "03"]
  • ["matrix_ops", "det", "04"]
  • ["matrix_ops", "det", "10"]
  • ["matrix_ops", "det", "20"]
  • ["matrix_ops", "exp", "01"]
  • ["matrix_ops", "exp", "02"]
  • ["matrix_ops", "exp", "03"]
  • ["matrix_ops", "exp", "04"]
  • ["matrix_ops", "exp", "10"]
  • ["matrix_ops", "exp", "20"]
  • ["matrix_ops", "inv", "01"]
  • ["matrix_ops", "inv", "02"]
  • ["matrix_ops", "inv", "03"]
  • ["matrix_ops", "inv", "04"]
  • ["matrix_ops", "inv", "10"]
  • ["matrix_ops", "inv", "20"]
  • ["qr", "S=1"]
  • ["qr", "S=10"]
  • ["qr", "S=11"]
  • ["qr", "S=12"]
  • ["qr", "S=13"]
  • ["qr", "S=14"]
  • ["qr", "S=15"]
  • ["qr", "S=16"]
  • ["qr", "S=17"]
  • ["qr", "S=18"]
  • ["qr", "S=19"]
  • ["qr", "S=2"]
  • ["qr", "S=20"]
  • ["qr", "S=21"]
  • ["qr", "S=22"]
  • ["qr", "S=3"]
  • ["qr", "S=4"]
  • ["qr", "S=5"]
  • ["qr", "S=6"]
  • ["qr", "S=7"]
  • ["qr", "S=8"]
  • ["qr", "S=9"]

Julia versioninfo

Julia Version 1.3.1
Commit 2d5741174c (2019-12-30 21:36 UTC)
Platform Info:
  OS: Linux (x86_64-pc-linux-gnu)
      Ubuntu 18.04.4 LTS
  uname: Linux 5.0.0-1032-azure #34-Ubuntu SMP Mon Feb 10 19:37:25 UTC 2020 x86_64 x86_64
  CPU: Intel(R) Xeon(R) CPU E5-2673 v3 @ 2.40GHz: 
              speed         user         nice          sys         idle          irq
       #1  2397 MHz      56184 s          0 s       4374 s      27523 s          0 s
       #2  2397 MHz      38050 s          0 s       5427 s      45190 s          0 s
       
  Memory: 6.782737731933594 GB (3146.0234375 MB free)
  Uptime: 902.0 sec
  Load Avg:  1.3134765625  1.23193359375  0.828125
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-6.0.1 (ORCJIT, haswell)

Baseline result

Benchmark Report for /home/runner/work/StaticArrays.jl/StaticArrays.jl

Job Properties

  • Time of benchmark: 27 Feb 2020 - 11:3
  • Package commit: f33060
  • Julia commit: 2d5741
  • Julia command flags: None
  • Environment variables: None

Results

Below is a table of this job's results, obtained by running the benchmarks.
The values listed in the ID column have the structure [parent_group, child_group, ..., key], and can be used to
index into the BaseBenchmarks suite to retrieve the corresponding benchmarks.
The percentages accompanying time and memory values in the below table are noise tolerances. The "true"
time/memory value for a given benchmark is expected to fall within this percentage of the reported value.
An empty cell means that the value was zero.

ID time GC time memory allocations
["matrix_ops", "*", "01", "Matrix"] 210.816 ns (5%) 96 bytes (1%) 1
["matrix_ops", "*", "01", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "*", "02", "Matrix"] 51.470 ns (5%) 112 bytes (1%) 1
["matrix_ops", "*", "02", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "*", "03", "Matrix"] 63.063 ns (5%) 160 bytes (1%) 1
["matrix_ops", "*", "03", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "*", "04", "Matrix"] 244.567 ns (5%) 208 bytes (1%) 1
["matrix_ops", "*", "04", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "*", "10", "Matrix"] 500.551 ns (5%) 896 bytes (1%) 1
["matrix_ops", "*", "10", "SMatrix"] 248.485 ns (5%)
["matrix_ops", "*", "20", "Matrix"] 1.889 μs (5%) 3.25 KiB (1%) 1
["matrix_ops", "*", "20", "SMatrix"] 1.810 μs (5%)
["matrix_ops", "\\", "01", "Matrix"] 123.767 ns (5%) 208 bytes (1%) 3
["matrix_ops", "\\", "01", "SMatrix"] 5.200 ns (5%)
["matrix_ops", "\\", "02", "Matrix"] 1.956 μs (5%) 352 bytes (1%) 4
["matrix_ops", "\\", "02", "SMatrix"] 10.410 ns (5%)
["matrix_ops", "\\", "03", "Matrix"] 2.022 μs (5%) 464 bytes (1%) 4
["matrix_ops", "\\", "03", "SMatrix"] 25.930 ns (5%)
["matrix_ops", "\\", "04", "Matrix"] 2.156 μs (5%) 560 bytes (1%) 4
["matrix_ops", "\\", "04", "SMatrix"] 257.192 ns (5%)
["matrix_ops", "\\", "10", "Matrix"] 4.343 μs (5%) 1.94 KiB (1%) 4
["matrix_ops", "\\", "10", "SMatrix"] 1.860 μs (5%)
["matrix_ops", "\\", "20", "Matrix"] 12.400 μs (5%) 6.77 KiB (1%) 4
["matrix_ops", "\\", "20", "SMatrix"] 15.501 μs (5%) 10.02 KiB (1%) 5
["matrix_ops", "det", "01", "Matrix"] 62.260 ns (5%) 112 bytes (1%) 2
["matrix_ops", "det", "01", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "det", "02", "Matrix"] 260.008 ns (5%) 240 bytes (1%) 3
["matrix_ops", "det", "02", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "det", "03", "Matrix"] 320.755 ns (5%) 304 bytes (1%) 3
["matrix_ops", "det", "03", "SMatrix"] 3.000 ns (5%)
["matrix_ops", "det", "04", "Matrix"] 399.025 ns (5%) 352 bytes (1%) 3
["matrix_ops", "det", "04", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "det", "10", "Matrix"] 1.180 μs (5%) 1.06 KiB (1%) 3
["matrix_ops", "det", "10", "SMatrix"] 673.876 ns (5%)
["matrix_ops", "det", "20", "Matrix"] 7.425 μs (5%) 3.52 KiB (1%) 3
["matrix_ops", "det", "20", "SMatrix"] 8.000 μs (5%) 6.77 KiB (1%) 4
["matrix_ops", "exp", "01", "Matrix"] 1.070 μs (5%) 1.69 KiB (1%) 20
["matrix_ops", "exp", "01", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "exp", "02", "Matrix"] 3.425 μs (5%) 3.52 KiB (1%) 32
["matrix_ops", "exp", "02", "SMatrix"] 76.734 ns (5%)
["matrix_ops", "exp", "03", "Matrix"] 4.214 μs (5%) 4.91 KiB (1%) 32
["matrix_ops", "exp", "03", "SMatrix"] 153.625 ns (5%)
["matrix_ops", "exp", "04", "Matrix"] 4.700 μs (5%) 3.25 KiB (1%) 17
["matrix_ops", "exp", "04", "SMatrix"] 502.690 ns (5%)
["matrix_ops", "exp", "10", "Matrix"] 11.100 μs (5%) 14.50 KiB (1%) 19
["matrix_ops", "exp", "10", "SMatrix"] 5.267 μs (5%)
["matrix_ops", "exp", "20", "Matrix"] 41.102 μs (5%) 55.91 KiB (1%) 20
["matrix_ops", "exp", "20", "SMatrix"] 400.615 μs (5%) 10.02 KiB (1%) 5
["matrix_ops", "inv", "01", "Matrix"] 220.742 ns (5%) 96 bytes (1%) 1
["matrix_ops", "inv", "01", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "inv", "02", "Matrix"] 608.444 ns (5%) 1.39 KiB (1%) 5
["matrix_ops", "inv", "02", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "inv", "03", "Matrix"] 775.465 ns (5%) 1.98 KiB (1%) 5
["matrix_ops", "inv", "03", "SMatrix"] 25.904 ns (5%)
["matrix_ops", "inv", "04", "Matrix"] 1.120 μs (5%) 2.50 KiB (1%) 5
["matrix_ops", "inv", "04", "SMatrix"] 0.001 ns (5%)
["matrix_ops", "inv", "10", "Matrix"] 2.789 μs (5%) 6.22 KiB (1%) 5
["matrix_ops", "inv", "10", "SMatrix"] 1.920 μs (5%)
["matrix_ops", "inv", "20", "Matrix"] 12.500 μs (5%) 13.67 KiB (1%) 5
["matrix_ops", "inv", "20", "SMatrix"] 14.800 μs (5%) 16.92 KiB (1%) 6
["qr", "S=1", "Matrix"] 144.854 ns (5%) 320 bytes (1%) 4
["qr", "S=1", "SMatrix"] 2.200 ns (5%)
["qr", "S=10", "Matrix"] 13.700 μs (5%) 2.66 KiB (1%) 4
["qr", "S=10", "SMatrix"] 897.938 ns (5%)
["qr", "S=11", "Matrix"] 15.301 μs (5%) 3.22 KiB (1%) 4
["qr", "S=11", "SMatrix"] 1.290 μs (5%)
["qr", "S=12", "Matrix"] 17.300 μs (5%) 3.69 KiB (1%) 4
["qr", "S=12", "SMatrix"] 1.450 μs (5%)
["qr", "S=13", "Matrix"] 19.600 μs (5%) 4.39 KiB (1%) 4
["qr", "S=13", "SMatrix"] 2.433 μs (5%)
["qr", "S=14", "Matrix"] 20.901 μs (5%) 5.33 KiB (1%) 4
["qr", "S=14", "SMatrix"] 2.975 μs (5%)
["qr", "S=15", "Matrix"] 25.700 μs (5%) 5.98 KiB (1%) 4
["qr", "S=15", "SMatrix"] 3.988 μs (5%)
["qr", "S=16", "Matrix"] 33.701 μs (5%) 6.41 KiB (1%) 4
["qr", "S=16", "SMatrix"] 5.772 μs (5%)
["qr", "S=17", "Matrix"] 36.101 μs (5%) 7.34 KiB (1%) 4
["qr", "S=17", "SMatrix"] 49.102 μs (5%) 19.56 KiB (1%) 10
["qr", "S=18", "Matrix"] 38.202 μs (5%) 8.09 KiB (1%) 4
["qr", "S=18", "SMatrix"] 52.801 μs (5%) 21.56 KiB (1%) 10
["qr", "S=19", "Matrix"] 40.301 μs (5%) 9.03 KiB (1%) 4
["qr", "S=19", "SMatrix"] 55.302 μs (5%) 24.06 KiB (1%) 10
["qr", "S=2", "Matrix"] 1.400 μs (5%) 368 bytes (1%) 4
["qr", "S=2", "SMatrix"] 20.461 ns (5%)
["qr", "S=20", "Matrix"] 42.101 μs (5%) 9.78 KiB (1%) 4
["qr", "S=20", "SMatrix"] 58.302 μs (5%) 26.06 KiB (1%) 10
["qr", "S=21", "Matrix"] 44.802 μs (5%) 10.91 KiB (1%) 4
["qr", "S=21", "SMatrix"] 61.602 μs (5%) 29.06 KiB (1%) 10
["qr", "S=22", "Matrix"] 47.402 μs (5%) 11.84 KiB (1%) 4
["qr", "S=22", "SMatrix"] 65.402 μs (5%) 31.56 KiB (1%) 10
["qr", "S=3", "Matrix"] 2.689 μs (5%) 512 bytes (1%) 4
["qr", "S=3", "SMatrix"] 60.062 ns (5%)
["qr", "S=4", "Matrix"] 4.200 μs (5%) 656 bytes (1%) 4
["qr", "S=4", "SMatrix"] 100.936 ns (5%)
["qr", "S=5", "Matrix"] 5.550 μs (5%) 896 bytes (1%) 4
["qr", "S=5", "SMatrix"] 194.838 ns (5%)
["qr", "S=6", "Matrix"] 7.175 μs (5%) 1.11 KiB (1%) 4
["qr", "S=6", "SMatrix"] 252.133 ns (5%)
["qr", "S=7", "Matrix"] 8.567 μs (5%) 1.48 KiB (1%) 4
["qr", "S=7", "SMatrix"] 377.510 ns (5%)
["qr", "S=8", "Matrix"] 10.300 μs (5%) 1.86 KiB (1%) 4
["qr", "S=8", "SMatrix"] 433.848 ns (5%)
["qr", "S=9", "Matrix"] 11.900 μs (5%) 2.19 KiB (1%) 4
["qr", "S=9", "SMatrix"] 716.218 ns (5%)

Benchmark Group List

Here's a list of all the benchmark groups executed by this job:

  • ["matrix_ops", "*", "01"]
  • ["matrix_ops", "*", "02"]
  • ["matrix_ops", "*", "03"]
  • ["matrix_ops", "*", "04"]
  • ["matrix_ops", "*", "10"]
  • ["matrix_ops", "*", "20"]
  • ["matrix_ops", "\\", "01"]
  • ["matrix_ops", "\\", "02"]
  • ["matrix_ops", "\\", "03"]
  • ["matrix_ops", "\\", "04"]
  • ["matrix_ops", "\\", "10"]
  • ["matrix_ops", "\\", "20"]
  • ["matrix_ops", "det", "01"]
  • ["matrix_ops", "det", "02"]
  • ["matrix_ops", "det", "03"]
  • ["matrix_ops", "det", "04"]
  • ["matrix_ops", "det", "10"]
  • ["matrix_ops", "det", "20"]
  • ["matrix_ops", "exp", "01"]
  • ["matrix_ops", "exp", "02"]
  • ["matrix_ops", "exp", "03"]
  • ["matrix_ops", "exp", "04"]
  • ["matrix_ops", "exp", "10"]
  • ["matrix_ops", "exp", "20"]
  • ["matrix_ops", "inv", "01"]
  • ["matrix_ops", "inv", "02"]
  • ["matrix_ops", "inv", "03"]
  • ["matrix_ops", "inv", "04"]
  • ["matrix_ops", "inv", "10"]
  • ["matrix_ops", "inv", "20"]
  • ["qr", "S=1"]
  • ["qr", "S=10"]
  • ["qr", "S=11"]
  • ["qr", "S=12"]
  • ["qr", "S=13"]
  • ["qr", "S=14"]
  • ["qr", "S=15"]
  • ["qr", "S=16"]
  • ["qr", "S=17"]
  • ["qr", "S=18"]
  • ["qr", "S=19"]
  • ["qr", "S=2"]
  • ["qr", "S=20"]
  • ["qr", "S=21"]
  • ["qr", "S=22"]
  • ["qr", "S=3"]
  • ["qr", "S=4"]
  • ["qr", "S=5"]
  • ["qr", "S=6"]
  • ["qr", "S=7"]
  • ["qr", "S=8"]
  • ["qr", "S=9"]

Julia versioninfo

Julia Version 1.3.1
Commit 2d5741174c (2019-12-30 21:36 UTC)
Platform Info:
  OS: Linux (x86_64-pc-linux-gnu)
      Ubuntu 18.04.4 LTS
  uname: Linux 5.0.0-1032-azure #34-Ubuntu SMP Mon Feb 10 19:37:25 UTC 2020 x86_64 x86_64
  CPU: Intel(R) Xeon(R) CPU E5-2673 v3 @ 2.40GHz: 
              speed         user         nice          sys         idle          irq
       #1  2397 MHz      71130 s          0 s       5249 s      62625 s          0 s
       #2  2397 MHz      75070 s          0 s       6111 s      58327 s          0 s
       
  Memory: 6.782737731933594 GB (2835.1796875 MB free)
  Uptime: 1414.0 sec
  Load Avg:  1.06298828125  1.0751953125  0.9375
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-6.0.1 (ORCJIT, haswell)

Runtime information

Runtime Info
BLAS #threads 2
BLAS.vendor() openblas64
Sys.CPU_THREADS 2

lscpu output:

Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              2
On-line CPU(s) list: 0,1
Thread(s) per core:  1
Core(s) per socket:  2
Socket(s):           1
NUMA node(s):        1
Vendor ID:           GenuineIntel
CPU family:          6
Model:               63
Model name:          Intel(R) Xeon(R) CPU E5-2673 v3 @ 2.40GHz
Stepping:            2
CPU MHz:             2397.219
BogoMIPS:            4794.43
Hypervisor vendor:   Microsoft
Virtualization type: full
L1d cache:           32K
L1i cache:           32K
L2 cache:            256K
L3 cache:            30720K
NUMA node0 CPU(s):   0,1
Flags:               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm invpcid_single pti fsgsbase bmi1 avx2 smep bmi2 erms invpcid xsaveopt md_clear
Cpu Property Value
Brand Intel(R) Xeon(R) CPU E5-2673 v3 @ 2.40GHz
Vendor :Intel
Architecture :Haswell
Model Family: 0x06, Model: 0x3f, Stepping: 0x02, Type: 0x00
Cores 2 physical cores, 2 logical cores (on executing CPU)
No Hyperthreading detected
Clock Frequencies Not supported by CPU
Data Cache Level 1:3 : (32, 256, 30720) kbytes
64 byte cache line size
Address Size 48 bits virtual, 44 bits physical
SIMD 256 bit = 32 byte max. SIMD vector size
Time Stamp Counter TSC is accessible via rdtsc
TSC increased at every clock cycle (non-invariant TSC)
Perf. Monitoring Performance Monitoring Counters (PMC) are not supported
Hypervisor Yes, Microsoft

@coveralls
Copy link

Coverage Status

Coverage remained the same at 82.459% when pulling ddd2fb6 on cjf/setindex-MArray into f330604 on master.

Copy link
Member

@andyferris andyferris left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we use @GC.preserve on both v and val and use something like the isbitstype path? We basically want to copy a pointer... so long as the garbage collection is conservative enough this should be safe, no? Or is there something about the generational GC that makes this more complex than I would guess?

(We should split out the convert to earlier so that the pointer copy part is provably synchronous)

@tkf
Copy link
Member

tkf commented Feb 27, 2020

For the "fail hard" option, wouldn't it be better to disallow even creating MArrays with non-isbits elements? If so, I think defining setindex! here makes sense if it is allowed to construct in the first place.

Good for aspiring performance hackers

Shouldn't people who wants to optimize the hell out of their code use SArray in the first place? Gearing towards user-friendliness in MArray API makes sense to me.

(@KristofferC If the benchmark comment from the bot is too noisy, we can turn off the comment. See #741)

@c42f
Copy link
Member Author

c42f commented Feb 27, 2020

Can we use @GC.preserve on both v and val and use something like the isbitstype path? We basically want to copy a pointer... so long as the garbage collection is conservative enough this should be safe, no?

Well I kind of think not? The storage Tuple is meant to be immutable so if we go around overwriting elements doesn't that violate Julia semantics? Consequences could be the compiler proving something const in inference and making decisions based on that which are violated at runtime.

Related - I'm not exactly sure why we get away with apparently the exact same thing for bits types! (I guess the inlining of "immutable" storage into the mutable parent structure has some weird semantic consequences.)

Or is there something about the generational GC that makes this more complex than I would guess?

Yes! The GC is generational. Objects are split into old and new generations. In order to collect the new generation independently, it needs to specially track any old objects which point to new ones. This means you need to inform the GC whenever you set a pointer field (so it can update the internal "remset" if the object is old and the child pointed to is new). This is the purpose of the obscurely named runtime function jl_gc_wb(). So in principle we could write the pointer and ccall jl_gc_wb or equivalent. It might be fun to try but I'm not sure this can make sense for tuples which are meant to be immutable :-)

@c42f
Copy link
Member Author

c42f commented Feb 28, 2020

For the "fail hard" option, wouldn't it be better to disallow even creating MArrays with non-isbits elements? If so, I think defining setindex! here makes sense if it is allowed to construct in the first place.

You might be right about that. We currently have another bug where initializing with undef basically makes a non-isbits MArray unusable.

So perhaps this PR would have better been an issue: "What to do about MArray with non-isbits elements?"

Good for aspiring performance hackers

Shouldn't people who wants to optimize the hell out of their code use SArray in the first place? Gearing towards user-friendliness in MArray API makes sense to me.

Temporary MArrays can be quite good for in-place algorithms; very efficient and simple to use, and the compiler seems quite willing to reason about them effectively. Especially for some of the linear algebra algorithms, people have to go to extreme lengths to be able to use the immutable versions.

When I say "extreme lengths" I guess it's a matter of perspective: I find imperative in-place numerical linear algebra more natural to reason about compared to the very functional style that SArray demands.

(@KristofferC If the benchmark comment from the bot is too noisy, we can turn off the comment. See #741)

Yes I think it's a bit noisy (especially when I do stupid things like breaking the tests, as I did here 😬) I've merged that now to reduce notification volume.

@tkf
Copy link
Member

tkf commented Feb 28, 2020

When I say "extreme lengths" I guess it's a matter of perspective

I guess this is what I meant to say by "optimize the hell out." I wanted to mention that MArray lies somewhere between SArray and Array in terms of ease-of-use spectrum and (maybe "user-friendliness" wasn't the best word for it). Since SArray covers the extreme portion of this spectrum, I thought accepting more generic use with MArray seems to be a good balance. That is to say, if you have a super performance-sensitive code and you want to avoid bitten by non-isbits MArray at all cost, you still can use SArray.

By the way, can the unsafe_store! path support union of isbits types like Union{Float64,Missing}?

@c42f
Copy link
Member Author

c42f commented Feb 28, 2020

By the way, can the unsafe_store! path support union of isbits types like Union{Float64,Missing}?

Excellent question, I checked the data layout and I think the answer is a conclusive "no for now" because tuples-of-unions are not inlined. Indeed I think the covariance of tuples makes this impossible right now because a data storage NTuple{2,Union{Missing,Float64}} is not a concrete type?

Possibly it would help to have systematic treatment of small union selector bits along the lines of JuliaLang/julia#33120 but I guess we would still need a new builtin InvariantTuple to make this work.

@c42f c42f added feature features and feature requests cleanup bugfix and removed cleanup labels Mar 17, 2020
@c42f
Copy link
Member Author

c42f commented Apr 17, 2020

I checked the data layout and I think the answer is a conclusive "no for now" because tuples-of-unions are not inlined

Actually very recently we have JuliaLang/julia#34126 — if that were to merge we might actually be in a position to fix this without a huge performance hit. Though we'd still need to figure out how to maintain correct GC invariants.

@tkf
Copy link
Member

tkf commented Apr 25, 2020

I guess we would still need a new builtin InvariantTuple to make this work

Can we just insert a "value wrapper" to get an invariant tuple type?

struct InvariantValue{T}  # "value wrapper"
    value::T
end

struct InvariantTuple{T <: Tuple{Vararg{InvariantValue}}}
    values::T
end

Base.getindex(t::InvariantTuple, i::Integer) = t.values[i].value

# Some helper functions
(::Base.Colon)(x::S, ::Type{T}) where {T, S <: T} = InvariantValue{T}(x)
invariant(args::InvariantValue...) = InvariantTuple(args)

t1 = invariant(1:Union{Missing,Int}, 2.0:Union{Missing,Float64})
t2 = invariant(1:Union{Missing,Int}, missing:Union{Missing,Float64})
typeof(t1) === typeof(t2)

(Alternatively, we can also create a "typed linked list." Though I guess this is much more compiler-friendly.)

I guess what we need here is actually

struct InvariantNTuple{N,T}
    values::NTuple{N,InvariantValue{T}}
end

which may be more compiler friendly (naively thinking, fewer type parameters sounds good)?

c42f added 3 commits May 19, 2020 16:01
Implement this for the sake of people using MArray in generic code, even
though it's unlikely to be fast.
There's not a lot of point testing MVector/MMatrix separately, as
they're now the same struct (since Julia 0.6 or so)
@goulart-paul
Copy link

Can someone comment on the status of this PR? I find myself in the "people wanting to write generic code using MArray" group described above, particularly to keep open the option of using BigFloats.

@ChrisRackauckas
Copy link
Member

Revisit if JuliaLang/julia#34126 is merged

It merged, so it should be fine now?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bugfix feature features and feature requests
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants