FflasFfpack
Namespaces | Typedefs | Enumerations | Functions
FFLAS Namespace Reference

FFLAS: Finite Field Linear Algebra Subroutines. More...

Namespaces

namespace  Protected
 

Typedefs

typedef
FFPACK::UnparametricField
< float > 
FloatDomain
 
typedef
FFPACK::UnparametricField
< double > 
DoubleDomain
 

Enumerations

enum  FFLAS_TRANSPOSE { FflasNoTrans =111, FflasTrans =112 }
 Is matrix transposed ? More...
 
enum  FFLAS_UPLO { FflasUpper =121, FflasLower =122 }
 Is triangular matrix's shape upper ? More...
 
enum  FFLAS_DIAG { FflasNonUnit =131, FflasUnit =132 }
 Is Matrix diagonal implicit ? More...
 
enum  FFLAS_SIDE { FflasLeft = 141, FflasRight = 142 }
 On what side ? More...
 
enum  FFLAS_BASE { FflasDouble = 151, FflasFloat = 152, FflasGeneric = 153 }
 FFLAS_BASE determines the type of the element representation for Matrix Mult kernel. More...
 

Functions

template<class Field >
void fzero (const Field &F, const size_t n, typename Field::Element *X, const size_t incX)
 fzero : $A \gets 0 $. More...
 
template<class Field >
void fscal (const Field &F, const size_t n, const typename Field::Element alpha, typename Field::Element *X, const size_t incX)
 fscal $x \gets a \cdot x$. More...
 
template<class Field >
void fcopy (const Field &F, const size_t N, typename Field::Element *X, const size_t incX, const typename Field::Element *Y, const size_t incY)
 fcopy : $x \gets y $. More...
 
template<class Field >
void faxpy (const Field &F, const size_t N, const typename Field::Element alpha, const typename Field::Element *X, const size_t incX, typename Field::Element *Y, const size_t incY)
 faxpy : $y \gets \alpha \cdot x + y$. More...
 
template<class Field >
Field::Element fdot (const Field &F, const size_t N, const typename Field::Element *X, const size_t incX, const typename Field::Element *Y, const size_t incY)
 fdot: dot product $x^T y$. More...
 
template<class Field >
void fswap (const Field &F, const size_t N, typename Field::Element *X, const size_t incX, typename Field::Element *Y, const size_t incY)
 fswap: $ X \leftrightarrow Y$. More...
 
template<class Field >
void fcopy (const Field &F, const size_t m, const size_t n, typename Field::Element *A, const size_t lda, const typename Field::Element *B, const size_t ldb)
 fcopy : $A \gets B $. More...
 
template<class Field >
void fzero (const Field &F, const size_t m, const size_t n, typename Field::Element *A, const size_t lda)
 fzero : $A \gets 0 $. More...
 
template<class Field >
void fscal (const Field &F, const size_t m, const size_t n, const typename Field::Element alpha, typename Field::Element *A, const size_t lda)
 fscal $A \gets a \cdot A$. More...
 
template<class Field >
void fmove (const Field &F, const size_t m, const size_t n, typename Field::Element *A, const size_t lda, typename Field::Element *B, const size_t ldb)
 fmove : $A \gets B $ and $ B \gets 0$. More...
 
template<class Field >
void fadd (const Field &F, const size_t M, const size_t N, const typename Field::Element *A, const size_t lda, const typename Field::Element *B, const size_t ldb, typename Field::Element *C, const size_t ldc)
 fadd : matrix addition. More...
 
template<class Field >
void fsub (const Field &F, const size_t M, const size_t N, const typename Field::Element *A, const size_t lda, const typename Field::Element *B, const size_t ldb, typename Field::Element *C, const size_t ldc)
 fsub : matrix subtraction. More...
 
template<class Field >
void fsubin (const Field &F, const size_t M, const size_t N, const typename Field::Element *B, const size_t ldb, typename Field::Element *C, const size_t ldc)
 fsubin More...
 
template<class Field >
void faddin (const Field &F, const size_t M, const size_t N, const typename Field::Element *B, const size_t ldb, typename Field::Element *C, const size_t ldc)
 faddin More...
 
