FflasFfpack
Functions
FFPACK::Protected Namespace Reference

Functions

template<class Field >
size_t LUdivine_construct (const Field &F, const FFLAS::FFLAS_DIAG Diag, const size_t M, const size_t N, typename Field::ConstElement_ptr A, const size_t lda, typename Field::Element_ptr X, const size_t ldx, typename Field::Element_ptr u, const size_t incu, size_t *P, bool computeX, const FFPACK_MINPOLY_TAG MinTag=FfpackDense, const size_t kg_mc=0, const size_t kg_mb=0, const size_t kg_j=0)
 
template<class Field >
size_t GaussJordan (const Field &F, const size_t M, const size_t N, typename Field::Element_ptr A, const size_t lda, const size_t colbeg, const size_t rowbeg, const size_t colsize, size_t *P, size_t *Q, const FFPACK::FFPACK_LU_TAG LuTag)
 Gauss-Jordan algorithm computing the Reduced Row echelon form and its transform matrix. More...
 
template<class Field , class Polynomial >
std::list< Polynomial > & KellerGehrig (const Field &F, std::list< Polynomial > &charp, const size_t N, typename Field::ConstElement_ptr A, const size_t lda)
 
template<class Field , class Polynomial >
int KGFast (const Field &F, std::list< Polynomial > &charp, const size_t N, typename Field::Element_ptr A, const size_t lda, size_t *kg_mc, size_t *kg_mb, size_t *kg_j)
 
template<class Field , class Polynomial >
std::list< Polynomial > & KGFast_generalized (const Field &F, std::list< Polynomial > &charp, const size_t N, typename Field::Element_ptr A, const size_t lda)
 
template<class Field >
void fgemv_kgf (const Field &F, const size_t N, typename Field::ConstElement_ptr A, const size_t lda, typename Field::ConstElement_ptr X, const size_t incX, typename Field::Element_ptr Y, const size_t incY, const size_t kg_mc, const size_t kg_mb, const size_t kg_j)
 
template<class Field , class Polynomial , class RandIter >
std::list< Polynomial > & LUKrylov (const Field &F, std::list< Polynomial > &charp, const size_t N, typename Field::Element_ptr A, const size_t lda, typename Field::Element_ptr U, const size_t ldu, RandIter &G)
 
template<class Field , class Polynomial >
std::list< Polynomial > & Danilevski (const Field &F, std::list< Polynomial > &charp, const size_t N, typename Field::Element_ptr A, const size_t lda)
 
template<class PolRing >
void RandomKrylovPrecond (const PolRing &PR, std::list< typename PolRing::Element > &completedFactors, const size_t N, typename PolRing::Domain_t::Element_ptr A, const size_t lda, size_t &Nb, typename PolRing::Domain_t::Element_ptr &B, size_t &ldb, typename PolRing::Domain_t::RandIter &g, const size_t degree=__FFLASFFPACK_ARITHPROG_THRESHOLD)
 
template<class PolRing >
std::list< typename PolRing::Element > & ArithProg (const PolRing &PR, std::list< typename PolRing::Element > &frobeniusForm, const size_t N, typename PolRing::Domain_t::Element_ptr A, const size_t lda, const size_t degree)
 
template<class Field , class Polynomial >
std::list< Polynomial > & LUKrylov_KGFast (const Field &F, std::list< Polynomial > &charp, const size_t N, typename Field::Element_ptr A, const size_t lda, typename Field::Element_ptr X, const size_t ldx)
 
template<class Field , class Polynomial >
Polynomial & MatVecMinPoly (const Field &F, Polynomial &minP, const size_t N, typename Field::ConstElement_ptr A, const size_t lda, typename Field::Element_ptr v, const size_t incv, typename Field::Element_ptr K, const size_t ldk, size_t *P)
 
template<class Field , class Polynomial >
Polynomial & Hybrid_KGF_LUK_MinPoly (const Field &F, Polynomial &minP, const size_t N, typename Field::ConstElement_ptr A, const size_t lda, typename Field::Element_ptr X, const size_t ldx, size_t *P, const FFPACK_MINPOLY_TAG MinTag=FFPACK::FfpackDense, const size_t kg_mc=0, const size_t kg_mb=0, const size_t kg_j=0)
 
template<class Field >
size_t updateD (const Field &F, size_t *d, size_t k, std::vector< std::vector< typename Field::Element > > &minpt)
 
template<class Field >
size_t newD (const Field &F, size_t *d, bool &KeepOn, const size_t l, const size_t N, typename Field::Element_ptr X, const size_t *Q, std::vector< std::vector< typename Field::Element > > &minpt)
 
template<class Field >
void CompressRows (Field &F, const size_t M, typename Field::Element_ptr A, const size_t lda, typename Field::Element_ptr tmp, const size_t ldtmp, const size_t *d, const size_t nb_blocs)
 
template<class Field >
void CompressRowsQK (Field &F, const size_t M, typename Field::Element_ptr A, const size_t lda, typename Field::Element_ptr tmp, const size_t ldtmp, const size_t *d, const size_t deg, const size_t nb_blocs)
 
