FflasFfpack
|
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 : ![]() | |
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 ![]() | |
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 : ![]() | |
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 : ![]() | |
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 ![]() | |
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: ![]() | |
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 : ![]() | |
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 : ![]() | |
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 ![]() | |
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 : ![]() ![]() | |
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 ![]() | |
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... | |
FFLAS: Finite Field Linear Algebra Subroutines.
enum FFLAS_TRANSPOSE |
enum FFLAS_UPLO |
enum FFLAS_DIAG |
enum FFLAS_SIDE |
enum FFLAS_BASE |
void FFLAS::fzero | ( | const Field & | F, |
const size_t | n, | ||
typename Field::Element * | X, | ||
const size_t | incX | ||
) |
fzero : .
F | field |
n | number of elements to zero |
X | vector in F |
incX | stride 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 .
F | field |
n | size of the vectors |
alpha | homotéti scalar |
X | vector in F |
incX | stride of X |
|
inline |
fcopy : .
X is preallocated
F | field | |
N | size of the vectors | |
[out] | X | vector in F |
incX | stride of X | |
[in] | Y | vector in F |
incY | stride of Y |
|
inline |
faxpy : .
F | field |
N | size of the vectors |
alpha | scalar |
X | vector in F |
incX | stride of X |
Y | vector in F |
incY | stride of Y |
|
inline |
fdot: dot product .
F | field |
N | size of the vectors |
X | vector in F |
incX | stride of X |
Y | vector in F |
incY | stride 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: .
F | field |
N | size of the vectors |
X | vector in F |
incX | stride of X |
Y | vector in F |
incY | stride 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 : .
F | field |
m | number of rows to copy |
n | number of cols to copy |
A | matrix in F |
lda | stride of A |
B | vector in F |
ldb | stride 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 : .
F | field |
m | number of rows to zero |
n | number of cols to zero |
A | matrix in F |
lda | stride of A |
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 .
F | field |
m | number of rows |
n | number of cols |
alpha | homotecie scalar |
A | matrix in F |
lda | stride 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 : and
.
F | field |
m | number of rows to copy |
n | number of cols to copy |
A | matrix in F |
lda | stride of A |
B | vector in F |
ldb | stride 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
.
F | field |
M | rows |
N | cols |
A | dense matrix of size MxN |
lda | leading dimension of A |
B | dense matrix of size MxN |
ldb | leading dimension of B |
C | dense matrix of size MxN |
ldc | leading 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
.
F | field |
M | rows |
N | cols |
A | dense matrix of size MxN |
lda | leading dimension of A |
B | dense matrix of size MxN |
ldb | leading dimension of B |
C | dense matrix of size MxN |
ldc | leading dimension of C |
|
inline |
finite prime Field GEneral Matrix Vector multiplication.
Computes .
F | field | |
TransA | if TransA==FflasTrans then ![]() | |
M | rows | |
N | cols | |
alpha | scalar | |
A | dense matrix of size MxN | |
lda | leading dimension of A | |
X | dense vector of size N | |
incX | stride of X | |
beta | scalar | |
[out] | Y | dense vector of size M |
incY | stride of Y |
|
inline |
fger: GEneral ?
Computes
F | field | |
M | rows | |
N | cols | |
alpha | scalar | |
[in,out] | A | dense matrix of size MxN and leading dimension lda |
lda | leading dimension of A | |
x | dense vector of size M | |
incx | stride of X | |
y | dense vector of size N | |
incy | stride of Y |
|
inline |
ftrsv: TRiangular System solve with Vector Computes
F | field |
X | vector of size N on a field F |
incX | stride of X |
A | a matrix of leading dimension lda and size N |
lda | leading dimension of A |
N | number of rows or columns of A according to TransA |
TransA | if TransA==FflasTrans then ![]() |
Diag | if Diag==FflasUnit then A is unit. |
Uplo | if Uplo==FflasUpper then A is upper triangular |
|
inline |
ftrsm: TRiangular System solve with Matrix.
Computes or
.
F | field |
Side | if Side==FflasLeft then ![]() |
Uplo | if Uplo==FflasUpper then A is upper triangular |
TransA | if TransA==FflasTrans then ![]() |
Diag | if Diag==FflasUnit then A is unit. |
M | rows of B |
N | cols of B |
alpha | scalar |
A | triangular invertible matrix. If Side==FflasLeft then A is ![]() A is ![]() |
lda | leading dim of A |
B | matrix of size MxN |
ldb | leading dim of B |
unsafe with Trans==FflasTrans
(debugging in progress)
must be non zero.
|
inline |
ftrmm: TRiangular Matrix Multiply.
Computes or
.
F | field |
Side | if Side==FflasLeft then ![]() |
Uplo | if Uplo==FflasUpper then A is upper triangular |
TransA | if TransA==FflasTrans then ![]() |
Diag | if Diag==FflasUnit then A is implicitly unit. |
M | rows of B |
N | cols of B |
alpha | scalar |
A | triangular matrix. If Side==FflasLeft then A is ![]() A is ![]() |
lda | leading dim of A |
B | matrix of size MxN |
ldb | leading dim of B |
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
F | field. |
ta | if ta==FflasTrans then ![]() ![]() |
tb | same for B |
m | see A |
k | see A |
n | see B |
alpha | scalar |
beta | scalar |
A | ![]() ![]() |
B | ![]() ![]() |
C | ![]() ![]() |
lda | leading dimension of A |
ldb | leading dimension of B |
ldc | leading dimension of C |
w | recursive levels of Winograd's algorithm are used |
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 . Automatically set Winograd recursion level
F | field. |
ta | if ta==FflasTrans then ![]() ![]() |
tb | same for matrix B |
m | see A |
k | see A |
n | see B |
alpha | scalar |
beta | scalar |
A | ![]() ![]() |
B | ![]() ![]() |
C | ![]() ![]() |
lda | leading dimension of A |
ldb | leading dimension of B |
ldc | leading dimension of C |
|
inline |
fsquare: Squares a matrix.
compute over a Field
F
Avoid the conversion of B
ta | if ta==FflasTrans , ![]() |
F | field |
n | size of A |
alpha | scalar |
beta | scalar |
A | dense matrix of size nxn |
lda | leading dimension of A |
C | dense matrix of size nxn |
ldc | leading dimension of C |
|
inline |
faddm.
A <- A+op(B) with op(B) = B or B^T
|
inline |
faddm.
C <- op(A)+op(B) with op(B) = B or B^T
|
inline |
fsubm.
A <- A-op(B) with op(B) = B or B^T
|
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.
F | field |
M | rows of A |
N | cols of A |
A | matrix to be copied |
lda | leading dimension of A |
C
of A
with stride N
A
and C
belong to the same field.
|
inline |
Computes the number of recursive levels to perform.
WinoSteps computes the number of recursive levels to perform.
m | the common dimension in the product AxB |