linbox
OpenCLMatrixDomain< Field_ > Class Template Reference

Interface for all functionnalities provided for BlasMatrix using GPUs. More...

#include <opencl-domain.h>

Public Types

typedef Field_ Field
 
typedef Field::Element Element
 
typedef BlasMatrix< Field, typename Vector< Field >::Dense > Matrix
 

Public Member Functions

 OpenCLMatrixDomain (const Field &F)
 Constructor of OpenCLDomain.
 
 OpenCLMatrixDomain (const OpenCLMatrixDomain< Field > &OMD)
 Copy constructor.
 
 ~OpenCLMatrixDomain ()
 Deconstructor.
 
const Fieldfield () const
 Field accessor.
 
template<class Operand1, class Operand2, class Operand3>
Operand1 & mul (Operand1 &C, const Operand2 &A, const Operand3 &B) const
 multiplication.
 
template<class Operand1, class Operand2, class Operand3>
Operand1 & add (Operand1 &C, const Operand2 &A, const Operand3 &B) const
 addition.
 
template<class Operand1, class Operand2>
Operand1 & copy (Operand1 &B, const Operand2 &A) const
 copy.
 
template<class Operand1, class Operand2, class Operand3>
Operand1 & sub (Operand1 &C, const Operand2 &A, const Operand3 &B) const
 substraction C = A-B
 
template<class Operand1, class Operand3>
Operand1 & subin (Operand1 &C, const Operand3 &B) const
 substraction (in place) C -= B
 
template<class Operand1, class Operand3>
Operand1 & addin (Operand1 &C, const Operand3 &B) const
 addition (in place) C += B
 
template<class Operand1, class Operand2, class Operand3>
Operand1 & mul (Operand1 &C, const Element &alpha, const Operand2 &A, const Operand3 &B) const
 multiplication with scaling.
 
template<class Operand1, class Operand2>
Operand1 & mulin_left (Operand1 &A, const Operand2 &B) const
 In place multiplication.
 
template<class Operand1, class Operand2>
Operand2 & mulin_right (const Operand1 &A, Operand2 &B) const
 In place multiplication.
 
template<class Operand1, class Operand2, class Operand3, class Operand4>
Operand1 & axpy (Operand1 &D, const Operand3 &A, const Operand4 &B, const Operand2 &C) const
 axpy.
 
template<class Operand1, class Operand2, class Operand3>
Operand1 & axpyin (Operand1 &C, const Operand2 &A, const Operand3 &B) const
 axpyin.
 
template<class Operand1, class Operand2, class Operand3, class Operand4>
Operand1 & maxpy (Operand1 &D, const Operand3 &A, const Operand4 &B, const Operand2 &C) const
 maxpy.
 
template<class Operand1, class Operand2, class Operand3>
Operand1 & maxpyin (Operand1 &C, const Operand2 &A, const Operand3 &B) const
 maxpyin.
 
template<class Operand1, class Operand2, class Operand3, class Operand4>
Operand1 & axmy (Operand1 &D, const Operand3 &A, const Operand4 &B, const Operand2 &C) const
 axmy.
 
template<class Operand1, class Operand2, class Operand3>
Operand1 & axmyin (Operand1 &C, const Operand2 &A, const Operand3 &B) const
 axmyin.
 
template<class Operand1, class Operand2, class Operand3, class Operand4>
Operand1 & muladd (Operand1 &D, const Element &beta, const Operand2 &C, const Element &alpha, const Operand3 &A, const Operand4 &B) const
 general matrix-matrix multiplication and addition with scaling.
 
template<class Operand1, class Operand2, class Operand3>
Operand1 & muladdin (const Element &beta, Operand1 &C, const Element &alpha, const Operand2 &A, const Operand3 &B) const
 muladdin.
 
Operand1 & mul (Operand1 &C, const Operand2 &A, const Operand3 &B) const
 
Operand1 & mul (Operand1 &C, const Operand2 &A, const Operand3 &B) const
 
Operand1 & mulin_left (Operand1 &A, const Operand2 &B) const
 
Operand1 & mulin_left (Operand1 &A, const Operand2 &B) const
 