template<class Field >
void fgemv (const Field &F, const FFLAS_TRANSPOSE TransA, const size_t M, const size_t N, const typename Field::Element alpha, const typename Field::Element *A, const size_t lda, const typename Field::Element *X, const size_t incX, const typename Field::Element beta, typename Field::Element *Y, const size_t incY)
 finite prime Field GEneral Matrix Vector multiplication. More...
 
template<class Field >
void fger (const Field &F, const size_t M, const size_t N, const typename Field::Element alpha, const typename Field::Element *x, const size_t incx, const typename Field::Element *y, const size_t incy, typename Field::Element *A, const size_t lda)
 fger: GEneral ? More...
 
template<class Field >
void ftrsv (const Field &F, const FFLAS_UPLO Uplo, const FFLAS_TRANSPOSE TransA, const FFLAS_DIAG Diag, const size_t N, const typename Field::Element *A, const size_t lda, typename Field::Element *X, int incX)
 ftrsv: TRiangular System solve with Vector Computes $ X \gets \mathrm{op}(A^{-1}) X$ More...
 
template<class Field >
void ftrsm (const Field &F, const FFLAS_SIDE Side, const FFLAS_UPLO Uplo, const FFLAS_TRANSPOSE TransA, const FFLAS_DIAG Diag, const size_t M, const size_t N, const typename Field::Element alpha, typename Field::Element *A, const size_t lda, typename Field::Element *B, const size_t ldb)
 ftrsm: TRiangular System solve with Matrix. More...
 
template<class Field >
void ftrmm (const Field &F, const FFLAS_SIDE Side, const FFLAS_UPLO Uplo, const FFLAS_TRANSPOSE TransA, const FFLAS_DIAG Diag, const size_t M, const size_t N, const typename Field::Element alpha, typename Field::Element *A, const size_t lda, typename Field::Element *B, const size_t ldb)
 ftrmm: TRiangular Matrix Multiply. More...
 
template<class Field >
Field::Elementfgemm (const Field &F, const FFLAS_TRANSPOSE ta, const FFLAS_TRANSPOSE tb, const size_t m, const size_t n, const size_t k, const typename Field::Element alpha, const typename Field::Element *A, const size_t lda, const typename Field::Element *B, const size_t ldb, const typename Field::Element beta, typename Field::Element *C, const size_t ldc, const size_t w)
 fgemm: Field GEneral Matrix Multiply. More...
 
template<class Field >
Field::Elementfgemm (const Field &F, const FFLAS_TRANSPOSE ta, const FFLAS_TRANSPOSE tb, const size_t m, const size_t n, const size_t k, const typename Field::Element alpha, const typename Field::Element *A, const size_t lda, const typename Field::Element *B, const size_t ldb, const typename Field::Element beta, typename Field::Element *C, const size_t ldc)
 fgemm: Field GEneral Matrix Multiply. More...
 
template<class Field >
Field::Elementfsquare (const Field &F, const FFLAS_TRANSPOSE ta, const size_t n, const typename Field::Element alpha, const typename Field::Element *A, const size_t lda, const typename Field::Element beta, typename Field::Element *C, const size_t ldc)
 fsquare: Squares a matrix. More...
 
template<class Field >
void faddm (const Field &F, const FFLAS_TRANSPOSE transA, const size_t M, const size_t N, const typename Field::Element *A, const size_t lda, typename Field::Element *B, const size_t ldb)
 faddm. More...
 
template<class Field >
void faddm (const Field &F, const FFLAS_TRANSPOSE transA, const FFLAS_TRANSPOSE transB, const size_t M, const size_t N, const typename Field::Element *A, const size_t lda, const typename Field::Element *B, const size_t ldb, typename Field::Element *C, const size_t ldc)
 faddm. More...
 
template<class Field >
void fsubm (const Field &F, const FFLAS_TRANSPOSE transA, const size_t M, const size_t N, const typename Field::Element *A, const size_t lda, typename Field::Element *B, const size_t ldb)
 fsubm. More...
 
template<class Field >
void fsubm (const Field &F, const FFLAS_TRANSPOSE transA, const FFLAS_TRANSPOSE transB, const size_t M, const size_t N, const typename Field::Element *A, const size_t lda, const typename Field::Element *B, const size_t ldb, typename Field::Element *C, const size_t ldc)
 fsubm. More...
 
