QUDA  v1.1.0
A library for QCD on GPUs
Functions | Variables
quda::blas Namespace Reference

Functions

void  init ()
 
void  destroy ()
 
void  setParam (int kernel, int prec, int threads, int blocks)
 
void  zero (ColorSpinorField &a)
 
void  copy (ColorSpinorField &dst, const ColorSpinorField &src)
 
void  ax (double a, ColorSpinorField &x)
 
void  axpbyz (double a, ColorSpinorField &x, double b, ColorSpinorField &y, ColorSpinorField &z)
 
 
 
void  axpy (double a, ColorSpinorField &x, ColorSpinorField &y)
 
void  axpby (double a, ColorSpinorField &x, double b, ColorSpinorField &y)
 
void  xpay (ColorSpinorField &x, double a, ColorSpinorField &y)
 
 
void  axpyZpbx (double a, ColorSpinorField &x, ColorSpinorField &y, ColorSpinorField &z, double b)
 
void  axpyBzpcx (double a, ColorSpinorField &x, ColorSpinorField &y, double b, ColorSpinorField &z, double c)
 
void  caxpby (const Complex &a, ColorSpinorField &x, const Complex &b, ColorSpinorField &y)
 
void  caxpy (const Complex &a, ColorSpinorField &x, ColorSpinorField &y)
 
 
 
 
 
 
void  cabxpyAx (double a, const Complex &b, ColorSpinorField &x, ColorSpinorField &y)
 
 
void  caxpyXmazMR (const double &a, ColorSpinorField &x, ColorSpinorField &y, ColorSpinorField &z)
 
void  tripleCGUpdate (double alpha, double beta, ColorSpinorField &q, ColorSpinorField &r, ColorSpinorField &x, ColorSpinorField &p)
 
double  norm1 (const ColorSpinorField &b)
 
double  norm2 (const ColorSpinorField &a)
 
double  axpyReDot (double a, ColorSpinorField &x, ColorSpinorField &y)
 
 
double  axpbyzNorm (double a, ColorSpinorField &x, double b, ColorSpinorField &y, ColorSpinorField &z)
 
double  axpyNorm (double a, ColorSpinorField &x, ColorSpinorField &y)
 
 
 
 
  Return (a,b) and ||b||^2 - implemented using cDotProductNormA. More...
 
 
double  caxpyNorm (const Complex &a, ColorSpinorField &x, ColorSpinorField &y)
 
 
double  cabxpyzAxNorm (double a, const Complex &b, ColorSpinorField &x, ColorSpinorField &y, ColorSpinorField &z)
 
 
 
 
 
 
 
 
 
void  axpy (const double *a, std::vector< ColorSpinorField * > &x, std::vector< ColorSpinorField * > &y)
  Compute the block "axpy" with over the set of ColorSpinorFields. E.g., it computes y = x * a + y The dimensions of a can be rectangular, e.g., the width of x and y need not be same. More...
 
void  axpy (const double *a, ColorSpinorField &x, ColorSpinorField &y)
  This is a wrapper for calling the block "axpy" with a composite ColorSpinorField. E.g., it computes y = x * a + y. More...
 
void  axpy_U (const double *a, std::vector< ColorSpinorField * > &x, std::vector< ColorSpinorField * > &y)
  Compute the block "axpy_U" with over the set of ColorSpinorFields. E.g., it computes. More...
 
void  axpy_U (const double *a, ColorSpinorField &x, ColorSpinorField &y)
  This is a wrapper for calling the block "axpy_U" with a composite ColorSpinorField. E.g., it computes. More...
 
void  axpy_L (const double *a, std::vector< ColorSpinorField * > &x, std::vector< ColorSpinorField * > &y)
  Compute the block "axpy_L" with over the set of ColorSpinorFields. E.g., it computes. More...
 
void  axpy_L (const double *a, ColorSpinorField &x, ColorSpinorField &y)
  This is a wrapper for calling the block "axpy_U" with a composite ColorSpinorField. E.g., it computes. More...
 
void  caxpy (const Complex *a, std::vector< ColorSpinorField * > &x, std::vector< ColorSpinorField * > &y)
  Compute the block "caxpy" with over the set of ColorSpinorFields. E.g., it computes. More...
 
