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.256 ns×3.33.095 ns×1.1
A ⊡ a3.396 ns53.287 ns×16.03.396 ns×1.0
S ⊡ a3.095 ns53.319 ns×17.03.396 ns×1.1
Double contraction
A ⊡₂ A3.706 ns11.111 ns×3.03.406 ns×0.92
S ⊡₂ S3.095 ns10.189 ns×3.33.406 ns×1.1
AA ⊡₂ A7.732 ns71.817 ns×9.37.742 ns×1.0
SS ⊡₂ S4.278 ns63.385 ns×15.04.328 ns×1.0
Tensor product
a ⊗ a3.707 ns33.255 ns×9.03.707 ns×1.0
Cross product
a × a3.707 ns33.255 ns×9.03.707 ns×1.0
Determinant
det(A)3.095 ns171.551 ns×55.03.095 ns×1.0
det(S)3.396 ns171.252 ns×50.03.095 ns×0.91
Inverse
inv(A)6.192 ns475.847 ns×77.07.400 ns×1.2
inv(S)4.919 ns472.418 ns×96.07.401 ns×1.5
inv(AA)946.364 ns1.546 μs×1.6961.300 ns×1.0
inv(SS)356.767 ns938.944 ns×2.6365.850 ns×1.0

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

julia> versioninfo()
Julia Version 1.11.6
Commit 9615af0f269 (2025-07-09 12:58 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)