template<class Field >
Field::ElementMatCopy (const Field &F, const size_t M, const size_t N, const typename Field::Element *A, const size_t lda)
 MatCopy makes a copy of the matrix M into a new allocated space. More...
 
size_t WinoSteps (const size_t m)
 Computes the number of recursive levels to perform. More...
 
template<>
void faxpy (const DoubleDomain &, const size_t N, const DoubleDomain::Element a, const DoubleDomain::Element *x, const size_t incx, DoubleDomain::Element *y, const size_t incy)
 
template<>
DoubleDomain::Element fdot (const DoubleDomain &, const size_t N, const DoubleDomain::Element *x, const size_t incx, const DoubleDomain::Element *y, const size_t incy)
 
template<>
double * fgemm< FFPACK::UnparametricField< double > > (const FFPACK::UnparametricField< double > &F, const FFLAS_TRANSPOSE ta, const FFLAS_TRANSPOSE tb, const size_t m, const size_t n, const size_t k, const double alpha, const double *A, const size_t lda, const double *B, const size_t ldb, const double beta, double *C, const size_t ldc, const size_t w)
 
template<>
float * fgemm< FFPACK::UnparametricField< float > > (const FFPACK::UnparametricField< float > &F, const FFLAS_TRANSPOSE ta, const FFLAS_TRANSPOSE tb, const size_t m, const size_t n, const size_t k, const float alpha, const float *A, const size_t lda, const float *B, const size_t ldb, const float beta, float *C, const size_t ldc, const size_t w)
 
template<>
double * fgemm< FFPACK::UnparametricField< double > > (const FFPACK::UnparametricField< double > &F, const FFLAS_TRANSPOSE ta, const FFLAS_TRANSPOSE tb, const size_t m, const size_t n, const size_t k, const double alpha, const double *A, const size_t lda, const double *B, const size_t ldb, const double beta, double *C, const size_t ldc)
 
template<>
float * fgemm< FFPACK::UnparametricField< float > > (const FFPACK::UnparametricField< float > &F, const FFLAS_TRANSPOSE ta, const FFLAS_TRANSPOSE tb, const size_t m, const size_t n, const size_t k, const float alpha, const float *A, const size_t lda, const float *B, const size_t ldb, const float beta, float *C, const size_t ldc)
 
template<>
double * fsquare (const FFPACK::ModularBalanced< double > &F, const FFLAS_TRANSPOSE ta, const size_t n, const double alpha, const double *A, const size_t lda, const double beta, double *C, const size_t ldc)
 
template<>
float * fsquare (const FFPACK::ModularBalanced< float > &F, const FFLAS_TRANSPOSE ta, const size_t n, const float alpha, const float *A, const size_t lda, const float beta, float *C, const size_t ldc)
 
template<>
double * fsquare (const FFPACK::Modular< double > &F, const FFLAS_TRANSPOSE ta, const size_t n, const double alpha, const double *A, const size_t lda, const double beta, double *C, const size_t ldc)
 
template<>
float * fsquare (const FFPACK::Modular< float > &F, const FFLAS_TRANSPOSE ta, const size_t n, const float alpha, const float *A, const size_t lda, const float beta, float *C, const size_t ldc)
 
template<>
void fgemv (const DoubleDomain &, const FFLAS_TRANSPOSE TransA, const size_t M, const size_t N, const DoubleDomain::Element alpha, const DoubleDomain::Element *A, const size_t lda, const DoubleDomain::Element *X, const size_t incX, const DoubleDomain::Element beta, DoubleDomain::Element *Y, const size_t incY)
 
template<>
void fgemv (const FloatDomain &, const FFLAS_TRANSPOSE TransA, const size_t M, const size_t N, const FloatDomain::Element alpha, const FloatDomain::Element *A, const size_t lda, const FloatDomain::Element *X, const size_t incX, const FloatDomain::Element beta, FloatDomain::Element *Y, const size_t incY)
 
template<>
void fger (const DoubleDomain &, const size_t M, const size_t N, const DoubleDomain::Element alpha, const DoubleDomain::Element *x, const size_t incx, const DoubleDomain::Element *y, const size_t incy, DoubleDomain::Element *A, const size_t lda)
 