Operand2 & mulin_right (const Operand1 &A, Operand2 &B) const
 
Operand2 & mulin_right (const Operand1 &A, Operand2 &B) const
 
Operand1 & muladd (Operand1 &D, const double &beta, const Operand2 &C, const double &alpha, const Operand3 &A, const Operand4 &B) const
 
Operand1 & muladd (Operand1 &D, const float &beta, const Operand2 &C, const float &alpha, const Operand3 &A, const Operand4 &B) const
 
Operand1 & muladdin (const double &beta, Operand1 &C, const double &alpha, const Operand2 &A, const Operand3 &B) const
 
Operand1 & muladdin (const float &beta, Operand1 &C, const float &alpha, const Operand2 &A, const Operand3 &B) const
 
Operand1 & mul (Operand1 &C, const double &alpha, const Operand2 &A, const Operand3 &B) const
 
Operand1 & mul (Operand1 &C, const float &alpha, const Operand2 &A, const Operand3 &B) const
 
Operand1 & axpy (Operand1 &D, const Operand3 &A, const Operand4 &B, const Operand2 &C) const
 
Operand1 & axpy (Operand1 &D, const Operand3 &A, const Operand4 &B, const Operand2 &C) const
 
Operand1 & axpyin (Operand1 &C, const Operand2 &A, const Operand3 &B) const
 
Operand1 & axpyin (Operand1 &C, const Operand2 &A, const Operand3 &B) const
 
Operand1 & maxpy (Operand1 &D, const Operand3 &A, const Operand4 &B, const Operand2 &C) const
 
Operand1 & maxpy (Operand1 &D, const Operand3 &A, const Operand4 &B, const Operand2 &C) const
 
Operand1 & maxpyin (Operand1 &C, const Operand2 &A, const Operand3 &B) const
 
Operand1 & maxpyin (Operand1 &C, const Operand2 &A, const Operand3 &B) const
 
Operand1 & axmy (Operand1 &D, const Operand3 &A, const Operand4 &B, const Operand2 &C) const
 
Operand1 & axmy (Operand1 &D, const Operand3 &A, const Operand4 &B, const Operand2 &C) const
 
Operand1 & axmyin (Operand1 &C, const Operand2 &A, const Operand3 &B) const
 
Operand1 & axmyin (Operand1 &C, const Operand2 &A, const Operand3 &B) const
 
Solutions available for matrix respecting BlasMatrix interface
template<class Matrix>
Matrixinv (Matrix &Ainv, const Matrix &A) const
 Inversion.
 
template<class Matrix>
Matrixinvin (Matrix &Ainv, Matrix &A) const
 Inversion (in place)
 
template<class Matrix>
Matrixinvin (Matrix &A) const
 Inversion (the matrix A is modified)
 
template<class Matrix>
Matrixdiv (Matrix &C, const Matrix &A, const Matrix &B) const
 Division.
 
template<class Matrix>
Matrixinv (Matrix &Ainv, const Matrix &A, int &nullity) const
 Inversion w singular check.
 
template<class Matrix>
Matrixinvin (Matrix &Ainv, Matrix &A, int &nullity) const
 Inversion (the matrix A is modified) w singular check.
 
template<class Matrix>
unsigned int rank (const Matrix &A) const
 Rank.
 
template<class Matrix>
unsigned int rankInPlace (Matrix &A) const
 in-place Rank (the matrix is modified)
 
template<class Matrix>
Element det (const Matrix &A) const
 determinant
 
template<class Matrix>
Element detInPlace (Matrix &A) const
 in-place Determinant (the matrix is modified)
 
Solvers for Matrix (respecting BlasMatrix interface)

with Operand as right or left hand side

template<class Operand, class Matrix>
Operand & left_solve (Operand &X, const Matrix &A, const Operand &B) const
 linear solve with matrix right hand side.
 
template<class Operand, class Matrix>
Operand & left_solve (const Matrix &A, Operand &B) const
 linear solve with matrix right hand side, the result is stored in-place in B.
 
template<class Operand, class Matrix>
Operand & right_solve (Operand &X, const Matrix &A, const Operand &B) const
 linear solve with matrix right hand side.
 
