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 >
 
singleton  ftrsmLeftUpperNoTransNonUnit< Element >
 
singleton  ftrsmLeftUpperNoTransUnit< Element >
 
singleton  ftrsmLeftUpperTransNonUnit< Element >
 
singleton  ftrsmLeftUpperTransUnit< Element >
 
singleton  ftrsmLeftLowerNoTransNonUnit< Element >
 
singleton  ftrsmLeftLowerNoTransUnit< Element >
 
singleton  ftrsmLeftLowerTransNonUnit< Element >
 
singleton  ftrsmLeftLowerTransUnit< Element >
 
singleton  ftrsmRightUpperNoTransNonUnit< Element >
 
singleton  ftrsmRightUpperNoTransUnit< Element >
 
singleton  ftrsmRightUpperTransNonUnit< Element >
 
singleton  ftrsmRightUpperTransUnit< Element >
 
singleton  ftrsmRightLowerNoTransNonUnit< Element >
 
singleton  ftrsmRightLowerNoTransUnit< Element >
 
singleton  ftrsmRightLowerTransNonUnit< Element >
 
singleton  ftrsmRightLowerTransUnit< Element >
 
singleton  ftrmmLeftUpperNoTransNonUnit< Element >
 
singleton  ftrmmLeftUpperNoTransUnit< Element >
 
singleton  ftrmmLeftUpperTransNonUnit< Element >
 
singleton  ftrmmLeftUpperTransUnit< Element >
 
singleton  ftrmmLeftLowerNoTransNonUnit< Element >
 
singleton  ftrmmLeftLowerNoTransUnit< Element >
 
singleton  ftrmmLeftLowerTransNonUnit< Element >
 
singleton  ftrmmLeftLowerTransUnit< Element >
 
singleton  ftrmmRightUpperNoTransNonUnit< Element >
 
singleton  ftrmmRightUpperNoTransUnit< Element >
 
singleton  ftrmmRightUpperTransNonUnit< Element >
 
singleton  ftrmmRightUpperTransUnit< Element >
 
singleton  ftrmmRightLowerNoTransNonUnit< Element >
 
singleton  ftrmmRightLowerNoTransUnit< Element >
 
singleton  ftrmmRightLowerTransNonUnit< Element >
 
singleton  ftrmmRightLowerTransUnit< Element >
 
singleton  faddmTrans< Element >
 
singleton  faddmNoTrans< Element >
 
singleton  fsubmTrans< Element >
 
singleton  fsubmNoTrans< Element >
 
singleton  faddmTransTrans< Element >
 
singleton  faddmNoTransTrans< Element >
 
singleton  faddmTransNoTrans< Element >
 
singleton  faddmNoTransNoTrans< Element >
 
singleton  fsubmTransTrans< Element >
 
singleton  fsubmNoTransTrans< Element >
 
singleton  fsubmTransNoTrans< Element >
 
singleton  fsubmNoTransNoTrans< Element >
 

Namespaces

 FFLAS
 FFLAS: Finite Field Linear Algebra Subroutines.
 
 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