void  caxpy (const Complex *a, ColorSpinorField &x, ColorSpinorField &y)
  This is a wrapper for calling the block "caxpy" with a composite ColorSpinorField. E.g., it computes. More...
 
void  caxpy_U (const Complex *a, std::vector< ColorSpinorField * > &x, std::vector< ColorSpinorField * > &y)
  Compute the block "caxpy_U" with over the set of ColorSpinorFields. E.g., it computes. More...
 
  This is a wrapper for calling the block "caxpy_U" with a composite ColorSpinorField. E.g., it computes. More...
 
void  caxpy_L (const Complex *a, std::vector< ColorSpinorField * > &x, std::vector< ColorSpinorField * > &y)
  Compute the block "caxpy_L" with over the set of ColorSpinorFields. E.g., it computes. More...
 
  This is a wrapper for calling the block "caxpy_U" with a composite ColorSpinorField. E.g., it computes. More...
 
void  caxpyz (const Complex *a, std::vector< ColorSpinorField * > &x, std::vector< ColorSpinorField * > &y, std::vector< ColorSpinorField * > &z)
  Compute the block "caxpyz" with over the set of ColorSpinorFields. E.g., it computes. More...
 
  This is a wrapper for calling the block "caxpyz" with a composite ColorSpinorField. E.g., it computes. More...
 
void  caxpyz_U (const Complex *a, std::vector< ColorSpinorField * > &x, std::vector< ColorSpinorField * > &y, std::vector< ColorSpinorField * > &z)
  Compute the block "caxpyz" with over the set of ColorSpinorFields. E.g., it computes. More...
 
  This is a wrapper for calling the block "caxpyz" with a composite ColorSpinorField. E.g., it computes. More...
 
void  caxpyz_L (const Complex *a, std::vector< ColorSpinorField * > &x, std::vector< ColorSpinorField * > &y, std::vector< ColorSpinorField * > &z)
  Compute the block "caxpyz" with over the set of ColorSpinorFields. E.g., it computes. More...
 
  This is a wrapper for calling the block "caxpyz" with a composite ColorSpinorField. E.g., it computes. More...
 
void  axpyBzpcx (const double *a, std::vector< ColorSpinorField * > &x, std::vector< ColorSpinorField * > &y, const double *b, ColorSpinorField &z, const double *c)
  Compute the vectorized "axpyBzpcx" with over the set of ColorSpinorFields, where the third vector, z, is constant over the batch. E.g., it computes. More...
 
void  caxpyBxpz (const Complex *a_, std::vector< ColorSpinorField * > &x_, ColorSpinorField &y_, const Complex *b_, ColorSpinorField &z_)
  Compute the vectorized "caxpyBxpz" over the set of ColorSpinorFields, where the second and third vector, y and z, is constant over the batch. E.g., it computes. More...
 
void  reDotProduct (double *result, std::vector< ColorSpinorField * > &a, std::vector< ColorSpinorField * > &b)
 
void  cDotProduct (Complex *result, std::vector< ColorSpinorField * > &a, std::vector< ColorSpinorField * > &b)
  Computes the matrix of inner products between the vector set a and the vector set b. More...
 
void  hDotProduct (Complex *result, std::vector< ColorSpinorField * > &a, std::vector< ColorSpinorField * > &b)
  Computes the matrix of inner products between the vector set a and the vector set b. This routine is specifically for the case where the result matrix is guarantted to be Hermitian. Requires a.size()==b.size(). More...
 
void  hDotProduct_Anorm (Complex *result, std::vector< ColorSpinorField * > &a, std::vector< ColorSpinorField * > &b)
  Computes the matrix of inner products between the vector set a and the vector set b. This routine is specifically for the case where the result matrix is guarantted to be Hermitian. Uniquely defined for cases like (p, Ap) where the output is Hermitian, but there's an A-norm instead of an L2 norm. Requires a.size()==b.size(). More...
 
void  cDotProductCopy (Complex *result, std::vector< ColorSpinorField * > &a, std::vector< ColorSpinorField * > &b, std::vector< ColorSpinorField * > &c)
  Computes the matrix of inner products between the vector set a and the vector set b, and copies b into c. More...
 

Variables

unsigned long long  flops
 
unsigned long long  bytes
 

Function Documentation

ax()

void quda::blas::ax ( double  a,
)

axpby()

void quda::blas::axpby ( double  a,
double  b,
)
inline