template<class Operand, class Matrix>
Operand & right_solve (const Matrix &A, Operand &B) const
 linear solve with matrix right hand side, the result is stored in-place in B.
 
template<class Polynomial, class Matrix>
Polynomialminpoly (Polynomial &P, const Matrix &A) const
 minimal polynomial computation.
 
template<class Polynomial, class Matrix>
Polynomialcharpoly (Polynomial &P, const Matrix &A) const
 characteristic polynomial computation.
 
template<class Polynomial, class Matrix>
std::list< Polynomial > & charpoly (std::list< Polynomial > &P, const Matrix &A) const
 characteristic polynomial computation.
 
template<class Polynomial>
Polynomialmulpoly (Polynomial &res, const Polynomial &P1, const Polynomial &P2) const
 
template<class Matrix1, class Matrix2>
bool areEqual (const Matrix1 &A, const Matrix2 &B)
 
template<class Matrix>
void setIdentity (Matrix &I)
 linear solve with matrix right hand side.
 
template<class Matrix>
void setZero (Matrix &I)
 linear solve with matrix right hand side.
 
template<class Matrix1>
bool isZero (const Matrix1 &A)
 
template<class Matrix1>
bool isIdentity (const Matrix1 &A)
 
template<class Matrix1>
bool isIdentityGeneralized (const Matrix1 &A)
 
template<class Matrix>
std::ostream & write (std::ostream &os, const Matrix &A) const
 Print matrix.
 
template<class Matrix>
std::ostream & write (std::ostream &os, const Matrix &A, bool maple_format) const
 linear solve with matrix right hand side.
 
template<class Matrix>
std::istream & read (std::istream &is, Matrix &A) const
 Read matrix.
 

Protected Attributes

const Field_F
 
bool setupCorrect
 

Detailed Description

template<class Field_>
class LinBox::OpenCLMatrixDomain< Field_ >

Interface for all functionnalities provided for BlasMatrix using GPUs.

Done through specialization of some of the member funcions defined below. Otherwise, by default the single processor BlasMatrixDomain funcions are invoked.

Member Typedef Documentation

◆ Field

template<class Field_>
typedef Field_ Field

◆ Element

template<class Field_>
typedef Field::Element Element

◆ Matrix

template<class Field_>
typedef BlasMatrix<Field,typename Vector<Field>::Dense > Matrix

Constructor & Destructor Documentation

◆ OpenCLMatrixDomain() [1/2]

template<class Field_>
OpenCLMatrixDomain ( const Field & F)
inline

Constructor of OpenCLDomain.

◆ OpenCLMatrixDomain() [2/2]

template<class Field_>
OpenCLMatrixDomain ( const OpenCLMatrixDomain< Field > & OMD)
inline

Copy constructor.

◆ ~OpenCLMatrixDomain()

template<class Field_>
~OpenCLMatrixDomain ( )
inline

Deconstructor.

Member Function Documentation

◆ field()

template<class Field_>
const Field & field ( ) const
inline

Field accessor.

◆ mul() [1/6]

template<class Field_>
template<class Operand1, class Operand2, class Operand3>
Operand1 & mul ( Operand1 & C,
const Operand2 & A,
const Operand3 & B ) const
inline

multiplication.

C = A*B

◆ add()

template<class Field_>
template<class Operand1, class Operand2, class Operand3>
Operand1 & add ( Operand1 & C,
const Operand2 & A,
const Operand3 & B ) const
inline

addition.

C = A+B

◆ copy()

template<class Field_>
template<class Operand1, class Operand2>
Operand1 & copy ( Operand1 & B,
const Operand2 & A ) const
inline

copy.

B = A

◆ sub()

template<class Field_>
template<class Operand1, class Operand2, class Operand3>
Operand1 & sub ( Operand1 & C,
const Operand2 & A,
const Operand3 & B ) const
inline

substraction C = A-B

◆ subin()

template<class Field_>
template<class Operand1, class Operand3>
Operand1 & subin ( Operand1 & C,
const Operand3 & B ) const
inline

substraction (in place) C -= B

◆ addin()

template<class Field_>
template<class Operand1, class Operand3>
Operand1 & addin ( Operand1 & C,
const Operand3 & B ) const
inline

