FflasFfpack
Data Structures | Namespaces | Macros | Typedefs | Enumerations | Functions
fflas.h File Reference

Finite Field Linear Algebra Subroutines More...

#include <cmath>
#include <cstring>
#include "fflas-ffpack/config-blas.h"
#include "fflas-ffpack/field/unparametric.h"
#include "fflas-ffpack/field/modular-balanced.h"
#include "fflas-ffpack/field/modular-positive.h"
#include <float.h>
#include "fflas_bounds.inl"
#include "fflas_fgemm.inl"
#include "fflas_fgemv.inl"
#include "fflas_fger.inl"
#include "fflas_ftrsm.inl"
#include "fflas_ftrmm.inl"
#include "fflas_ftrsv.inl"
#include "fflas_faxpy.inl"
#include "fflas_fdot.inl"
#include "fflas_fcopy.inl"
#include "fflas_faddm.inl"

Data Structures

class  AreEqual< X, Y >
 
class  AreEqual< X, X >
 
class  ftrsmLeftUpperNoTransNonUnit< Element >
 
class  ftrsmLeftUpperNoTransUnit< Element >
 
class  ftrsmLeftUpperTransNonUnit< Element >
 
class  ftrsmLeftUpperTransUnit< Element >
 
class  ftrsmLeftLowerNoTransNonUnit< Element >
 
class  ftrsmLeftLowerNoTransUnit< Element >
 
class  ftrsmLeftLowerTransNonUnit< Element >
 
class  ftrsmLeftLowerTransUnit< Element >
 
class  ftrsmRightUpperNoTransNonUnit< Element >
 
class  ftrsmRightUpperNoTransUnit< Element >
 
class  ftrsmRightUpperTransNonUnit< Element >
 
class  ftrsmRightUpperTransUnit< Element >
 
class  ftrsmRightLowerNoTransNonUnit< Element >
 
class  ftrsmRightLowerNoTransUnit< Element >
 
class  ftrsmRightLowerTransNonUnit< Element >
 
class  ftrsmRightLowerTransUnit< Element >
 
class  ftrmmLeftUpperNoTransNonUnit< Element >
 
class  ftrmmLeftUpperNoTransUnit< Element >
 
class  ftrmmLeftUpperTransNonUnit< Element >
 
class  ftrmmLeftUpperTransUnit< Element >
 
class  ftrmmLeftLowerNoTransNonUnit< Element >
 
class  ftrmmLeftLowerNoTransUnit< Element >
 
class  ftrmmLeftLowerTransNonUnit< Element >
 
class  ftrmmLeftLowerTransUnit< Element >
 
class  ftrmmRightUpperNoTransNonUnit< Element >
 
class  ftrmmRightUpperNoTransUnit< Element >
 
class  ftrmmRightUpperTransNonUnit< Element >
 
class  ftrmmRightUpperTransUnit< Element >
 
class  ftrmmRightLowerNoTransNonUnit< Element >
 
class  ftrmmRightLowerNoTransUnit< Element >
 
class  ftrmmRightLowerTransNonUnit< Element >
 
class  ftrmmRightLowerTransUnit< Element >
 
class  faddmTrans< Element >
 
class  faddmNoTrans< Element >
 
class  fsubmTrans< Element >
 
class  fsubmNoTrans< Element >
 
class  faddmTransTrans< Element >
 
class  faddmNoTransTrans< Element >
 
class  faddmTransNoTrans< Element >
 
class  faddmNoTransNoTrans< Element >
 
class  fsubmTransTrans< Element >
 
class  fsubmNoTransTrans< Element >
 
class  fsubmTransNoTrans< Element >
 
class  fsubmNoTransNoTrans< Element >
 

Namespaces

namespace  FFLAS
 FFLAS: Finite Field Linear Algebra Subroutines.
 
namespace  FFLAS::Protected
 

Macros

#define MAX(a, b)   ((a < b)?b:a)
 
#define MIN(a, b)   ((a > b)?b:a)
 
#define WINOTHRESHOLD   __FFLASFFPACK_WINOTHRESHOLD
 
#define FLOAT_DOUBLE_THRESHOLD_0   430
 
#define FLOAT_DOUBLE_THRESHOLD_1   350
 
#define FLOAT_DOUBLE_THRESHOLD_2   175
 

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 MatF2MatD (const Field &F, DoubleDomain::Element *S, const size_t lds, const typename Field::Element *E, const size_t lde, const size_t m, const size_t n)
 
template<class Field >
void MatF2MatFl (const Field &F, FloatDomain::Element *S, const size_t lds, const typename Field::Element *E, const size_t lde, const size_t m, const size_t n)
 
template<class Field >
void MatF2MatD_Triangular (const Field &F, typename DoubleDomain::Element *S, const size_t lds, const typename Field::Element *const E, const size_t lde, const size_t m, const size_t n)
 
template<class Field >
void MatF2MatFl_Triangular (const Field &F, typename FloatDomain::Element *S, const size_t lds, const typename Field::Element *const E, const size_t lde, const size_t m, const size_t n)
 
template<class Field >
void MatD2MatF (const Field &F, typename Field::Element *S, const size_t lds, const typename DoubleDomain::Element *E, const size_t lde, const size_t m, const size_t n)
 
template<class Field >
void MatFl2MatF (const Field &F, typename Field::Element *S, const size_t lds, const typename FloatDomain::Element *E, const size_t lde, const size_t m, const size_t n)
 
template<class Field >
void MatMulParameters (const Field &F, const size_t k, const typename Field::Element &beta, size_t &delayedDim, FFLAS_BASE &base, size_t &winoRecLevel, bool winoLevelProvided=false)
 Computes the threshold parameters for the cascade Matmul algorithm. More...
 
template<class Field >
size_t DotProdBound (const Field &F, const size_t winoRecLevel, const typename Field::Element &beta, const FFLAS_BASE base)
 Computes the maximal size for delaying the modular reduction in a dotproduct. More...
 
template<class Field >
double computeFactorWino (const Field &F, const size_t w)
 Internal function for the bound computation. More...
 
template<class Field >
double computeFactorClassic (const Field &F)
 
template<class Field >
FFLAS_BASE BaseCompute (const Field &F, const size_t w)
 Determines the type of floating point representation to convert to, for BLAS computations. More...
 
template<class Field >
size_t TRSMBound (const Field &F)
 Computes the maximal size for delaying the modular reduction in a triangular system resolution. More...
 
template<class Field >
void DynamicPealing (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)
 
template<class Field >
void MatVectProd (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)
 
template<class Field >
void ClassicMatmul (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 kmax, const FFLAS_BASE base)
 
template<class Field >
void WinoCalc (const Field &F, const FFLAS_TRANSPOSE ta, const FFLAS_TRANSPOSE tb, const size_t mr, const size_t nr, const size_t kr, 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 kmax, const size_t w, const FFLAS_BASE base)
 
template<class Field >
void WinoMain (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 kmax, const size_t w, const FFLAS_BASE base)
 
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...
 

Detailed Description

Finite Field Linear Algebra Subroutines

Author
Clément Pernet.

Macro Definition Documentation

#define MAX (   a,
 
)    ((a < b)?b:a)
#define MIN (   a,
 
)    ((a > b)?b:a)
#define WINOTHRESHOLD   __FFLASFFPACK_WINOTHRESHOLD
#define FLOAT_DOUBLE_THRESHOLD_0   430
#define FLOAT_DOUBLE_THRESHOLD_1   350
#define FLOAT_DOUBLE_THRESHOLD_2   175