Tensorium
|
A multi-dimensional aligned tensor for numerical derivatives. More...
#include <Derivate.hpp>
Public Types | |
using | reg = typename Simd::reg |
using | reg = typename Simd::reg |
Public Member Functions | |
DerivateND (const std::array< size_t, Rank > &dims) | |
Construct a tensor with a given shape. | |
size_t | flatten_index (const std::array< size_t, Rank > &indices) const |
K & | operator() (const std::array< size_t, Rank > &indices) |
Mutable access to a tensor element. | |
const K & | operator() (const std::array< size_t, Rank > &indices) const |
Const access to a tensor element. | |
size_t | size () const |
Total number of elements in the tensor. | |
__attribute__ ((always_inline, hot, flatten)) inline void centered_derivative(const DerivateND< K | |
Compute second-order centered derivative along an axis. | |
for (int i=Rank - 2;i >=0;--i) strides[i] | |
for (size_t flat=0;flat< total;flat+=simd_width) | |
__attribute__ ((always_inline, hot, flatten)) inline void centered_derivative_order4_rank(const DerivateND< K | |
Compute fourth-order centered derivative along an axis. | |
for (int i=Rank - 2;i >=0;--i) strides[i] | |
for (size_t flat=0;flat< total;flat+=W) | |
Public Attributes | |
std::array< size_t, Rank > | shape = input.shape |
aligned_vector< K > | data |
size_t | block_size |
Rank & | input |
Rank DerivateND< K, Rank > & | output |
Rank DerivateND< K, Rank > size_t | axis |
Rank DerivateND< K, Rank > size_t K dx | const |
const size_t | simd_width = Simd::width |
const auto & | shape = input.shape |
const size_t | total = input.size() |
const K | inv_2dx = K(1) / (K(2) * dx) |
const reg | inv2dx = Simd::set1(inv_2dx) |
std::array< size_t, Rank > | strides |
strides [Rank - 1] = 1 | |
const size_t | stride_axis = strides[axis] |
const size_t | dim_axis = shape[axis] |
constexpr size_t | W = Simd::width |
const K | inv_12dx = K(1) / (K(12) * dx) |
const reg | inv = Simd::set1(inv_12dx) |
A multi-dimensional aligned tensor for numerical derivatives.
K | Scalar type. |
Rank | Tensor rank (dimensionality). |
|
inline |
Construct a tensor with a given shape.
dims | Tensor dimensions. |
References tensorium::DerivateND< K, Rank >::block_size.
tensorium::DerivateND< K, Rank >::__attribute__ | ( | (always_inline, hot, flatten) | ) | const |
Compute second-order centered derivative along an axis.
input | Input tensor. |
output | Output tensor. |
axis | Axis to differentiate. |
dx | Grid spacing. |
tensorium::DerivateND< K, Rank >::__attribute__ | ( | (always_inline, hot, flatten) | ) | const |
Compute fourth-order centered derivative along an axis.
input | Input tensor. |
output | Output tensor. |
axis | Axis to differentiate. |
dx | Grid spacing. |
|
inline |
References tensorium::DerivateND< K, Rank >::shape.
Referenced by tensorium::DerivateND< K, Rank >::operator()(), and tensorium::DerivateND< K, Rank >::operator()().
tensorium::DerivateND< K, Rank >::for | ( | int | i = Rank - 2;i >=0;--i | ) |
tensorium::DerivateND< K, Rank >::for | ( | int | i = Rank - 2;i >=0;--i | ) |
|
inline |
References tensorium::DerivateND< K, Rank >::dim_axis, f(), tensorium::DerivateND< K, Rank >::input, tensorium::DerivateND< K, Rank >::inv2dx, tensorium::DerivateND< K, Rank >::inv_2dx, tensorium::DerivateND< K, Rank >::output, tensorium::DerivateND< K, Rank >::simd_width, tensorium::DerivateND< K, Rank >::stride_axis, and tensorium::DerivateND< K, Rank >::total.
|
inline |
References tensorium::DerivateND< K, Rank >::dim_axis, f(), tensorium::DerivateND< K, Rank >::input, tensorium::DerivateND< K, Rank >::inv, tensorium::DerivateND< K, Rank >::inv_12dx, tensorium::DerivateND< K, Rank >::output, tensorium::DerivateND< K, Rank >::stride_axis, tensorium::DerivateND< K, Rank >::total, and tensorium::DerivateND< K, Rank >::W.
|
inline |
Mutable access to a tensor element.
indices | Multi-index. |
References tensorium::DerivateND< K, Rank >::data, and tensorium::DerivateND< K, Rank >::flatten_index().
|
inline |
Const access to a tensor element.
indices | Multi-index. |
References tensorium::DerivateND< K, Rank >::data, and tensorium::DerivateND< K, Rank >::flatten_index().
Total number of elements in the tensor.
References tensorium::DerivateND< K, Rank >::data.
Rank DerivateND< K, Rank > size_t tensorium::DerivateND< K, Rank >::axis |
Referenced by tensorium::DerivateND< K, Rank >::DerivateND().
Rank DerivateND< K, Rank > size_t K dx tensorium::DerivateND< K, Rank >::const |
aligned_vector<K> tensorium::DerivateND< K, Rank >::data |
Referenced by tensorium::DerivateND< K, Rank >::for(), and tensorium::DerivateND< K, Rank >::for().
Rank & tensorium::DerivateND< K, Rank >::input |
Referenced by tensorium::DerivateND< K, Rank >::for(), and tensorium::DerivateND< K, Rank >::for().
const reg tensorium::DerivateND< K, Rank >::inv = Simd::set1(inv_12dx) |
Referenced by tensorium::DerivateND< K, Rank >::for().
const reg tensorium::DerivateND< K, Rank >::inv2dx = Simd::set1(inv_2dx) |
Referenced by tensorium::DerivateND< K, Rank >::for().
Referenced by tensorium::DerivateND< K, Rank >::for().
Referenced by tensorium::DerivateND< K, Rank >::for().
Rank DerivateND< K, Rank > & tensorium::DerivateND< K, Rank >::output |
Referenced by tensorium::DerivateND< K, Rank >::for(), and tensorium::DerivateND< K, Rank >::for().
const auto & tensorium::DerivateND< K, Rank >::shape = input.shape |
Referenced by tensorium::DerivateND< K, Rank >::flatten_index().
const auto& tensorium::DerivateND< K, Rank >::shape = input.shape |
const size_t tensorium::DerivateND< K, Rank >::simd_width = Simd::width |
Referenced by tensorium::DerivateND< K, Rank >::for().
Referenced by tensorium::DerivateND< K, Rank >::for(), and tensorium::DerivateND< K, Rank >::for().
std::array< size_t, Rank > tensorium::DerivateND< K, Rank >::strides |
tensorium::DerivateND< K, Rank >::strides[Rank - 1] = 1 |
const size_t tensorium::DerivateND< K, Rank >::total = input.size() |
Referenced by tensorium::DerivateND< K, Rank >::for(), and tensorium::DerivateND< K, Rank >::for().
|
constexpr |
Referenced by tensorium::DerivateND< K, Rank >::for().