FflasFfpack
Data Structures | Namespaces | Defines | 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 "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 >

Namespaces

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

Defines

#define MAX(a, b)   ((a < b)?b:a)
#define MIN(a, b)   ((a > b)?b:a)
#define WINOTHRESHOLD   1000
#define FLOAT_DOUBLE_THRESHOLD_0   430
#define FLOAT_DOUBLE_THRESHOLD_1   350
#define FLOAT_DOUBLE_THRESHOLD_2   175
#define DOUBLE_MANTISSA   53
#define FLOAT_MANTISSA   24

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.
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.
template<class Field >
double computeFactorWino (const Field &F, const size_t w)
 Internal function for the bound computation.
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.
template<class Field >
size_t TRSMBound (const Field &F)
 Computes the maximal size for delaying the modular reduction in a triangular system resolution.
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 $.
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$.
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 $.
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$.
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$.
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$.
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 $.
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 $.
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$.
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.
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.
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)
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)
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.
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 ?
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$
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.
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.
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.
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.
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.
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 A <- A+op(B) with op(B) = B or B^T
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 C <- op(A)+op(B) with op(B) = B or B^T
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 A <- A-op(B) with op(B) = B or B^T
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 C <- op(A)-op(B) with op(B) = B or B^T
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.
size_t WinoSteps (const size_t m)
 Winosteps.

Detailed Description

Finite Field Linear Algebra Subroutines

Author:
Clément Pernet.

Define Documentation

#define MAX (   a,
 
)    ((a < b)?b:a)
#define MIN (   a,
 
)    ((a > b)?b:a)
#define WINOTHRESHOLD   1000
#define FLOAT_DOUBLE_THRESHOLD_0   430
#define FLOAT_DOUBLE_THRESHOLD_1   350
#define FLOAT_DOUBLE_THRESHOLD_2   175
#define DOUBLE_MANTISSA   53
#define FLOAT_MANTISSA   24