void parseArguments (int argc, char **argv, Argument *args, bool printDefaults=true)
 

Detailed Description

FFLAS: Finite Field Linear Algebra Subroutines.

Typedef Documentation

Enumeration Type Documentation

Is matrix transposed ?

Enumerator
FflasNoTrans 

Matrix is not transposed.

FflasTrans 

Matrix is transposed.

enum FFLAS_UPLO

Is triangular matrix's shape upper ?

Enumerator
FflasUpper 

Triangular matrix is Upper triangular (if $i>j$ then $T_{i,j} = 0$)

FflasLower 

Triangular matrix is Lower triangular (if $i<j$ then $T_{i,j} = 0$)

enum FFLAS_DIAG

Is Matrix diagonal implicit ?

Enumerator
FflasNonUnit 

Triangular matrix has an explicit general diagonal.

FflasUnit 

Triangular matrix has an implicit unit diagonal ( $T_{i,i} = 1$)

enum FFLAS_SIDE

On what side ?

Enumerator
FflasLeft 

Operator applied on the left.

FflasRight 

Operator applied on the rigth.

enum FFLAS_BASE

FFLAS_BASE determines the type of the element representation for Matrix Mult kernel.

Enumerator
FflasDouble 

to use the double precision BLAS

FflasFloat 

to use the single precison BLAS

FflasGeneric 

for any other domain, that can not be converted to floating point integers

Function Documentation

void FFLAS::fzero ( const Field F,
const size_t  n,
typename Field::Element X,
const size_t  incX 
)

fzero : $A \gets 0 $.

Parameters
Ffield
nnumber of elements to zero
Xvector in F
incXstride of X
void FFLAS::fscal ( const Field F,
const size_t  n,
const typename Field::Element  alpha,
typename Field::Element X,
const size_t  incX 
)

fscal $x \gets a \cdot x$.

Parameters
Ffield
nsize of the vectors
alphahomotéti scalar
Xvector in F
incXstride of X
Bug:
use cblas_(d)scal when possible
Todo:
check if comparison with +/-1,0 is necessary.
void fcopy ( const Field F,
const size_t  N,
typename Field::Element X,
const size_t  incX,
const typename Field::Element Y,
const size_t  incY 
)
inline

fcopy : $x \gets y $.

X is preallocated

Parameters
Ffield
Nsize of the vectors
[out]Xvector in F
incXstride of X
[in]Yvector in F
incYstride of Y
void faxpy ( const Field F,
const size_t  N,
const typename Field::Element  alpha,
const typename Field::Element X,
const size_t  incX,
typename Field::Element Y,
const size_t  incY 
)
inline

faxpy : $y \gets \alpha \cdot x + y$.

Parameters
Ffield
Nsize of the vectors
alphascalar
Xvector in F
incXstride of X
Yvector in F
incYstride of Y
Field::Element fdot ( const Field F,
const size_t  N,
const typename Field::Element X,
const size_t  incX,
const typename Field::Element Y,
const size_t  incY 
)
inline

fdot: dot product $x^T y$.

Parameters
Ffield
Nsize of the vectors
Xvector in F
incXstride of X
Yvector in F
incYstride of Y
void FFLAS::fswap ( const Field F,
const size_t  N,
typename Field::Element X,
const size_t  incX,
typename Field::Element Y,
const size_t  incY 
)

fswap: $ X \leftrightarrow Y$.

Parameters
Ffield
Nsize of the vectors
Xvector in F
incXstride of X
Yvector in F
incYstride of Y
void fcopy ( const Field F,
const size_t  m,
const size_t  n,
typename Field::Element A,
const size_t  lda,
const typename Field::Element B,
const size_t  ldb 
)

fcopy : $A \gets B $.

Parameters
Ffield
mnumber of rows to copy
nnumber of cols to copy
Amatrix in F
ldastride of A
Bvector in F
ldbstride of B
void FFLAS::fzero ( const Field F,
const size_t  m,
const size_t  n,
typename Field::Element A,
const size_t  lda 
)

fzero : $A \gets 0 $.

Parameters
Ffield
mnumber of rows to zero
nnumber of cols to zero
Amatrix in F
ldastride of A
Warning
may be buggy if Element is larger than int
void FFLAS::fscal ( const Field F,
const size_t  m,
const size_t  n,
const typename Field::Element  alpha,
typename Field::Element A,
const size_t  lda 
)