Definition at line 44 of file blas_quda.h.

axpbyz()

void quda::blas::axpbyz ( double  a,
double  b,
)

axpbyzNorm()

double quda::blas::axpbyzNorm ( double  a,
double  b,
)

axpy() [1/3]

void quda::blas::axpy ( const double *  a,
)

This is a wrapper for calling the block "axpy" with a composite ColorSpinorField. E.g., it computes y = x * a + y.

Parameters
a[in] Matrix of real coefficients
x[in] Input matrix
y[in,out] Computed output matrix

axpy() [2/3]

void quda::blas::axpy ( const double *  a,
std::vector< ColorSpinorField * > &  x,
std::vector< ColorSpinorField * > &  y 
)

Compute the block "axpy" with over the set of ColorSpinorFields. E.g., it computes y = x * a + y The dimensions of a can be rectangular, e.g., the width of x and y need not be same.

Parameters
a[in] Matrix of real coefficients
x[in] vector of input ColorSpinorFields
y[in,out] vector of input/output ColorSpinorFields

axpy() [3/3]

void quda::blas::axpy ( double  a,
)
inline

Definition at line 43 of file blas_quda.h.

axpy_L() [1/2]

void quda::blas::axpy_L ( const double *  a,
)

This is a wrapper for calling the block "axpy_U" with a composite ColorSpinorField. E.g., it computes.

y = x * a + y

Parameters
a[in] Matrix of coefficients
x[in] Input matrix
y[in,out] Computed output matrix

axpy_L() [2/2]

void quda::blas::axpy_L ( const double *  a,
std::vector< ColorSpinorField * > &  x,
std::vector< ColorSpinorField * > &  y 
)

Compute the block "axpy_L" with over the set of ColorSpinorFields. E.g., it computes.

y = x * a + y

Where 'a' must be a square, lower triangular matrix.

Parameters
a[in] Matrix of coefficients
x[in] vector of input ColorSpinorFields
y[in,out] vector of input/output ColorSpinorFields

axpy_U() [1/2]

void quda::blas::axpy_U ( const double *  a,
)

This is a wrapper for calling the block "axpy_U" with a composite ColorSpinorField. E.g., it computes.

y = x * a + y

Parameters
a[in] Matrix of coefficients
x[in] Input matrix
y[in,out] Computed output matrix

axpy_U() [2/2]

void quda::blas::axpy_U ( const double *  a,
std::vector< ColorSpinorField * > &  x,
std::vector< ColorSpinorField * > &  y 
)

Compute the block "axpy_U" with over the set of ColorSpinorFields. E.g., it computes.

y = x * a + y

Where 'a' must be a square, upper triangular matrix.

Parameters
a[in] Matrix of coefficients
x[in] vector of input ColorSpinorFields
y[in,out] vector of input/output ColorSpinorFields

axpyBzpcx() [1/2]

void quda::blas::axpyBzpcx ( const double *  a,
std::vector< ColorSpinorField * > &  x,
std::vector< ColorSpinorField * > &  y,
const double *  b,
const double *  c 
)

Compute the vectorized "axpyBzpcx" with over the set of ColorSpinorFields, where the third vector, z, is constant over the batch. E.g., it computes.

y = a * x + y x = b * z + c * x

The dimensions of a, b, c are the same as the size of x and y, with a maximum size of 16.

Parameters
a[in] Array of coefficients
b[in] Array of coefficients
c[in] Array of coefficients
x[in,out] vector of ColorSpinorFields
y[in,out] vector of ColorSpinorFields
z[in] input ColorSpinorField

axpyBzpcx() [2/2]

void quda::blas::axpyBzpcx ( double  a,
double  b,
double  c 
)

axpyCGNorm()

Complex quda::blas::axpyCGNorm ( double  a,
)

axpyNorm()

double quda::blas::axpyNorm ( double  a,
)
inline

Definition at line 78 of file blas_quda.h.

axpyReDot()

double quda::blas::axpyReDot ( double  a,
)

axpyZpbx()

void quda::blas::axpyZpbx ( double  a,
double  b 
)

cabxpyAx()

void quda::blas::cabxpyAx ( double  a,
const Complexb,
)

cabxpyzAxNorm()

double quda::blas::cabxpyzAxNorm ( double  a,
const Complexb,
)

caxpby()