template<class Field >
void DeCompressRows (Field &F, const size_t M, const size_t N, typename Field::Element_ptr A, const size_t lda, typename Field::Element_ptr tmp, const size_t ldtmp, const size_t *d, const size_t nb_blocs)
 
template<class Field >
void DeCompressRowsQK (Field &F, const size_t M, const size_t N, typename Field::Element_ptr A, const size_t lda, typename Field::Element_ptr tmp, const size_t ldtmp, const size_t *d, const size_t deg, const size_t nb_blocs)
 
template<class Field >
void CompressRowsQA (Field &F, const size_t M, typename Field::Element_ptr A, const size_t lda, typename Field::Element_ptr tmp, const size_t ldtmp, const size_t *d, const size_t nb_blocs)
 
template<class Field >
void DeCompressRowsQA (Field &F, const size_t M, const size_t N, typename Field::Element_ptr A, const size_t lda, typename Field::Element_ptr tmp, const size_t ldtmp, const size_t *d, const size_t nb_blocs)
 
template<class Field >
size_t LUdivine_construct (const Field &F, const FFLAS::FFLAS_DIAG Diag, const size_t M, const size_t N, typename Field::ConstElement_ptr A, const size_t lda, typename Field::Element_ptr X, const size_t ldx, typename Field::Element_ptr u, const size_t incu, size_t *P, bool computeX, const FFPACK::FFPACK_MINPOLY_TAG MinTag, const size_t kg_mc, const size_t kg_mb, const size_t kg_j)
 

Function Documentation

◆ LUdivine_construct() [1/2]

size_t LUdivine_construct ( const Field F,
const FFLAS::FFLAS_DIAG  Diag,
const size_t  M,
const size_t  N,
typename Field::ConstElement_ptr  A,
const size_t  lda,
typename Field::Element_ptr  X,
const size_t  ldx,
typename Field::Element_ptr  u,
const size_t  incu,
size_t *  P,
bool  computeX,
const FFPACK_MINPOLY_TAG  MinTag = FfpackDense,
const size_t  kg_mc = 0,
const size_t  kg_mb = 0,
const size_t  kg_j = 0 
)

◆ GaussJordan()

size_t GaussJordan ( const Field F,
const size_t  M,
const size_t  N,
typename Field::Element_ptr  A,
const size_t  lda,
const size_t  colbeg,
const size_t  rowbeg,
const size_t  colsize,
size_t *  P,
size_t *  Q,
const FFPACK::FFPACK_LU_TAG  LuTag 
)
inline

Gauss-Jordan algorithm computing the Reduced Row echelon form and its transform matrix.

Bibliography:
  • Algorithm 2.8 of A. Storjohann Thesis 2000,
  • Algorithm 11 of Jeannerod C-P., Pernet, C. and Storjohann, A. Rank-profile revealing Gaussian elimination and the CUP matrix decomposition , J. of Symbolic Comp., 2013
Parameters
Mrow dimension of A
Ncolumn dimension of A
[in,out]Aan m x n matrix
ldaleading dimension of A
Prow permutation
Qcolumn permutation
LuTagset the base case to a Tile (FfpackGaussJordanTile) or Slab (FfpackGaussJordanSlab) recursive RedEchelon

| I | A11 | A12 | | |-—|--—|--—|-—| | |I | *| A22 | | | |0 | 0| A22 | | |-—|--—|--—|-—| | | 0 | A32 | | |-—|--—|--—|-—|

where the transformation matrix is stored at the pivot column position

◆ KellerGehrig()

std::list< Polynomial > & KellerGehrig ( const Field F,
std::list< Polynomial > &  charp,
const size_t  N,
typename Field::ConstElement_ptr  A,
const size_t  lda 
)

◆ KGFast()

int KGFast ( const Field F,
std::list< Polynomial > &  charp,
const size_t  N,
typename Field::Element_ptr  A,
const size_t  lda,
size_t *  kg_mc,
size_t *  kg_mb,
size_t *  kg_j 
)

◆ KGFast_generalized()

std::list< Polynomial > & KGFast_generalized ( const Field F,
std::list< Polynomial > &  charp,
const size_t  N,
typename Field::Element_ptr  A,
const size_t  lda 
)

◆ fgemv_kgf()

void fgemv_kgf ( const Field F,
const size_t  N,
typename Field::ConstElement_ptr  A,
const size_t  lda,
typename Field::ConstElement_ptr  X,
const size_t  incX,
typename Field::Element_ptr  Y,
const size_t  incY,
const size_t  kg_mc,
const size_t  kg_mb,
const size_t  kg_j 
)

◆ LUKrylov()

std::list< Polynomial > & LUKrylov ( const Field F,
std::list< Polynomial > &  charp,
const size_t  N,
typename Field::Element_ptr  A,
const size_t  lda,
typename Field::Element_ptr  U,
const size_t  ldu,
RandIter &  G 
)

◆ Danilevski()

std::list< Polynomial > & Danilevski ( const Field F,
std::list< Polynomial > &  charp,
const size_t  N,
typename Field::Element_ptr  A,
const size_t  lda 
)

◆ RandomKrylovPrecond()

