* Started support for unaligned vectorization.

* Introduce a new highly optimized matrix-matrix product for large
  matrices. The code is still highly experimental and it is activated
  only if you define EIGEN_WIP_PRODUCT at compile time.
  Currently the third dimension of the product must be a factor of
  the packet size (x4 for floats) and the right handed side matrix
  must be column major.
  Moreover, currently c = a*b; actually computes c += a*b !!
  Therefore, the code is provided for experimentation purpose only !
  These limitations will be fixed soon or later to become the default
  product implementation.
This commit is contained in:
Gael Guennebaud
2008-05-05 10:23:29 +00:00
parent 8c6007f80e
commit 46fa4c713f
15 changed files with 663 additions and 79 deletions

View File

@@ -143,6 +143,18 @@ template<typename MatrixType, int BlockRows, int BlockCols> class Block
return m_matrix.coeff(row + m_startRow.value(), col + m_startCol.value());
}
template<int LoadMode>
PacketScalar _packetCoeff(int row, int col) const
{
return m_matrix.packetCoeff<UnAligned>(row + m_startRow.value(), col + m_startCol.value());
}
template<int LoadMode>
void _writePacketCoeff(int row, int col, const PacketScalar& x)
{
m_matrix.const_cast_derived().writePacketCoeff<UnAligned>(row + m_startRow.value(), col + m_startCol.value(), x);
}
protected:
const typename MatrixType::Nested m_matrix;