fscal $A \gets a \cdot A$.

Parameters
Ffield
mnumber of rows
nnumber of cols
alphahomotecie scalar
Amatrix in F
ldastride of A
void FFLAS::fmove ( const Field F,
const size_t  m,
const size_t  n,
typename Field::Element A,
const size_t  lda,
typename Field::Element B,
const size_t  ldb 
)

fmove : $A \gets B $ and $ B \gets 0$.

Parameters
Ffield
mnumber of rows to copy
nnumber of cols to copy
Amatrix in F
ldastride of A
Bvector in F
ldbstride of B
void FFLAS::fadd ( const Field F,
const size_t  M,
const size_t  N,
const typename Field::Element A,
const size_t  lda,
const typename Field::Element B,
const size_t  ldb,
typename Field::Element C,
const size_t  ldc 
)

fadd : matrix addition.

Computes C = A + B.

Parameters
Ffield
Mrows
Ncols
Adense matrix of size MxN
ldaleading dimension of A
Bdense matrix of size MxN
ldbleading dimension of B
Cdense matrix of size MxN
ldcleading dimension of C
void FFLAS::fsub ( const Field F,
const size_t  M,
const size_t  N,
const typename Field::Element A,
const size_t  lda,
const typename Field::Element B,
const size_t  ldb,
typename Field::Element C,
const size_t  ldc 
)

fsub : matrix subtraction.

Computes C = A - B.

Parameters
Ffield
Mrows
Ncols
Adense matrix of size MxN
ldaleading dimension of A
Bdense matrix of size MxN
ldbleading dimension of B
Cdense matrix of size MxN
ldcleading dimension of C
void FFLAS::fsubin ( const Field F,
const size_t  M,
const size_t  N,
const typename Field::Element B,
const size_t  ldb,
typename Field::Element C,
const size_t  ldc 
)

fsubin

void FFLAS::faddin ( const Field F,
const size_t  M,
const size_t  N,
const typename Field::Element B,
const size_t  ldb,
typename Field::Element C,
const size_t  ldc 
)

faddin

void fgemv ( const Field F,
const FFLAS_TRANSPOSE  TransA,
const size_t  M,
const size_t  N,
const typename Field::Element  alpha,
const typename Field::Element A,
const size_t  lda,
const typename Field::Element X,
const size_t  incX,
const typename Field::Element  beta,
typename Field::Element Y,
const size_t  incY 
)
inline

finite prime Field GEneral Matrix Vector multiplication.

Computes $Y \gets \alpha \mathrm{op}(A) X + \beta Y $.

Parameters
Ffield
TransAif TransA==FflasTrans then $\mathrm{op}(A)=A^t$.
Mrows
Ncols
alphascalar
Adense matrix of size MxN
ldaleading dimension of A
Xdense vector of size N
incXstride of X
betascalar
[out]Ydense vector of size M
incYstride of Y
void fger ( const Field F,
const size_t  M,
const size_t  N,
const typename Field::Element  alpha,
const typename Field::Element x,
const size_t  incx,
const typename Field::Element y,
const size_t  incy,
typename Field::Element A,
const size_t  lda 
)
inline

fger: GEneral ?

Computes $A \gets \alpha x . y^T + A$

Parameters
Ffield
Mrows
Ncols
alphascalar
[in,out]Adense matrix of size MxN and leading dimension lda
ldaleading dimension of A
xdense vector of size M
incxstride of X
ydense vector of size N
incystride of Y
void ftrsv ( const Field F,
const FFLAS_UPLO  Uplo,
const FFLAS_TRANSPOSE  TransA,
const FFLAS_DIAG  Diag,
const size_t  N,
const typename Field::Element A,
const size_t  lda,
typename Field::Element X,
int  incX 
)
inline

ftrsv: TRiangular System solve with Vector Computes $ X \gets \mathrm{op}(A^{-1}) X$