void quda::blas::caxpby ( const Complexa,
const Complexb,
)

caxpbypczw()

void quda::blas::caxpbypczw ( const Complexa,
const Complexb,
const Complexc,
)

caxpbypzYmbw()

void quda::blas::caxpbypzYmbw ( const Complex &  ,
const Complex &  ,
)

caxpbypzYmbwcDotProductUYNormY()

double3 quda::blas::caxpbypzYmbwcDotProductUYNormY ( const Complexa,
const Complexb,
)

caxpy() [1/3]

void quda::blas::caxpy ( const Complexa,
)

caxpy() [2/3]

void quda::blas::caxpy ( const Complexa,
)

This is a wrapper for calling the block "caxpy" with a composite ColorSpinorField. E.g., it computes.

y = x * a + y

Parameters
a[in] Matrix of coefficients
x[in] Input matrix
y[in,out] Computed output matrix

caxpy() [3/3]

void quda::blas::caxpy ( const Complexa,
std::vector< ColorSpinorField * > &  x,
std::vector< ColorSpinorField * > &  y 
)

Compute the block "caxpy" with over the set of ColorSpinorFields. E.g., it computes.

y = x * a + y

The dimensions of a can be rectangular, e.g., the width of x and y need not be same.

Parameters
a[in] Matrix of coefficients
x[in] vector of input ColorSpinorFields
y[in,out] vector of input/output ColorSpinorFields

caxpy_L() [1/2]

void quda::blas::caxpy_L ( const Complexa,
)

This is a wrapper for calling the block "caxpy_U" with a composite ColorSpinorField. E.g., it computes.

y = x * a + y

Parameters
a[in] Matrix of coefficients
x[in] Input matrix
y[in,out] Computed output matrix

caxpy_L() [2/2]

void quda::blas::caxpy_L ( const Complexa,
std::vector< ColorSpinorField * > &  x,
std::vector< ColorSpinorField * > &  y 
)

Compute the block "caxpy_L" with over the set of ColorSpinorFields. E.g., it computes.

y = x * a + y

Where 'a' must be a square, lower triangular matrix.

Parameters
a[in] Matrix of coefficients
x[in] vector of input ColorSpinorFields
y[in,out] vector of input/output ColorSpinorFields

caxpy_U() [1/2]

void quda::blas::caxpy_U ( const Complexa,
)

This is a wrapper for calling the block "caxpy_U" with a composite ColorSpinorField. E.g., it computes.

y = x * a + y

Parameters
a[in] Matrix of coefficients
x[in] Input matrix
y[in,out] Computed output matrix

caxpy_U() [2/2]

void quda::blas::caxpy_U ( const Complexa,
std::vector< ColorSpinorField * > &  x,
std::vector< ColorSpinorField * > &  y 
)

Compute the block "caxpy_U" with over the set of ColorSpinorFields. E.g., it computes.

y = x * a + y

Where 'a' must be a square, upper triangular matrix.

Parameters
a[in] Matrix of coefficients
x[in] vector of input ColorSpinorFields
y[in,out] vector of input/output ColorSpinorFields

caxpyBxpz() [1/2]

void quda::blas::caxpyBxpz ( const Complex &  ,
const Complex &  ,
)

caxpyBxpz() [2/2]

void quda::blas::caxpyBxpz ( const Complexa_,
std::vector< ColorSpinorField * > &  x_,
const Complexb_,
ColorSpinorFieldz_ 
)

Compute the vectorized "caxpyBxpz" over the set of ColorSpinorFields, where the second and third vector, y and z, is constant over the batch. E.g., it computes.

y = a * x + y z = b * x + z

The dimensions of a, b are the same as the size of x, with a maximum size of 16.

Parameters
a[in] Array of coefficients
b[in] Array of coefficients
x[in] vector of ColorSpinorFields
y[in,out] input ColorSpinorField
z[in,out] input ColorSpinorField

caxpyBzpx()

void quda::blas::caxpyBzpx ( const Complex &  ,
const Complex &  ,
)

caxpyDotzy()

Complex quda::blas::caxpyDotzy ( const Complexa,
)

caxpyNorm()

double quda::blas::caxpyNorm ( const Complexa,
)

caxpyXmaz()

void quda::blas::caxpyXmaz ( const Complexa,
)

caxpyXmazMR()

