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 ⊡ a3.095 ns9.256 ns×3.03.095 ns×1.0
A ⊡ a3.095 ns58.268 ns×19.03.095 ns×1.0
S ⊡ a3.406 ns59.032 ns×17.03.095 ns×0.91
Double contraction
A ⊡₂ A3.155 ns11.111 ns×3.53.406 ns×1.1
S ⊡₂ S3.406 ns10.188 ns×3.03.406 ns×1.0
AA ⊡₂ A7.732 ns80.180 ns×10.07.732 ns×1.0
SS ⊡₂ S4.178 ns69.361 ns×17.04.368 ns×1.0
Tensor product
a ⊗ a3.406 ns33.537 ns×9.83.406 ns×1.0
Cross product
a × a3.406 ns33.537 ns×9.83.406 ns×1.0
Determinant
det(A)3.396 ns172.760 ns×51.03.406 ns×1.0
det(S)3.095 ns173.347 ns×56.03.406 ns×1.1
Inverse
inv(A)6.181 ns532.387 ns×86.07.390 ns×1.2
inv(S)4.869 ns488.489 ns×100.07.400 ns×1.5
inv(AA)963.300 ns1.597 μs×1.7967.647 ns×1.0
inv(SS)360.770 ns1.096 μs×3.0368.043 ns×1.0

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

julia> versioninfo()
Julia Version 1.11.4
Commit 8561cc3d68d (2025-03-10 11:36 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)