Unknown allocation in code which should not allocate any memory
Submitted by Nenad
Assigned to Nobody
Link to original bugzilla bug (#1267)
Version: 3.3 (current stable)
Description
Consider this function:
auto constexpr Aligned = ::Eigen::Aligned16;
auto constexpr Unaligned = ::Eigen::Unaligned;
void apply_kernels // a specialized gemv
(
value_t * __restrict const output,
value_t const * __restrict const kernel_weights,
value_t const * __restrict const biases,
value_t const * __restrict const patch,
float const kernel_dim,
std::uint8_t const num_kernels
) noexcept
{
using namespace MB::Math;
auto const kernels ( rowmajor_matrix( kernel_weights, num_kernels, kernel_dim ) );
auto const v_patch ( colvector< Aligned>( patch , kernel_dim ) );
auto const v_biases( colvector< Aligned>( biases, num_kernels ) );
auto v_output( colvector<Unaligned>( output, num_kernels ) );
v_output.noalias() = kernels * v_patch;
v_output.noalias() += v_biases;
} // apply_kernels()
AFAIK, this snippet should not allocate any memory, yet we observe memory allocation. Is that a bug or normal behaviour?
We are using commit cb2d8b8f from mercurial.
Edited by Eigen Bugzilla