addition (in place) C += B

◆ mul() [2/6]

template<class Field_>
template<class Operand1, class Operand2, class Operand3>
Operand1 & mul ( Operand1 & C,
const Element & alpha,
const Operand2 & A,
const Operand3 & B ) const
inline

multiplication with scaling.

C = alpha.A*B

◆ mulin_left() [1/3]

template<class Field_>
template<class Operand1, class Operand2>
Operand1 & mulin_left ( Operand1 & A,
const Operand2 & B ) const
inline

In place multiplication.

A = A*B

◆ mulin_right() [1/3]

template<class Field_>
template<class Operand1, class Operand2>
Operand2 & mulin_right ( const Operand1 & A,
Operand2 & B ) const
inline

In place multiplication.

B = A*B

◆ axpy() [1/3]

template<class Field_>
template<class Operand1, class Operand2, class Operand3, class Operand4>
Operand1 & axpy ( Operand1 & D,
const Operand3 & A,
const Operand4 & B,
const Operand2 & C ) const
inline

axpy.

D = A*B + C

◆ axpyin() [1/3]

template<class Field_>
template<class Operand1, class Operand2, class Operand3>
Operand1 & axpyin ( Operand1 & C,
const Operand2 & A,
const Operand3 & B ) const
inline

axpyin.

C += A*B

◆ maxpy() [1/3]

template<class Field_>
template<class Operand1, class Operand2, class Operand3, class Operand4>
Operand1 & maxpy ( Operand1 & D,
const Operand3 & A,
const Operand4 & B,
const Operand2 & C ) const
inline

maxpy.

D = C - A*B

◆ maxpyin() [1/3]

template<class Field_>
template<class Operand1, class Operand2, class Operand3>
Operand1 & maxpyin ( Operand1 & C,
const Operand2 & A,
const Operand3 & B ) const
inline

maxpyin.

C -= A*B

◆ axmy() [1/3]

template<class Field_>
template<class Operand1, class Operand2, class Operand3, class Operand4>
Operand1 & axmy ( Operand1 & D,
const Operand3 & A,
const Operand4 & B,
const Operand2 & C ) const
inline

axmy.

D= A*B - C

◆ axmyin() [1/3]

template<class Field_>
template<class Operand1, class Operand2, class Operand3>
Operand1 & axmyin ( Operand1 & C,
const Operand2 & A,
const Operand3 & B ) const
inline

axmyin.

C = A*B - C

◆ muladd() [1/3]

template<class Field_>
template<class Operand1, class Operand2, class Operand3, class Operand4>
Operand1 & muladd ( Operand1 & D,
const Element & beta,
const Operand2 & C,
const Element & alpha,
const Operand3 & A,
const Operand4 & B ) const
inline

general matrix-matrix multiplication and addition with scaling.

D= beta.C + alpha.A*B

◆ muladdin() [1/3]

template<class Field_>
template<class Operand1, class Operand2, class Operand3>
Operand1 & muladdin ( const Element & beta,
Operand1 & C,
const Element & alpha,
const Operand2 & A,
const Operand3 & B ) const
inline

muladdin.

C= beta.C + alpha.A*B.

◆ inv() [1/2]

template<class Field_>
template<class Matrix>
Matrix & inv ( Matrix & Ainv,
const Matrix & A ) const
inline

Inversion.

◆ invin() [1/3]

template<class Field_>
template<class Matrix>
Matrix & invin ( Matrix & Ainv,
Matrix & A ) const
inline

Inversion (in place)

◆ invin() [2/3]

template<class Field_>
template<class Matrix>
Matrix & invin ( Matrix & A) const
inline

Inversion (the matrix A is modified)

◆ div()

template<class Field_>
template<class Matrix>
Matrix & div ( Matrix & C,
const Matrix & A,
const Matrix & B ) const
inline

Division.

C = A B^{-1} ==> C . B = A

◆ inv() [2/2]

template<class Field_>
template<class Matrix>
Matrix & inv ( Matrix & Ainv,
const Matrix & A,
int & nullity ) const
inline

Inversion w singular check.

◆ invin() [3/3]

