FflasFfpack
Enumerations | Functions
FFLAS Namespace Reference

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

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
 
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
 
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::Element * 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. More...
 
template<class Field >
Field::Element * 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. More...
 
template<class Field >
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)
 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::Element * 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. More...
 
size_t WinoSteps (const size_t m)
 Computes the number of recursive levels to perform. More...
 

Detailed Description

FFLAS: Finite Field Linear Algebra Subroutines.

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
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 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