void RandomKrylovPrecond ( const PolRing &  PR,
std::list< typename PolRing::Element > &  completedFactors,
const size_t  N,
typename PolRing::Domain_t::Element_ptr  A,
const size_t  lda,
size_t &  Nb,
typename PolRing::Domain_t::Element_ptr B,
size_t &  ldb,
typename PolRing::Domain_t::RandIter &  g,
const size_t  degree = __FFLASFFPACK_ARITHPROG_THRESHOLD 
)
inline
Todo:
swap to save space ??
Todo:
Todo:
don't assing K2 c*noc x N but only mas (c,noc) x N and store each one after the other
Todo:
swap to save space ??
Todo:
Todo:
don't assing K2 c*noc x N but only mas (c,noc) x N and store each one after the other

◆ ArithProg()

std::list< typename PolRing::Element > & ArithProg ( const PolRing &  PR,
std::list< typename PolRing::Element > &  frobeniusForm,
const size_t  N,
typename PolRing::Domain_t::Element_ptr  A,
const size_t  lda,
const size_t  degree 
)
inline

◆ LUKrylov_KGFast()

std::list< Polynomial > & LUKrylov_KGFast ( const Field F,
std::list< Polynomial > &  charp,
const size_t  N,
typename Field::Element_ptr  A,
const size_t  lda,
typename Field::Element_ptr  X,
const size_t  ldx 
)

◆ MatVecMinPoly()

Polynomial & MatVecMinPoly ( const Field F,
Polynomial &  minP,
const size_t  N,
typename Field::ConstElement_ptr  A,
const size_t  lda,
typename Field::Element_ptr  v,
const size_t  incv,
typename Field::Element_ptr  K,
const size_t  ldk,
size_t *  P 
)
inline

◆ Hybrid_KGF_LUK_MinPoly()

Polynomial & Hybrid_KGF_LUK_MinPoly ( const Field F,
Polynomial &  minP,
const size_t  N,
typename Field::ConstElement_ptr  A,
const size_t  lda,
typename Field::Element_ptr  X,
const size_t  ldx,
size_t *  P,
const FFPACK_MINPOLY_TAG  MinTag = FFPACK::FfpackDense,
const size_t  kg_mc = 0,
const size_t  kg_mb = 0,
const size_t  kg_j = 0 
)

◆ updateD()

size_t updateD ( const Field F,
size_t *  d,
size_t  k,
std::vector< std::vector< typename Field::Element > > &  minpt 
)

◆ newD()

size_t newD ( const Field F,
size_t *  d,
bool &  KeepOn,
const size_t  l,
const size_t  N,
typename Field::Element_ptr  X,
const size_t *  Q,
std::vector< std::vector< typename Field::Element > > &  minpt 
)

◆ CompressRows()

void CompressRows ( Field F,
const size_t  M,
typename Field::Element_ptr  A,
const size_t  lda,
typename Field::Element_ptr  tmp,
const size_t  ldtmp,
const size_t *  d,
const size_t  nb_blocs 
)
inline

◆ CompressRowsQK()

void CompressRowsQK ( Field F,
const size_t  M,
typename Field::Element_ptr  A,
const size_t  lda,
typename Field::Element_ptr  tmp,
const size_t  ldtmp,
const size_t *  d,
const size_t  deg,
const size_t  nb_blocs 
)
inline

◆ DeCompressRows()

void DeCompressRows ( Field F,
const size_t  M,
const size_t  N,
typename Field::Element_ptr  A,
const size_t  lda,
typename Field::Element_ptr  tmp,
const size_t  ldtmp,
const size_t *  d,
const size_t  nb_blocs 
)
inline

◆ DeCompressRowsQK()

void DeCompressRowsQK ( Field F,
const size_t  M,
const size_t  N,
typename Field::Element_ptr  A,
const size_t  lda,
typename Field::Element_ptr  tmp,
const size_t  ldtmp,
const size_t *  d,
const size_t  deg,
const size_t  nb_blocs 
)
inline

◆ CompressRowsQA()

void CompressRowsQA ( Field F,
const size_t  M,
typename Field::Element_ptr  A,
const size_t  lda,
typename Field::Element_ptr  tmp,
const size_t  ldtmp,
const size_t *  d,
const size_t  nb_blocs 
)
inline

◆ DeCompressRowsQA()

void DeCompressRowsQA ( Field F,
const size_t  M,
const size_t  N,
typename Field::Element_ptr  A,
const size_t  lda,
typename Field::Element_ptr  tmp,
const size_t  ldtmp,
const size_t *  d,
const size_t  nb_blocs 
)
inline

◆ LUdivine_construct() [2/2]

size_t LUdivine_construct ( const Field F,
const FFLAS::FFLAS_DIAG  Diag,
const size_t  M,
const size_t  N,
typename Field::ConstElement_ptr  A,
const size_t  lda,
typename Field::Element_ptr  X,
const size_t  ldx,
typename Field::Element_ptr  u,
const size_t  incu,
size_t *  P,
bool  computeX,
const FFPACK::FFPACK_MINPOLY_TAG  MinTag,
const size_t  kg_mc,
const size_t  kg_mb,
const size_t  kg_j 
)