Parameters
Ffield
Xvector of size N on a field F
incXstride of X
Aa matrix of leading dimension lda and size N
ldaleading dimension of A
Nnumber of rows or columns of A according to TransA
TransAif TransA==FflasTrans then $\mathrm{op}(A)=A^t$.
Diagif Diag==FflasUnit then A is unit.
Uploif Uplo==FflasUpper then A is upper triangular
void ftrsm ( const Field F,
const FFLAS_SIDE  Side,
const FFLAS_UPLO  Uplo,
const FFLAS_TRANSPOSE  TransA,
const FFLAS_DIAG  Diag,
const size_t  M,
const size_t  N,
const typename Field::Element  alpha,
typename Field::Element A,
const size_t  lda,
typename Field::Element B,
const size_t  ldb 
)
inline

ftrsm: TRiangular System solve with Matrix.

Computes $ B \gets \alpha \mathrm{op}(A^{-1}) B$ or $B \gets \alpha B \mathrm{op}(A^{-1})$.

Parameters
Ffield
Sideif Side==FflasLeft then $ B \gets \alpha \mathrm{op}(A^{-1}) B$ is computed.
Uploif Uplo==FflasUpper then A is upper triangular
TransAif TransA==FflasTrans then $\mathrm{op}(A)=A^t$.
Diagif Diag==FflasUnit then A is unit.
Mrows of B
Ncols of B
alphascalar
Atriangular invertible matrix. If Side==FflasLeft then A is $N\times N$, otherwise A is $M\times M$
ldaleading dim of A
Bmatrix of size MxN
ldbleading dim of B
Bug:

unsafe with Trans==FflasTrans (debugging in progress)

$\alpha$ must be non zero.

void ftrmm ( const Field F,
const FFLAS_SIDE  Side,
const FFLAS_UPLO  Uplo,
const FFLAS_TRANSPOSE  TransA,
const FFLAS_DIAG  Diag,
const size_t  M,
const size_t  N,
const typename Field::Element  alpha,
typename Field::Element A,
const size_t  lda,
typename Field::Element B,
const size_t  ldb 
)
inline

ftrmm: TRiangular Matrix Multiply.

Computes $ B \gets \alpha \mathrm{op}(A) B$ or $B \gets \alpha B \mathrm{op}(A)$.

Parameters
Ffield
Sideif Side==FflasLeft then $ B \gets \alpha \mathrm{op}(A) B$ is computed.
Uploif Uplo==FflasUpper then A is upper triangular
TransAif TransA==FflasTrans then $\mathrm{op}(A)=A^t$.
Diagif Diag==FflasUnit then A is implicitly unit.
Mrows of B
Ncols of B
alphascalar
Atriangular matrix. If Side==FflasLeft then A is $N\times N$, otherwise A is $M\times M$
ldaleading dim of A
Bmatrix of size MxN
ldbleading dim of B
Bug:
unsafe with Trans==FflasTrans (debugging in progress)
Field::Element* FFLAS::fgemm ( const Field F,
const FFLAS_TRANSPOSE  ta,
const FFLAS_TRANSPOSE  tb,
const size_t  m,
const size_t  n,
const size_t  k,
const typename Field::Element  alpha,
const typename Field::Element A,
const size_t  lda,
const typename Field::Element B,
const size_t  ldb,
const typename Field::Element  beta,
typename Field::Element C,
const size_t  ldc,
const size_t  w 
)

fgemm: Field GEneral Matrix Multiply.

Computes $C = \alpha \mathrm{op}(A) \times \mathrm{op}(B) + \beta C$

Parameters
Ffield.
taif ta==FflasTrans then $\mathrm{op}(A)=A^t$, else $\mathrm{op}(A)=A$,
tbsame for B
msee A
ksee A
nsee B
alphascalar
betascalar
A$\mathrm{op}(A)$ is $m \times k$
B$\mathrm{op}(B)$ is $k \times n$
C$C$ is $m \times n$
ldaleading dimension of A
ldbleading dimension of B
ldcleading dimension of C
wrecursive levels of Winograd's algorithm are used
Warning
$\alpha$ must be invertible
Field::Element* FFLAS::fgemm ( const Field F,
const FFLAS_TRANSPOSE  ta,
const FFLAS_TRANSPOSE  tb,
const size_t  m,
const size_t  n,
const size_t  k,
const typename Field::Element  alpha,
const typename Field::Element A,
const size_t  lda,
const typename Field::Element B,
const size_t  ldb,
const typename Field::Element  beta,
typename Field::Element C,
const size_t  ldc 
)