void quda::blas::caxpyXmazMR ( const double &  a,
)

caxpyXmazNormX()

double quda::blas::caxpyXmazNormX ( const Complexa,
)

caxpyz() [1/2]

void quda::blas::caxpyz ( const Complexa,
)

This is a wrapper for calling the block "caxpyz" with a composite ColorSpinorField. E.g., it computes.

z = x * a + y

Parameters
a[in] Matrix of coefficients
x[in] Input matrix
y[in] Computed output matrix
z[out] vector of input/output ColorSpinorFields

caxpyz() [2/2]

void quda::blas::caxpyz ( const Complexa,
std::vector< ColorSpinorField * > &  x,
std::vector< ColorSpinorField * > &  y,
std::vector< ColorSpinorField * > &  z 
)

Compute the block "caxpyz" with over the set of ColorSpinorFields. E.g., it computes.

z = x * a + y

The dimensions of a can be rectangular, e.g., the width of x and y need not be same, though the maximum width for both is 16.

Parameters
a[in] Matrix of coefficients
x[in] vector of input ColorSpinorFields
y[in] vector of input ColorSpinorFields
z[out] vector of output ColorSpinorFields

caxpyz_L() [1/2]

void quda::blas::caxpyz_L ( const Complexa,
)

This is a wrapper for calling the block "caxpyz" with a composite ColorSpinorField. E.g., it computes.

z = x * a + y

Parameters
a[in] Matrix of coefficients
x[in] Input matrix
y[in] Computed output matrix
z[out] vector of input/output ColorSpinorFields

caxpyz_L() [2/2]

void quda::blas::caxpyz_L ( const Complexa,
std::vector< ColorSpinorField * > &  x,
std::vector< ColorSpinorField * > &  y,
std::vector< ColorSpinorField * > &  z 
)

Compute the block "caxpyz" with over the set of ColorSpinorFields. E.g., it computes.

z = x * a + y

Where 'a' is assumed to be lower triangular

Parameters
a[in] Matrix of coefficients
x[in] vector of input ColorSpinorFields
y[in] vector of input ColorSpinorFields
z[out] vector of output ColorSpinorFields

caxpyz_U() [1/2]

void quda::blas::caxpyz_U ( const Complexa,
)

This is a wrapper for calling the block "caxpyz" with a composite ColorSpinorField. E.g., it computes.

z = x * a + y

Parameters
a[in] Matrix of coefficients
x[in] Input matrix
y[in] Computed output matrix
z[out] vector of input/output ColorSpinorFields

caxpyz_U() [2/2]

void quda::blas::caxpyz_U ( const Complexa,
std::vector< ColorSpinorField * > &  x,
std::vector< ColorSpinorField * > &  y,
std::vector< ColorSpinorField * > &  z 
)

Compute the block "caxpyz" with over the set of ColorSpinorFields. E.g., it computes.

z = x * a + y

Where 'a' is assumed to be upper triangular.

Parameters
a[in] Matrix of coefficients
x[in] vector of input ColorSpinorFields
y[in] vector of input ColorSpinorFields
z[out] vector of output ColorSpinorFields

cDotProduct() [1/2]

Complex quda::blas::cDotProduct ( ColorSpinorField &  ,
)

cDotProduct() [2/2]

void quda::blas::cDotProduct ( Complexresult,
std::vector< ColorSpinorField * > &  a,
std::vector< ColorSpinorField * > &  b 
)

Computes the matrix of inner products between the vector set a and the vector set b.

Parameters
result[out] Matrix of inner product result[i][j] = (a[j],b[i])
a[in] set of input ColorSpinorFields
b[in] set of input ColorSpinorFields

cDotProductCopy()

void quda::blas::cDotProductCopy ( Complexresult,
std::vector< ColorSpinorField * > &  a,
std::vector< ColorSpinorField * > &  b,
std::vector< ColorSpinorField * > &  c 
)

Computes the matrix of inner products between the vector set a and the vector set b, and copies b into c.

Parameters
result[out] Matrix of inner product result[i][j] = (a[j],b[i])
a[in] set of input ColorSpinorFields
b[in] set of input ColorSpinorFields
c[out] set of output ColorSpinorFields

cDotProductNormA()

double3 quda::blas::cDotProductNormA ( ColorSpinorFielda,
)

cDotProductNormB()

