Benchmarks

The performance for some typical operators is summarized below. For fourth-order tensors, both Array and SArray use the classical Voigt form to correctly handle symmetries. The benchmakrs show that Tensor offers performance comparable to SArray without the hassle of using the Voigt form.

a = rand(Vec{3})
A = rand(SecondOrderTensor{3})
S = rand(SymmetricSecondOrderTensor{3})
AA = rand(FourthOrderTensor{3})
SS = rand(SymmetricFourthOrderTensor{3})
OperationTensorArraySpeedupSArraySpeedup
Single contraction
a ⊡ a2.785 ns9.266 ns×3.32.785 ns×1.0
A ⊡ a3.095 ns55.766 ns×18.03.095 ns×1.0
S ⊡ a3.406 ns55.806 ns×16.03.095 ns×0.91
Double contraction
A ⊡₂ A3.406 ns11.121 ns×3.33.707 ns×1.1
S ⊡₂ S3.095 ns10.189 ns×3.33.706 ns×1.2
AA ⊡₂ A7.732 ns77.452 ns×10.07.732 ns×1.0
SS ⊡₂ S4.067 ns70.933 ns×17.04.258 ns×1.0
Tensor product
a ⊗ a3.406 ns32.841 ns×9.63.416 ns×1.0
Cross product
a × a3.406 ns32.841 ns×9.63.416 ns×1.0
Determinant
det(A)3.396 ns173.918 ns×51.03.095 ns×0.91
det(S)3.095 ns174.391 ns×56.03.095 ns×1.0
Inverse
inv(A)6.582 ns496.368 ns×75.07.410 ns×1.1
inv(S)4.929 ns496.731 ns×100.07.411 ns×1.5
inv(AA)944.333 ns1.514 μs×1.6946.960 ns×1.0
inv(SS)358.014 ns990.900 ns×2.8356.048 ns×0.99

The benchmarks are generated by runbenchmarks.jl on the following system:

julia> versioninfo()
Julia Version 1.11.5
Commit 760b2e5b739 (2025-04-14 06:53 UTC)
Build Info:
  Official https://julialang.org/ release
Platform Info:
  OS: Linux (x86_64-linux-gnu)
  CPU: 4 × AMD EPYC 7763 64-Core Processor
  WORD_SIZE: 64
  LLVM: libLLVM-16.0.6 (ORCJIT, znver3)
Threads: 1 default, 0 interactive, 1 GC (on 4 virtual cores)