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})| Operation | Tensor | Array | Speedup | SArray | Speedup |
|---|---|---|---|---|---|
| Single contraction | |||||
a ⊡ a | 2.785 ns | 8.955 ns | ×3.2 | 3.095 ns | ×1.1 |
A ⊡ a | 3.406 ns | 49.159 ns | ×14.0 | 3.095 ns | ×0.91 |
S ⊡ a | 3.406 ns | 49.109 ns | ×14.0 | 3.095 ns | ×0.91 |
| Double contraction | |||||
A ⊡₂ A | 3.406 ns | 10.800 ns | ×3.2 | 3.707 ns | ×1.1 |
S ⊡₂ S | 3.095 ns | 9.878 ns | ×3.2 | 3.707 ns | ×1.2 |
AA ⊡₂ A | 7.722 ns | 67.691 ns | ×8.8 | 7.732 ns | ×1.0 |
SS ⊡₂ S | 4.278 ns | 59.214 ns | ×14.0 | 4.277 ns | ×1.0 |
| Tensor product | |||||
a ⊗ a | 3.716 ns | 31.446 ns | ×8.5 | 3.406 ns | ×0.92 |
| Cross product | |||||
a × a | 3.716 ns | 31.446 ns | ×8.5 | 3.406 ns | ×0.92 |
| Determinant | |||||
det(A) | 3.095 ns | 178.738 ns | ×58.0 | 3.406 ns | ×1.1 |
det(S) | 3.095 ns | 175.020 ns | ×57.0 | 3.406 ns | ×1.1 |
| Inverse | |||||
inv(A) | 6.192 ns | 475.503 ns | ×77.0 | 7.391 ns | ×1.2 |
inv(S) | 4.919 ns | 468.066 ns | ×95.0 | 7.391 ns | ×1.5 |
inv(AA) | 967.154 ns | 1.545 μs | ×1.6 | 971.800 ns | ×1.0 |
inv(SS) | 384.728 ns | 959.538 ns | ×2.5 | 370.063 ns | ×0.96 |
The benchmarks are generated by runbenchmarks.jl on the following system:
julia> versioninfo()
Julia Version 1.12.5
Commit 5fe89b8ddc1 (2026-02-09 16:05 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-18.1.7 (ORCJIT, znver3)
GC: Built with stock GC
Threads: 1 default, 1 interactive, 1 GC (on 4 virtual cores)