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 | 9.256 ns | ×3.3 | 3.095 ns | ×1.1 |
A ⊡ a | 3.396 ns | 53.716 ns | ×16.0 | 3.396 ns | ×1.0 |
S ⊡ a | 3.396 ns | 53.694 ns | ×16.0 | 3.396 ns | ×1.0 |
Double contraction | |||||
A ⊡₂ A | 3.706 ns | 11.111 ns | ×3.0 | 3.406 ns | ×0.92 |
S ⊡₂ S | 3.095 ns | 10.189 ns | ×3.3 | 3.406 ns | ×1.1 |
AA ⊡₂ A | 7.742 ns | 71.562 ns | ×9.2 | 7.732 ns | ×1.0 |
SS ⊡₂ S | 4.097 ns | 63.507 ns | ×16.0 | 4.257 ns | ×1.0 |
Tensor product | |||||
a ⊗ a | 3.406 ns | 33.466 ns | ×9.8 | 3.716 ns | ×1.1 |
Cross product | |||||
a × a | 3.406 ns | 33.466 ns | ×9.8 | 3.716 ns | ×1.1 |
Determinant | |||||
det(A) | 3.095 ns | 165.120 ns | ×53.0 | 3.095 ns | ×1.0 |
det(S) | 3.396 ns | 165.198 ns | ×49.0 | 3.095 ns | ×0.91 |
Inverse | |||||
inv(A) | 6.201 ns | 483.882 ns | ×78.0 | 7.410 ns | ×1.2 |
inv(S) | 4.929 ns | 487.738 ns | ×99.0 | 7.400 ns | ×1.5 |
inv(AA) | 958.000 ns | 1.547 μs | ×1.6 | 968.300 ns | ×1.0 |
inv(SS) | 364.341 ns | 992.900 ns | ×2.7 | 356.072 ns | ×0.98 |
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)