template<class Field_>
template<class Matrix>
Matrix & invin ( Matrix & Ainv,
Matrix & A,
int & nullity ) const
inline

Inversion (the matrix A is modified) w singular check.

◆ rank()

template<class Field_>
template<class Matrix>
unsigned int rank ( const Matrix & A) const
inline

Rank.

◆ rankInPlace()

template<class Field_>
template<class Matrix>
unsigned int rankInPlace ( Matrix & A) const
inline

in-place Rank (the matrix is modified)

◆ det()

template<class Field_>
template<class Matrix>
Element det ( const Matrix & A) const
inline

determinant

◆ detInPlace()

template<class Field_>
template<class Matrix>
Element detInPlace ( Matrix & A) const
inline

in-place Determinant (the matrix is modified)

◆ left_solve() [1/2]

template<class Field_>
template<class Operand, class Matrix>
Operand & left_solve ( Operand & X,
const Matrix & A,
const Operand & B ) const
inline

linear solve with matrix right hand side.

AX=B

◆ left_solve() [2/2]

template<class Field_>
template<class Operand, class Matrix>
Operand & left_solve ( const Matrix & A,
Operand & B ) const
inline

linear solve with matrix right hand side, the result is stored in-place in B.

Precondition
A must be square AX=B , (B<-X)

◆ right_solve() [1/2]

template<class Field_>
template<class Operand, class Matrix>
Operand & right_solve ( Operand & X,
const Matrix & A,
const Operand & B ) const
inline

linear solve with matrix right hand side.

XA=B

◆ right_solve() [2/2]

template<class Field_>
template<class Operand, class Matrix>
Operand & right_solve ( const Matrix & A,
Operand & B ) const
inline

linear solve with matrix right hand side, the result is stored in-place in B.

Precondition
A must be square XA=B , (B<-X)

◆ minpoly()

template<class Field_>
template<class Polynomial, class Matrix>
Polynomial & minpoly ( Polynomial & P,
const Matrix & A ) const
inline

minimal polynomial computation.

◆ charpoly() [1/2]

template<class Field_>
template<class Polynomial, class Matrix>
Polynomial & charpoly ( Polynomial & P,
const Matrix & A ) const
inline

characteristic polynomial computation.

◆ charpoly() [2/2]

template<class Field_>
template<class Polynomial, class Matrix>
std::list< Polynomial > & charpoly ( std::list< Polynomial > & P,
const Matrix & A ) const
inline

characteristic polynomial computation.

◆ mulpoly()

template<class Field_>
template<class Polynomial>
Polynomial & mulpoly ( Polynomial & res,
const Polynomial & P1,
const Polynomial & P2 ) const
inline
Todo
Temporary: waiting for an implementation of a domain of polynomial

◆ areEqual()

template<class Field_>
template<class Matrix1, class Matrix2>
bool areEqual ( const Matrix1 & A,
const Matrix2 & B )
inline
Bug
use refs

◆ setIdentity()

template<class Field_>
template<class Matrix>
void setIdentity ( Matrix & I)
inline

linear solve with matrix right hand side.

AX=B

◆ setZero()

template<class Field_>
template<class Matrix>
void setZero ( Matrix & I)
inline

linear solve with matrix right hand side.

AX=B

◆ isZero()

template<class Field_>
template<class Matrix1>
bool isZero ( const Matrix1 & A)
inline
Bug
use refs

◆ isIdentity()

template<class Field_>
template<class Matrix1>
bool isIdentity ( const Matrix1 & A)
inline
Bug
use refs
Bug
use refs

◆ isIdentityGeneralized()

template<class Field_>
template<class Matrix1>
bool isIdentityGeneralized ( const Matrix1 & A)
inline
Bug
use refs
Bug
use refs

◆ write() [1/2]

template<class Field_>
template<class Matrix>
std::ostream & write ( std::ostream & os,
const Matrix & A ) const
inline

Print matrix.

Parameters
osOutput stream to which matrix is written.
AMatrix.
Returns
reference to os.

◆ write() [2/2]

template<class Field_>
template<class Matrix>
std::ostream & write ( std::ostream & os,
const Matrix & A,
bool maple_format ) const
inline

linear solve with matrix right hand side.