fgemm: Field GEneral Matrix Multiply.

Computes $C = \alpha \mathrm{op}(A) \mathrm{op}(B) + \beta C$. Automatically set Winograd recursion level

Parameters
Ffield.
taif ta==FflasTrans then $\mathrm{op}(A)=A^t$, else $\mathrm{op}(A)=A$,
tbsame for matrix B
msee A
ksee A
nsee B
alphascalar
betascalar
A$\mathrm{op}(A)$ is $m \times k$
B$\mathrm{op}(B)$ is $k \times n$
C$C$ is $m \times n$
ldaleading dimension of A
ldbleading dimension of B
ldcleading dimension of C
Warning
$\alpha$ must be invertible
Field::Element * fsquare ( const Field F,
const FFLAS_TRANSPOSE  ta,
const size_t  n,
const typename Field::Element  alpha,
const typename Field::Element A,
const size_t  lda,
const typename Field::Element  beta,
typename Field::Element C,
const size_t  ldc 
)
inline

fsquare: Squares a matrix.

compute $ C \gets \alpha \mathrm{op}(A) \mathrm{op}(A) + \beta C$ over a Field F Avoid the conversion of B

Parameters
taif ta==FflasTrans, $\mathrm{op}(A)=A^T$.
Ffield
nsize of A
alphascalar
betascalar
Adense matrix of size nxn
ldaleading dimension of A
Cdense matrix of size nxn
ldcleading dimension of C
void faddm ( const Field F,
const FFLAS_TRANSPOSE  transA,
const size_t  M,
const size_t  N,
const typename Field::Element A,
const size_t  lda,
typename Field::Element B,
const size_t  ldb 
)
inline

faddm.

A <- A+op(B) with op(B) = B or B^T

void faddm ( const Field F,
const FFLAS_TRANSPOSE  transA,
const FFLAS_TRANSPOSE  transB,
const size_t  M,
const size_t  N,
const typename Field::Element A,
const size_t  lda,
const typename Field::Element B,
const size_t  ldb,
typename Field::Element C,
const size_t  ldc 
)
inline

faddm.

C <- op(A)+op(B) with op(B) = B or B^T

void fsubm ( const Field F,
const FFLAS_TRANSPOSE  transA,
const size_t  M,
const size_t  N,
const typename Field::Element A,
const size_t  lda,
typename Field::Element B,
const size_t  ldb 
)
inline

fsubm.

A <- A-op(B) with op(B) = B or B^T

void fsubm ( const Field F,
const FFLAS_TRANSPOSE  transA,
const FFLAS_TRANSPOSE  transB,
const size_t  M,
const size_t  N,
const typename Field::Element A,
const size_t  lda,
const typename Field::Element B,
const size_t  ldb,
typename Field::Element C,
const size_t  ldc 
)
inline

fsubm.

C <- op(A)-op(B) with op(B) = B or B^T

Field::Element* FFLAS::MatCopy ( const Field F,
const size_t  M,
const size_t  N,
const typename Field::Element A,
const size_t  lda 
)

MatCopy makes a copy of the matrix M into a new allocated space.

Parameters
Ffield
Mrows of A
Ncols of A
Amatrix to be copied
ldaleading dimension of A
Returns
a copy C of A with stride N
Warning
A and C belong to the same field.
size_t WinoSteps ( const size_t  m)
inline

Computes the number of recursive levels to perform.

WinoSteps computes the number of recursive levels to perform.

