| Commit message (Collapse) | Author | Age |
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This used to work for non-class types (e.g. raw function pointers) in
Eigen 3.3. This was changed in commit 11f55b29 to optimize the
evaluator:
> `sizeof((A-B).cwiseAbs2())` with A,B Vector4f is now 16 bytes, instead of 48 before this optimization.
though I cannot reproduce the 16 byte result. Both before the change
and after, with multiple compilers/versions, I always get a result of 40 bytes.
https://godbolt.org/z/MsjTc1PGe
This change modifies the code slightly to allow non-class types. The
final generated code is identical, and the expression remains 40 bytes
for the `abs2` sample case.
Fixes #2251
|
|
|
|
|
|
| |
innerStride(), outerStride(), and size()""
This reverts commit 5f0b4a4010af4cbf6161a0d1a03a747addc44a5d.
|
|
|
|
|
|
|
| |
innerStride(), outerStride(), and size()"
This reverts commit 6cbb3038ac48cb5fe17eba4dfbf26e3e798041f1 because it
breaks clang-10 builds on x86 and aarch64 when C++11 is enabled.
|
|
|
|
| |
outerStride(), and size()
|
|
|
|
| |
true compile-time "if" for block_evaluator<>::coeff(i)/coeffRef(i)
|
|
|
|
| |
accessors as STRONG_INLINE.
|
|
|
|
| |
for instance: colmajor_mat.rowwise().mean()
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
the fix in commit 12efc7d41b80259b996be5781bf596c249c90d3f
)
|
| |
|
| |
|
|
|
|
| |
particular, (A+B).col(j) lost vectorisation.
|
|
|
|
|
| |
* they're used consistently between the declaration and the definition of a function
* we avoid calling host only methods from host device methods.
|
| |
|
|
|
|
|
|
|
|
| |
The problem was that is "sparse" is not const, then sparse.diagonal() must have the
LValueBit flag meaning that sparse.diagonal().coeff(i) must returns a const reference,
const Scalar&. However, sparse::coeff() cannot returns a reference for a non-existing
zero coefficient. The trick is to return a reference to a local member of
evaluator<SparseMatrix>.
|
|
|
|
|
|
|
| |
the functor or outer-stride if they are empty.
For instance, sizeof("(A-B).cwiseAbs2()") with A,B Vector4f is now 16 bytes, instead of 48 before this optimization.
In theory, evaluators should be completely optimized away by the compiler, but this might help in some cases.
|
|
|
|
|
|
| |
to get EBO (Empty Base Optimization)
Note: we should probbaly get rid of this class and define a macro instead.
|
| |
|
|
|
|
|
|
| |
by helping it to remove dead code.
The trick is to get rid of the nested expression in the evaluator by copying only the required information (here, the strides).
|
| |
|
|
|
|
| |
triats<Ref>::match so that the has_*ary_operator are really properly instantiated throughout the compilation unit.
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
to CwiseNullaryExpr such that functors have only to implement the operators that matters among:
operator()()
operator()(i)
operator()(i,j)
Linear access is also automatically detected based on the availability of operator()(i,j).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
TernaryFunctors and their executors allow operations on 3-tuples of inputs.
API fully implemented for Arrays and Tensors based on binary functors.
Ported the cephes betainc function (regularized incomplete beta
integral) to Eigen, with support for CPU and GPU, floats, doubles, and
half types.
Added unit tests in array.cpp and cxx11_tensor_cuda.cu
Collapsed revision
* Merged helper methods for betainc across floats and doubles.
* Added TensorGlobalFunctions with betainc(). Removed betainc() from TensorBase.
* Clean up CwiseTernaryOp checks, change igamma_helper to cephes_helper.
* betainc: merge incbcf and incbd into incbeta_cfe. and more cleanup.
* Update TernaryOp and SpecialFunctions (betainc) based on review comments.
|
|
|
|
|
|
|
|
| |
conversions.
This fixes "conversion from pointer to same-sized integral type" warnings by ICC.
Ideally, we would use the std::[u]intptr_t types all the time, but since they are C99/C++11 only,
let's be safe.
|
|
|
|
| |
responsibilty of the assignment logic.
|
| |
|
|
|
|
| |
of aligned ones for fixed size assignement.
|
| |
|
|
|
|
|
|
|
| |
happier.
<g.gael@free.fr> HG: branch 'default' HG: changed Eigen/src/Core/ArrayBase.h HG: changed Eigen/src/Core/AssignEvaluator.h HG: changed
Eigen/src/Core/CoreEvaluators.h HG: changed Eigen/src/Core/CwiseUnaryOp.h HG: changed Eigen/src/Core/DenseBase.h HG: changed Eigen/src/Core/MatrixBase.h
|
|
|
|
| |
the LinearAccessBit flag
|
|
|
|
| |
evaluator_traits::AssumeAliasing to evaluator_assume_aliasing.
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
- Dynamic is now an invalid value
- introduce a HugeCost constant to be used for runtime-cost values or arbitrarily huge cost
- add sanity checks for cost values: must be >=0 and not too large
This change provides several benefits:
- it fixes shortcoming is some cost computation where the Dynamic case was not properly handled.
- it simplifies cost computation logic, and should avoid future similar shortcomings.
- it allows to distinguish between different level of dynamic/huge/infinite cost
- it should enable further simplifications in the computation of costs (save compilation time)
|
| |
|
| |
|
| |
|
|
|
|
| |
evaluation of nested expression
|
| |
|
| |
|