double3 quda::blas::cDotProductNormB ( ColorSpinorFielda,
)
inline

Return (a,b) and ||b||^2 - implemented using cDotProductNormA.

Definition at line 87 of file blas_quda.h.

copy()

void quda::blas::copy ( ColorSpinorFielddst,
const ColorSpinorFieldsrc 
)
inline

Definition at line 24 of file blas_quda.h.

cxpaypbz()

void quda::blas::cxpaypbz ( ColorSpinorField &  ,
const Complexb,
const Complexc,
)

destroy()

void quda::blas::destroy ( )

hDotProduct()

void quda::blas::hDotProduct ( Complexresult,
std::vector< ColorSpinorField * > &  a,
std::vector< ColorSpinorField * > &  b 
)

Computes the matrix of inner products between the vector set a and the vector set b. This routine is specifically for the case where the result matrix is guarantted to be Hermitian. Requires a.size()==b.size().

Parameters
result[out] Matrix of inner product result[i][j] = (a[j],b[i])
a[in] set of input ColorSpinorFields
b[in] set of input ColorSpinorFields

hDotProduct_Anorm()

void quda::blas::hDotProduct_Anorm ( Complexresult,
std::vector< ColorSpinorField * > &  a,
std::vector< ColorSpinorField * > &  b 
)

Computes the matrix of inner products between the vector set a and the vector set b. This routine is specifically for the case where the result matrix is guarantted to be Hermitian. Uniquely defined for cases like (p, Ap) where the output is Hermitian, but there's an A-norm instead of an L2 norm. Requires a.size()==b.size().

Parameters
result[out] Matrix of inner product result[i][j] = (a[j],b[i])
a[in] set of input ColorSpinorFields
b[in] set of input ColorSpinorFields

HeavyQuarkResidualNorm()

double3 quda::blas::HeavyQuarkResidualNorm ( ColorSpinorFieldx,
)

init()

void quda::blas::init ( )

mxpy()

void quda::blas::mxpy ( ColorSpinorFieldx,
)
inline

Definition at line 42 of file blas_quda.h.

norm1()

double quda::blas::norm1 ( const ColorSpinorFieldb )

norm2()

double quda::blas::norm2 ( const ColorSpinorFielda )

quadrupleCG3InitNorm()

double quda::blas::quadrupleCG3InitNorm ( double  a,
)

quadrupleCG3UpdateNorm()

double quda::blas::quadrupleCG3UpdateNorm ( double  a,
double  b,
)

quadrupleCGReduction()

double4 quda::blas::quadrupleCGReduction ( ColorSpinorFieldx,
)

reDotProduct() [1/2]

double quda::blas::reDotProduct ( ColorSpinorFieldx,
)

reDotProduct() [2/2]

void quda::blas::reDotProduct ( double *  result,
std::vector< ColorSpinorField * > &  a,
std::vector< ColorSpinorField * > &  b 
)

setParam()

void quda::blas::setParam ( int  kernel,
int  prec,
int  threads,
int  blocks 
)

tripleCGReduction()

double3 quda::blas::tripleCGReduction ( ColorSpinorFieldx,
)

tripleCGUpdate()

void quda::blas::tripleCGUpdate ( double  alpha,
double  beta,
)

xmyNorm()

double quda::blas::xmyNorm ( ColorSpinorFieldx,
)
inline

Definition at line 79 of file blas_quda.h.

xpay()

void quda::blas::xpay ( ColorSpinorFieldx,
double  a,
)
inline

Definition at line 45 of file blas_quda.h.

xpayz()

void quda::blas::xpayz ( ColorSpinorFieldx,
double  a,
)
inline

Definition at line 46 of file blas_quda.h.

xpy()

void quda::blas::xpy ( ColorSpinorFieldx,
)
inline

Definition at line 41 of file blas_quda.h.

xpyHeavyQuarkResidualNorm()

double3 quda::blas::xpyHeavyQuarkResidualNorm ( ColorSpinorFieldx,
)

zero()

void quda::blas::zero ( ColorSpinorFielda )

Variable Documentation

bytes

unsigned long long quda::blas::bytes
extern

flops

unsigned long long quda::blas::flops
extern

Generated on Thu Oct 28 2021 16:10:29 for QUDA by doxygen 1.9.1

AltStyle によって変換されたページ (->オリジナル) /