Parameters
mthe common dimension in the product AxB
void FFLAS::faxpy ( const DoubleDomain &  ,
const size_t  N,
const DoubleDomain::Element  a,
const DoubleDomain::Element *  x,
const size_t  incx,
DoubleDomain::Element *  y,
const size_t  incy 
)
inline
DoubleDomain::Element FFLAS::fdot ( const DoubleDomain &  ,
const size_t  N,
const DoubleDomain::Element *  x,
const size_t  incx,
const DoubleDomain::Element *  y,
const size_t  incy 
)
inline
double* FFLAS::fgemm< FFPACK::UnparametricField< double > > ( const FFPACK::UnparametricField< double > &  F,
const FFLAS_TRANSPOSE  ta,
const FFLAS_TRANSPOSE  tb,
const size_t  m,
const size_t  n,
const size_t  k,
const double  alpha,
const double *  A,
const size_t  lda,
const double *  B,
const size_t  ldb,
const double  beta,
double *  C,
const size_t  ldc,
const size_t  w 
)
inline
float* FFLAS::fgemm< FFPACK::UnparametricField< float > > ( const FFPACK::UnparametricField< float > &  F,
const FFLAS_TRANSPOSE  ta,
const FFLAS_TRANSPOSE  tb,
const size_t  m,
const size_t  n,
const size_t  k,
const float  alpha,
const float *  A,
const size_t  lda,
const float *  B,
const size_t  ldb,
const float  beta,
float *  C,
const size_t  ldc,
const size_t  w 
)
inline
double* FFLAS::fgemm< FFPACK::UnparametricField< double > > ( const FFPACK::UnparametricField< double > &  F,
const FFLAS_TRANSPOSE  ta,
const FFLAS_TRANSPOSE  tb,
const size_t  m,
const size_t  n,
const size_t  k,
const double  alpha,
const double *  A,
const size_t  lda,
const double *  B,
const size_t  ldb,
const double  beta,
double *  C,
const size_t  ldc 
)
inline
float* FFLAS::fgemm< FFPACK::UnparametricField< float > > ( const FFPACK::UnparametricField< float > &  F,
const FFLAS_TRANSPOSE  ta,
const FFLAS_TRANSPOSE  tb,
const size_t  m,
const size_t  n,
const size_t  k,
const float  alpha,
const float *  A,
const size_t  lda,
const float *  B,
const size_t  ldb,
const float  beta,
float *  C,
const size_t  ldc 
)
inline
double* FFLAS::fsquare ( const FFPACK::ModularBalanced< double > &  F,
const FFLAS_TRANSPOSE  ta,
const size_t  n,
const double  alpha,
const double *  A,
const size_t  lda,
const double  beta,
double *  C,
const size_t  ldc 
)
inline
float* FFLAS::fsquare ( const FFPACK::ModularBalanced< float > &  F,
const FFLAS_TRANSPOSE  ta,
const size_t  n,
const float  alpha,
const float *  A,
const size_t  lda,
const float  beta,
float *  C,
const size_t  ldc 
)
inline
double* FFLAS::fsquare ( const FFPACK::Modular< double > &  F,
const FFLAS_TRANSPOSE  ta,
const size_t  n,
const double  alpha,
const double *  A,
const size_t  lda,
const double  beta,
double *  C,
const size_t  ldc 
)
inline
float* FFLAS::fsquare ( const FFPACK::Modular< float > &  F,
const FFLAS_TRANSPOSE  ta,
const size_t  n,
const float  alpha,
const float *  A,
const size_t  lda,
const float  beta,
float *  C,
const size_t  ldc 
)
inline
void FFLAS::fgemv ( const DoubleDomain &  ,
const FFLAS_TRANSPOSE  TransA,
const size_t  M,
const size_t  N,
const DoubleDomain::Element  alpha,
const DoubleDomain::Element *  A,
const size_t  lda,
const DoubleDomain::Element *  X,
const size_t  incX,
const DoubleDomain::Element  beta,
DoubleDomain::Element *  Y,
const size_t  incY 
)
inline
void FFLAS::fgemv ( const FloatDomain &  ,
const FFLAS_TRANSPOSE  TransA,
const size_t  M,
const size_t  N,
const FloatDomain::Element  alpha,
const FloatDomain::Element *  A,
const size_t  lda,
const FloatDomain::Element *  X,
const size_t  incX,
const FloatDomain::Element  beta,
FloatDomain::Element *  Y,
const size_t  incY 
)
inline
void FFLAS::fger ( const DoubleDomain &  ,
const size_t  M,
const size_t  N,
const DoubleDomain::Element  alpha,
const DoubleDomain::Element *  x,
const size_t  incx,
const DoubleDomain::Element *  y,
const size_t  incy,
DoubleDomain::Element *  A,
const size_t  lda 
)
inline
void parseArguments ( int  argc,
char **  argv,
Argument args,
bool  printDefaults = true 
)