AX=B

◆ read()

template<class Field_>
template<class Matrix>
std::istream & read ( std::istream & is,
Matrix & A ) const
inline

Read matrix.

Parameters
isInput stream from which matrix is read.
AMatrix.
Returns
reference to is.

◆ mul() [3/6]

Operand1 & mul ( Operand1 & C,
const Operand2 & A,
const Operand3 & B ) const

◆ mul() [4/6]

Operand1 & mul ( Operand1 & C,
const Operand2 & A,
const Operand3 & B ) const

◆ mulin_left() [2/3]

Operand1 & mulin_left ( Operand1 & A,
const Operand2 & B ) const

◆ mulin_left() [3/3]

Operand1 & mulin_left ( Operand1 & A,
const Operand2 & B ) const

◆ mulin_right() [2/3]

Operand2 & mulin_right ( const Operand1 & A,
Operand2 & B ) const

◆ mulin_right() [3/3]

Operand2 & mulin_right ( const Operand1 & A,
Operand2 & B ) const

◆ muladd() [2/3]

Operand1 & muladd ( Operand1 & D,
const double & beta,
const Operand2 & C,
const double & alpha,
const Operand3 & A,
const Operand4 & B ) const

◆ muladd() [3/3]

Operand1 & muladd ( Operand1 & D,
const float & beta,
const Operand2 & C,
const float & alpha,
const Operand3 & A,
const Operand4 & B ) const

◆ muladdin() [2/3]

Operand1 & muladdin ( const double & beta,
Operand1 & C,
const double & alpha,
const Operand2 & A,
const Operand3 & B ) const

◆ muladdin() [3/3]

Operand1 & muladdin ( const float & beta,
Operand1 & C,
const float & alpha,
const Operand2 & A,
const Operand3 & B ) const

◆ mul() [5/6]

Operand1 & mul ( Operand1 & C,
const double & alpha,
const Operand2 & A,
const Operand3 & B ) const

◆ mul() [6/6]

Operand1 & mul ( Operand1 & C,
const float & alpha,
const Operand2 & A,
const Operand3 & B ) const

◆ axpy() [2/3]

Operand1 & axpy ( Operand1 & D,
const Operand3 & A,
const Operand4 & B,
const Operand2 & C ) const

◆ axpy() [3/3]

Operand1 & axpy ( Operand1 & D,
const Operand3 & A,
const Operand4 & B,
const Operand2 & C ) const

◆ axpyin() [2/3]

Operand1 & axpyin ( Operand1 & C,
const Operand2 & A,
const Operand3 & B ) const

◆ axpyin() [3/3]

Operand1 & axpyin ( Operand1 & C,
const Operand2 & A,
const Operand3 & B ) const

◆ maxpy() [2/3]

Operand1 & maxpy ( Operand1 & D,
const Operand3 & A,
const Operand4 & B,
const Operand2 & C ) const

◆ maxpy() [3/3]

Operand1 & maxpy ( Operand1 & D,
const Operand3 & A,
const Operand4 & B,
const Operand2 & C ) const

◆ maxpyin() [2/3]

Operand1 & maxpyin ( Operand1 & C,
const Operand2 & A,
const Operand3 & B ) const

◆ maxpyin() [3/3]

Operand1 & maxpyin ( Operand1 & C,
const Operand2 & A,
const Operand3 & B ) const

◆ axmy() [2/3]

Operand1 & axmy ( Operand1 & D,
const Operand3 & A,
const Operand4 & B,
const Operand2 & C ) const

◆ axmy() [3/3]

Operand1 & axmy ( Operand1 & D,
const Operand3 & A,
const Operand4 & B,
const Operand2 & C ) const

◆ axmyin() [2/3]

Operand1 & axmyin ( Operand1 & C,
const Operand2 & A,
const Operand3 & B ) const

◆ axmyin() [3/3]

Operand1 & axmyin ( Operand1 & C,
const Operand2 & A,
const Operand3 & B ) const

Field Documentation

◆ _F

template<class Field_>
const Field& _F
protected

◆ setupCorrect

template<class Field_>
bool setupCorrect
protected

The documentation for this class was generated from the following file: