ReproBLAS
Functions
reproBLAS.h File Reference

reproBLAS.h defines reproducible BLAS Methods. More...

#include <complex.h>

Go to the source code of this file.

Functions

double reproBLAS_rdsum (const int fold, const int N, const double *X, const int incX)
 Compute the reproducible sum of double precision vector X. More...
 
double reproBLAS_rdasum (const int fold, const int N, const double *X, const int incX)
 Compute the reproducible absolute sum of double precision vector X. More...
 
double reproBLAS_rdnrm2 (const int fold, const int N, const double *X, const int incX)
 Compute the reproducible Euclidian norm of double precision vector X. More...
 
double reproBLAS_rddot (const int fold, const int N, const double *X, const int incX, const double *Y, const int incY)
 Compute the reproducible dot product of double precision vectors X and Y. More...
 
float reproBLAS_rsdot (const int fold, const int N, const float *X, const int incX, const float *Y, const int incY)
 Compute the reproducible dot product of single precision vectors X and Y. More...
 
float reproBLAS_rsasum (const int fold, const int N, const float *X, const int incX)
 Compute the reproducible absolute sum of single precision vector X. More...
 
float reproBLAS_rssum (const int fold, const int N, const float *X, const int incX)
 Compute the reproducible sum of single precision vector X. More...
 
float reproBLAS_rsnrm2 (const int fold, const int N, const float *X, const int incX)
 Compute the reproducible Euclidian norm of single precision vector X. More...
 
void reproBLAS_rzsum_sub (const int fold, const int N, const void *X, int incX, void *sum)
 Compute the reproducible sum of complex double precision vector X. More...
 
double reproBLAS_rdzasum (const int fold, const int N, const void *X, const int incX)
 Compute the reproducible absolute sum of complex double precision vector X. More...
 
double reproBLAS_rdznrm2 (const int fold, const int N, const void *X, int incX)
 Compute the reproducible Euclidian norm of complex double precision vector X. More...
 
void reproBLAS_rzdotc_sub (const int fold, const int N, const void *X, const int incX, const void *Y, const int incY, void *dotc)
 Compute the reproducible conjugated dot product of complex double precision vectors X and Y. More...
 
void reproBLAS_rzdotu_sub (const int fold, const int N, const void *X, const int incX, const void *Y, const int incY, void *dotu)
 Compute the reproducible unconjugated dot product of complex double precision vectors X and Y. More...
 
void reproBLAS_rcsum_sub (const int fold, const int N, const void *X, const int incX, void *sum)
 Compute the reproducible sum of complex single precision vector X. More...
 
float reproBLAS_rscasum (const int fold, const int N, const void *X, const int incX)
 Compute the reproducible absolute sum of complex single precision vector X. More...
 
float reproBLAS_rscnrm2 (const int fold, const int N, const void *X, const int incX)
 Compute the reproducible Euclidian norm of complex single precision vector X. More...
 
void reproBLAS_rcdotc_sub (const int fold, const int N, const void *X, const int incX, const void *Y, const int incY, void *dotc)
 Compute the reproducible conjugated dot product of complex single precision vectors X and Y. More...
 
void reproBLAS_rcdotu_sub (const int fold, const int N, const void *X, const int incX, const void *Y, const int incY, void *dotu)
 Compute the reproducible unconjugated dot product of complex single precision vectors X and Y. More...
 
void reproBLAS_rdgemv (const int fold, const char Order, const char TransA, const int M, const int N, const double alpha, const double *A, const int lda, const double *X, const int incX, const double beta, double *Y, const int incY)
 Add to double precision vector Y the reproducible matrix-vector product of double precision matrix A and double precision vector X. More...
 
void reproBLAS_rdgemm (const int fold, const char Order, const char TransA, const char TransB, const int M, const int N, const int K, const double alpha, const double *A, const int lda, const double *B, const int ldb, const double beta, double *C, const int ldc)
 Add to double precision matrix C the reproducible matrix-matrix product of double precision matrices A and B. More...
 
void reproBLAS_rsgemv (const int fold, const char Order, const char TransA, const int M, const int N, const float alpha, const float *A, const int lda, const float *X, const int incX, const float beta, float *Y, const int incY)
 Add to single precision vector Y the reproducible matrix-vector product of single precision matrix A and single precision vector X. More...
 
void reproBLAS_rsgemm (const int fold, const char Order, const char TransA, const char TransB, const int M, const int N, const int K, const float alpha, const float *A, const int lda, const float *B, const int ldb, const float beta, float *C, const int ldc)
 Add to single precision matrix C the reproducible matrix-matrix product of single precision matrices A and B. More...
 
void reproBLAS_rzgemv (const int fold, const char Order, const char TransA, const int M, const int N, const void *alpha, const void *A, const int lda, const void *X, const int incX, const void *beta, void *Y, const int incY)
 Add to complex double precision vector Y the reproducible matrix-vector product of complex double precision matrix A and complex double precision vector X. More...
 
void reproBLAS_rzgemm (const int fold, const char Order, const char TransA, const char TransB, const int M, const int N, const int K, const void *alpha, const void *A, const int lda, const void *B, const int ldb, const void *beta, void *C, const int ldc)
 Add to complex double precision matrix C the reproducible matrix-matrix product of complex double precision matrices A and B. More...
 
void reproBLAS_rcgemv (const int fold, const char Order, const char TransA, const int M, const int N, const void *alpha, const void *A, const int lda, const void *X, const int incX, const void *beta, void *Y, const int incY)
 Add to complex single precision vector Y the reproducible matrix-vector product of complex single precision matrix A and complex single precision vector X. More...
 
void reproBLAS_rcgemm (const int fold, const char Order, const char TransA, const char TransB, const int M, const int N, const int K, const void *alpha, const void *A, const int lda, const void *B, const int ldb, const void *beta, void *C, const int ldc)
 Add to complex single precision matrix C the reproducible matrix-matrix product of complex single precision matrices A and B. More...
 
double reproBLAS_dsum (const int N, const double *X, const int incX)
 Compute the reproducible sum of double precision vector X. More...
 
double reproBLAS_dasum (const int N, const double *X, const int incX)
 Compute the reproducible absolute sum of double precision vector X. More...
 
double reproBLAS_dnrm2 (const int N, const double *X, const int incX)
 Compute the reproducible Euclidian norm of double precision vector X. More...
 
double reproBLAS_ddot (const int N, const double *X, const int incX, const double *Y, const int incY)
 Compute the reproducible dot product of double precision vectors X and Y. More...
 
float reproBLAS_sdot (const int N, const float *X, const int incX, const float *Y, const int incY)
 Compute the reproducible dot product of single precision vectors X and Y. More...
 
float reproBLAS_sasum (const int N, const float *X, const int incX)
 Compute the reproducible absolute sum of single precision vector X. More...
 
float reproBLAS_ssum (const int N, const float *X, const int incX)
 Compute the reproducible sum of single precision vector X. More...
 
float reproBLAS_snrm2 (const int N, const float *X, const int incX)
 Compute the reproducible Euclidian norm of single precision vector X. More...
 
void reproBLAS_zsum_sub (const int N, const void *X, int incX, void *sum)
 Compute the reproducible sum of complex double precision vector X. More...
 
double reproBLAS_dzasum (const int N, const void *X, const int incX)
 Compute the reproducible absolute sum of complex double precision vector X. More...
 
double reproBLAS_dznrm2 (const int N, const void *X, int incX)
 Compute the reproducible Euclidian norm of complex double precision vector X. More...
 
void reproBLAS_zdotc_sub (const int N, const void *X, const int incX, const void *Y, const int incY, void *dotc)
 Compute the reproducible conjugated dot product of complex double precision vectors X and Y. More...
 
void reproBLAS_zdotu_sub (const int N, const void *X, const int incX, const void *Y, const int incY, void *dotu)
 Compute the reproducible unconjugated dot product of complex double precision vectors X and Y. More...
 
void reproBLAS_csum_sub (const int N, const void *X, const int incX, void *sum)
 Compute the reproducible sum of complex single precision vector X. More...
 
float reproBLAS_scasum (const int N, const void *X, const int incX)
 Compute the reproducible absolute sum of complex single precision vector X. More...
 
float reproBLAS_scnrm2 (const int N, const void *X, const int incX)
 Compute the reproducible Euclidian norm of complex single precision vector X. More...
 
void reproBLAS_cdotc_sub (const int N, const void *X, const int incX, const void *Y, const int incY, void *dotc)
 Compute the reproducible conjugated dot product of complex single precision vectors X and Y. More...
 
void reproBLAS_cdotu_sub (const int N, const void *X, const int incX, const void *Y, const int incY, void *dotu)
 Compute the reproducible unconjugated dot product of complex single precision vectors X and Y. More...
 
void reproBLAS_dgemv (const char Order, const char TransA, const int M, const int N, const double alpha, const double *A, const int lda, const double *X, const int incX, const double beta, double *Y, const int incY)
 Add to double precision vector Y the reproducible matrix-vector product of double precision matrix A and double precision vector X. More...
 
void reproBLAS_dgemm (const char Order, const char TransA, const char TransB, const int M, const int N, const int K, const double alpha, const double *A, const int lda, const double *B, const int ldb, const double beta, double *C, const int ldc)
 Add to double precision matrix C the reproducible matrix-matrix product of double precision matrices A and B. More...
 
void reproBLAS_sgemv (const char Order, const char TransA, const int M, const int N, const float alpha, const float *A, const int lda, const float *X, const int incX, const float beta, float *Y, const int incY)
 Add to single precision vector Y the reproducible matrix-vector product of single precision matrix A and single precision vector X. More...
 
void reproBLAS_sgemm (const char Order, const char TransA, const char TransB, const int M, const int N, const int K, const float alpha, const float *A, const int lda, const float *B, const int ldb, const float beta, float *C, const int ldc)
 Add to single precision matrix C the reproducible matrix-matrix product of single precision matrices A and B. More...
 
void reproBLAS_zgemv (const char Order, const char TransA, const int M, const int N, const void *alpha, const void *A, const int lda, const void *X, const int incX, const void *beta, void *Y, const int incY)
 Add to complex double precision vector Y the reproducible matrix-vector product of complex double precision matrix A and complex double precision vector X. More...
 
void reproBLAS_zgemm (const char Order, const char TransA, const char TransB, const int M, const int N, const int K, const void *alpha, const void *A, const int lda, const void *B, const int ldb, const void *beta, void *C, const int ldc)
 Add to complex double precision matrix C the reproducible matrix-matrix product of complex double precision matrices A and B. More...
 
void reproBLAS_cgemv (const char Order, const char TransA, const int M, const int N, const void *alpha, const void *A, const int lda, const void *X, const int incX, const void *beta, void *Y, const int incY)
 Add to complex single precision vector Y the reproducible matrix-vector product of complex single precision matrix A and complex single precision vector X. More...
 
void reproBLAS_cgemm (const char Order, const char TransA, const char TransB, const int M, const int N, const int K, const void *alpha, const void *A, const int lda, const void *B, const int ldb, const void *beta, void *C, const int ldc)
 Add to complex single precision matrix C the reproducible matrix-matrix product of complex single precision matrices A and B. More...
 

Detailed Description

reproBLAS.h defines reproducible BLAS Methods.

This header is modeled after cblas.h, and as such functions are prefixed with character sets describing the data types they operate upon. For example, the function dfoo would perform the function foo on double possibly returning a double.

If two character sets are prefixed, the first set of characters describes the output and the second the input type. For example, the function dzbar would perform the function bar on double complex and return a double.

Such character sets are listed as follows:

Throughout the library, complex types are specified via *void pointers. These routines will sometimes be suffixed by sub, to represent that a function has been made into a subroutine. This allows programmers to use whatever complex types they are already using, as long as the memory pointed to is of the form of two adjacent floating point types, the first and second representing real and imaginary components of the complex number.

The goal of using indexed types is to obtain either more accurate or reproducible summation of floating point numbers. In reproducible summation, floating point numbers are split into several slices along predefined boundaries in the exponent range. The space between two boundaries is called a bin. Indexed types are composed of several accumulators, each accumulating the slices in a particular bin. The accumulators correspond to the largest consecutive nonzero bins seen so far.

The parameter fold describes how many accumulators are used in the indexed types supplied to a subroutine (an indexed type with k accumulators is k-fold). The default value for this parameter can be set in config.h. If you are unsure of what value to use for fold, we recommend 3. Note that the fold of indexed types must be the same for all indexed types that interact with each other. Operations on more than one indexed type assume all indexed types being operated upon have the same fold. Note that the fold of an indexed type may not be changed once the type has been allocated. A common use case would be to set the value of fold as a global macro in your code and supply it to all indexed functions that you use.

In reproBLAS, two copies of the BLAS are provided. The functions that share the same name as their BLAS counterparts perform reproducible versions of their corresponding operations using the default fold value specified in config.h. The functions that are prefixed by the character 'r' allow the user to specify their own fold for the underlying indexed types.

Function Documentation

void reproBLAS_cdotc_sub ( const int  N,
const void *  X,
const int  incX,
const void *  Y,
const int  incY,
void *  dotc 
)

Compute the reproducible conjugated dot product of complex single precision vectors X and Y.

Return the sum of the pairwise products of X and conjugated Y.

The reproducible dot product is computed with indexed types of default fold using idxdBLAS_cicdotc()

Parameters
Nvector length
Xcomplex single precision vector
incXX vector stride (use every incX'th element)
Ycomplex single precision vector
incYY vector stride (use every incY'th element)
dotcscalar return
Author
Peter Ahrens
Date
15 Jan 2016
void reproBLAS_cdotu_sub ( const int  N,
const void *  X,
const int  incX,
const void *  Y,
const int  incY,
void *  dotu 
)

Compute the reproducible unconjugated dot product of complex single precision vectors X and Y.

Return the sum of the pairwise products of X and Y.

The reproducible dot product is computed with indexed types of default fold using idxdBLAS_cicdotu()

Parameters
Nvector length
Xcomplex single precision vector
incXX vector stride (use every incX'th element)
Ycomplex single precision vector
incYY vector stride (use every incY'th element)
dotuscalar return
Author
Peter Ahrens
Date
15 Jan 2016
void reproBLAS_cgemm ( const char  Order,
const char  TransA,
const char  TransB,
const int  M,
const int  N,
const int  K,
const void *  alpha,
const void *  A,
const int  lda,
const void *  B,
const int  ldb,
const void *  beta,
void *  C,
const int  ldc 
)

Add to complex single precision matrix C the reproducible matrix-matrix product of complex single precision matrices A and B.

Performs one of the matrix-matrix operations

C := alpha*op(A)*op(B) + beta*C,

where op(X) is one of

op(X) = X or op(X) = X**T or op(X) = X**H,

alpha and beta are scalars, A and B and C are matrices with op(A) an M by K matrix, op(B) a K by N matrix, and C is an M by N matrix.

The matrix-matrix product is computed using indexed types of default fold with idxdBLAS_cicgemm()

Parameters
Ordera character specifying the matrix ordering ('r' or 'R' for row-major, 'c' or 'C' for column major)
TransAa character specifying whether or not to transpose A before taking the matrix-matrix product ('n' or 'N' not to transpose, 't' or 'T' to transpose, 'c' or 'C' to conjugate transpose)
TransBa character specifying whether or not to transpose B before taking the matrix-matrix product ('n' or 'N' not to transpose, 't' or 'T' to transpose, 'c' or 'C' to conjugate transpose)
Mnumber of rows of matrix op(A) and of the matrix C.
Nnumber of columns of matrix op(B) and of the matrix C.
Knumber of columns of matrix op(A) and columns of the matrix op(B).
alphascalar alpha
Acomplex single precision matrix of dimension (ma, lda) in row-major or (lda, na) in column-major. (ma, na) is (M, K) if A is not transposed and (K, M) otherwise.
ldathe first dimension of A as declared in the calling program. lda must be at least na in row major or ma in column major.
Bcomplex single precision matrix of dimension (mb, ldb) in row-major or (ldb, nb) in column-major. (mb, nb) is (K, N) if B is not transposed and (N, K) otherwise.
ldbthe first dimension of B as declared in the calling program. ldb must be at least nb in row major or mb in column major.
betascalar beta
Ccomplex single precision matrix of dimension (M, ldc) in row-major or (ldc, N) in column-major.
ldcthe first dimension of C as declared in the calling program. ldc must be at least N in row major or M in column major.
Author
Peter Ahrens
Date
18 Jan 2016
void reproBLAS_cgemv ( const char  Order,
const char  TransA,
const int  M,
const int  N,
const void *  alpha,
const void *  A,
const int  lda,
const void *  X,
const int  incX,
const void *  beta,
void *  Y,
const int  incY 
)

Add to complex single precision vector Y the reproducible matrix-vector product of complex single precision matrix A and complex single precision vector X.

Performs one of the matrix-vector operations

y := alpha*A*x + beta*y or y := alpha*A**T*x + beta*y or y := alpha*A**H*x + beta*y,

where alpha and beta are scalars, x and y are vectors, and A is an M by N matrix.

The matrix-vector product is computed using indexed types of default fold with idxdBLAS_cicgemv()

Parameters
Ordera character specifying the matrix ordering ('r' or 'R' for row-major, 'c' or 'C' for column major)
TransAa character specifying whether or not to transpose A before taking the matrix-vector product ('n' or 'N' not to transpose, 't' or 'T' to transpose, 'c' or 'C' to conjugate transpose)
Mnumber of rows of matrix A
Nnumber of columns of matrix A
alphascalar alpha
Acomplex single precision matrix of dimension (M, lda) in row-major or (lda, N) in column-major
ldathe first dimension of A as declared in the calling program
Xcomplex single precision vector of at least size N if not transposed or size M otherwise
incXX vector stride (use every incX'th element)
betascalar beta
Ycomplex single precision vector Y of at least size M if not transposed or size N otherwise
incYY vector stride (use every incY'th element)
Author
Peter Ahrens
Date
18 Jan 2016
void reproBLAS_csum_sub ( const int  N,
const void *  X,
const int  incX,
void *  sum 
)

Compute the reproducible sum of complex single precision vector X.

Return the sum of X.

The reproducible sum is computed with indexed types of default fold using idxdBLAS_cicsum()

Parameters
Nvector length
Xsingle precision vector
incXX vector stride (use every incX'th element)
sumscalar return
Author
Peter Ahrens
Date
15 Jan 2016
double reproBLAS_dasum ( const int  N,
const double *  X,
const int  incX 
)

Compute the reproducible absolute sum of double precision vector X.

Return the sum of absolute values of elements in X.

The reproducible absolute sum is computed with indexed types of default fold using idxdBLAS_didasum()

Parameters
Nvector length
Xdouble precision vector
incXX vector stride (use every incX'th element)
Returns
absolute sum of X
Author
Peter Ahrens
Date
15 Jan 2016
double reproBLAS_ddot ( const int  N,
const double *  X,
const int  incX,
const double *  Y,
const int  incY 
)

Compute the reproducible dot product of double precision vectors X and Y.

Return the sum of the pairwise products of X and Y.

The reproducible dot product is computed with indexed types of default fold using idxdBLAS_diddot()

Parameters
Nvector length
Xdouble precision vector
incXX vector stride (use every incX'th element)
Ydouble precision vector
incYY vector stride (use every incY'th element)
Returns
the dot product of X and Y
Author
Peter Ahrens
Date
15 Jan 2016
void reproBLAS_dgemm ( const char  Order,
const char  TransA,
const char  TransB,
const int  M,
const int  N,
const int  K,
const double  alpha,
const double *  A,
const int  lda,
const double *  B,
const int  ldb,
const double  beta,
double *  C,
const int  ldc 
)

Add to double precision matrix C the reproducible matrix-matrix product of double precision matrices A and B.

Performs one of the matrix-matrix operations

C := alpha*op(A)*op(B) + beta*C,

where op(X) is one of

op(X) = X or op(X) = X**T,

alpha and beta are scalars, A and B and C are matrices with op(A) an M by K matrix, op(B) a K by N matrix, and C is an M by N matrix.

The matrix-matrix product is computed using indexed types of default fold with idxdBLAS_didgemm()

Parameters
Ordera character specifying the matrix ordering ('r' or 'R' for row-major, 'c' or 'C' for column major)
TransAa character specifying whether or not to transpose A before taking the matrix-matrix product ('n' or 'N' not to transpose, 't' or 'T' or 'c' or 'C' to transpose)
TransBa character specifying whether or not to transpose B before taking the matrix-matrix product ('n' or 'N' not to transpose, 't' or 'T' or 'c' or 'C' to transpose)
Mnumber of rows of matrix op(A) and of the matrix C.
Nnumber of columns of matrix op(B) and of the matrix C.
Knumber of columns of matrix op(A) and columns of the matrix op(B).
alphascalar alpha
Adouble precision matrix of dimension (ma, lda) in row-major or (lda, na) in column-major. (ma, na) is (M, K) if A is not transposed and (K, M) otherwise.
ldathe first dimension of A as declared in the calling program. lda must be at least na in row major or ma in column major.
Bdouble precision matrix of dimension (mb, ldb) in row-major or (ldb, nb) in column-major. (mb, nb) is (K, N) if B is not transposed and (N, K) otherwise.
ldbthe first dimension of B as declared in the calling program. ldb must be at least nb in row major or mb in column major.
betascalar beta
Cdouble precision matrix of dimension (M, ldc) in row-major or (ldc, N) in column-major.
ldcthe first dimension of C as declared in the calling program. ldc must be at least N in row major or M in column major.
Author
Peter Ahrens
Date
18 Jan 2016
void reproBLAS_dgemv ( const char  Order,
const char  TransA,
const int  M,
const int  N,
const double  alpha,
const double *  A,
const int  lda,
const double *  X,
const int  incX,
const double  beta,
double *  Y,
const int  incY 
)

Add to double precision vector Y the reproducible matrix-vector product of double precision matrix A and double precision vector X.

Performs one of the matrix-vector operations

y := alpha*A*x + beta*y or y := alpha*A**T*x + beta*y,

where alpha and beta are scalars, x and y are vectors, and A is an M by N matrix.

The matrix-vector product is computed using indexed types of default fold with idxdBLAS_didgemv()

Parameters
Ordera character specifying the matrix ordering ('r' or 'R' for row-major, 'c' or 'C' for column major)
TransAa character specifying whether or not to transpose A before taking the matrix-vector product ('n' or 'N' not to transpose, 't' or 'T' or 'c' or 'C' to transpose)
Mnumber of rows of matrix A
Nnumber of columns of matrix A
alphascalar alpha
Adouble precision matrix of dimension (M, lda) in row-major or (lda, N) in column-major
ldathe first dimension of A as declared in the calling program
Xdouble precision vector of at least size N if not transposed or size M otherwise
incXX vector stride (use every incX'th element)
betascalar beta
Ydouble precision vector Y of at least size M if not transposed or size N otherwise
incYY vector stride (use every incY'th element)
Author
Peter Ahrens
Date
18 Jan 2016
double reproBLAS_dnrm2 ( const int  N,
const double *  X,
const int  incX 
)

Compute the reproducible Euclidian norm of double precision vector X.

Return the square root of the sum of the squared elements of X.

The reproducible Euclidian norm is computed with scaled indexed types of default fold using idxdBLAS_didssq()

Parameters
Nvector length
Xdouble precision vector
incXX vector stride (use every incX'th element)
Returns
Euclidian norm of X
Author
Peter Ahrens
Date
15 Jan 2016
double reproBLAS_dsum ( const int  N,
const double *  X,
const int  incX 
)

Compute the reproducible sum of double precision vector X.

Return the sum of X.

The reproducible sum is computed with indexed types of default fold using idxdBLAS_didsum()

Parameters
Nvector length
Xdouble precision vector
incXX vector stride (use every incX'th element)
Returns
sum of X
Author
Peter Ahrens
Date
15 Jan 2016
double reproBLAS_dzasum ( const int  N,
const void *  X,
const int  incX 
)

Compute the reproducible absolute sum of complex double precision vector X.

Return the sum of magnitudes of elements of X.

The reproducible absolute sum is computed with indexed types of default fold using idxdBLAS_dizasum()

Parameters
Nvector length
Xcomplex double precision vector
incXX vector stride (use every incX'th element)
Returns
absolute sum of X
Author
Peter Ahrens
Date
15 Jan 2016
double reproBLAS_dznrm2 ( const int  N,
const void *  X,
const int  incX 
)

Compute the reproducible Euclidian norm of complex double precision vector X.

Return the square root of the sum of the squared elements of X.

The reproducible Euclidian norm is computed with scaled indexed types of default fold using idxdBLAS_dizssq()

Parameters
Nvector length
Xcomplex double precision vector
incXX vector stride (use every incX'th element)
Returns
Euclidian norm of X
Author
Peter Ahrens
Date
15 Jan 2016
void reproBLAS_rcdotc_sub ( const int  fold,
const int  N,
const void *  X,
const int  incX,
const void *  Y,
const int  incY,
void *  dotc 
)

Compute the reproducible conjugated dot product of complex single precision vectors X and Y.

Return the sum of the pairwise products of X and conjugated Y.

The reproducible dot product is computed with indexed types using idxdBLAS_cicdotc()

Parameters
foldthe fold of the indexed types
Nvector length
Xcomplex single precision vector
incXX vector stride (use every incX'th element)
Ycomplex single precision vector
incYY vector stride (use every incY'th element)
dotcscalar return
Author
Peter Ahrens
Date
15 Jan 2016
void reproBLAS_rcdotu_sub ( const int  fold,
const int  N,
const void *  X,
const int  incX,
const void *  Y,
const int  incY,
void *  dotu 
)

Compute the reproducible unconjugated dot product of complex single precision vectors X and Y.

Return the sum of the pairwise products of X and Y.

The reproducible dot product is computed with indexed types using idxdBLAS_cicdotu()

Parameters
foldthe fold of the indexed types
Nvector length
Xcomplex single precision vector
incXX vector stride (use every incX'th element)
Ycomplex single precision vector
incYY vector stride (use every incY'th element)
dotuscalar return
Author
Peter Ahrens
Date
15 Jan 2016
void reproBLAS_rcgemm ( const int  fold,
const char  Order,
const char  TransA,
const char  TransB,
const int  M,
const int  N,
const int  K,
const void *  alpha,
const void *  A,
const int  lda,
const void *  B,
const int  ldb,
const void *  beta,
void *  C,
const int  ldc 
)

Add to complex single precision matrix C the reproducible matrix-matrix product of complex single precision matrices A and B.

Performs one of the matrix-matrix operations

C := alpha*op(A)*op(B) + beta*C,

where op(X) is one of

op(X) = X or op(X) = X**T or op(X) = X**H,

alpha and beta are scalars, A and B and C are matrices with op(A) an M by K matrix, op(B) a K by N matrix, and C is an M by N matrix.

The matrix-matrix product is computed using indexed types with idxdBLAS_cicgemm()

Parameters
foldthe fold of the indexed types
Ordera character specifying the matrix ordering ('r' or 'R' for row-major, 'c' or 'C' for column major)
TransAa character specifying whether or not to transpose A before taking the matrix-matrix product ('n' or 'N' not to transpose, 't' or 'T' to transpose, 'c' or 'C' to conjugate transpose)
TransBa character specifying whether or not to transpose B before taking the matrix-matrix product ('n' or 'N' not to transpose, 't' or 'T' to transpose, 'c' or 'C' to conjugate transpose)
Mnumber of rows of matrix op(A) and of the matrix C.
Nnumber of columns of matrix op(B) and of the matrix C.
Knumber of columns of matrix op(A) and columns of the matrix op(B).
alphascalar alpha
Acomplex single precision matrix of dimension (ma, lda) in row-major or (lda, na) in column-major. (ma, na) is (M, K) if A is not transposed and (K, M) otherwise.
ldathe first dimension of A as declared in the calling program. lda must be at least na in row major or ma in column major.
Bcomplex single precision matrix of dimension (mb, ldb) in row-major or (ldb, nb) in column-major. (mb, nb) is (K, N) if B is not transposed and (N, K) otherwise.
ldbthe first dimension of B as declared in the calling program. ldb must be at least nb in row major or mb in column major.
betascalar beta
Ccomplex single precision matrix of dimension (M, ldc) in row-major or (ldc, N) in column-major.
ldcthe first dimension of C as declared in the calling program. ldc must be at least N in row major or M in column major.
Author
Peter Ahrens
Date
18 Jan 2016
void reproBLAS_rcgemv ( const int  fold,
const char  Order,
const char  TransA,
const int  M,
const int  N,
const void *  alpha,
const void *  A,
const int  lda,
const void *  X,
const int  incX,
const void *  beta,
void *  Y,
const int  incY 
)

Add to complex single precision vector Y the reproducible matrix-vector product of complex single precision matrix A and complex single precision vector X.

Performs one of the matrix-vector operations

y := alpha*A*x + beta*y or y := alpha*A**T*x + beta*y or y := alpha*A**H*x + beta*y,

where alpha and beta are scalars, x and y are vectors, and A is an M by N matrix.

The matrix-vector product is computed using indexed types with idxdBLAS_cicgemv()

Parameters
foldthe fold of the indexed types
Ordera character specifying the matrix ordering ('r' or 'R' for row-major, 'c' or 'C' for column major)
TransAa character specifying whether or not to transpose A before taking the matrix-vector product ('n' or 'N' not to transpose, 't' or 'T' to transpose, 'c' or 'C' to conjugate transpose)
Mnumber of rows of matrix A
Nnumber of columns of matrix A
alphascalar alpha
Acomplex single precision matrix of dimension (M, lda) in row-major or (lda, N) in column-major
ldathe first dimension of A as declared in the calling program
Xcomplex single precision vector of at least size N if not transposed or size M otherwise
incXX vector stride (use every incX'th element)
betascalar beta
Ycomplex single precision vector Y of at least size M if not transposed or size N otherwise
incYY vector stride (use every incY'th element)
Author
Peter Ahrens
Date
18 Jan 2016
void reproBLAS_rcsum_sub ( const int  fold,
const int  N,
const void *  X,
const int  incX,
void *  sum 
)

Compute the reproducible sum of complex single precision vector X.

Return the sum of X.

The reproducible sum is computed with indexed types using idxdBLAS_cicsum()

Parameters
foldthe fold of the indexed types
Nvector length
Xsingle precision vector
incXX vector stride (use every incX'th element)
sumscalar return
Author
Peter Ahrens
Date
15 Jan 2016
double reproBLAS_rdasum ( const int  fold,
const int  N,
const double *  X,
const int  incX 
)

Compute the reproducible absolute sum of double precision vector X.

Return the sum of absolute values of elements in X.

The reproducible absolute sum is computed with indexed types using idxdBLAS_didasum()

Parameters
foldthe fold of the indexed types
Nvector length
Xdouble precision vector
incXX vector stride (use every incX'th element)
Returns
absolute sum of X
Author
Peter Ahrens
Date
15 Jan 2016
double reproBLAS_rddot ( const int  fold,
const int  N,
const double *  X,
const int  incX,
const double *  Y,
const int  incY 
)

Compute the reproducible dot product of double precision vectors X and Y.

Return the sum of the pairwise products of X and Y.

The reproducible dot product is computed with indexed types using idxdBLAS_diddot()

Parameters
foldthe fold of the indexed types
Nvector length
Xdouble precision vector
incXX vector stride (use every incX'th element)
Ydouble precision vector
incYY vector stride (use every incY'th element)
Returns
the dot product of X and Y
Author
Peter Ahrens
Date
15 Jan 2016
void reproBLAS_rdgemm ( const int  fold,
const char  Order,
const char  TransA,
const char  TransB,
const int  M,
const int  N,
const int  K,
const double  alpha,
const double *  A,
const int  lda,
const double *  B,
const int  ldb,
const double  beta,
double *  C,
const int  ldc 
)

Add to double precision matrix C the reproducible matrix-matrix product of double precision matrices A and B.

Performs one of the matrix-matrix operations

C := alpha*op(A)*op(B) + beta*C,

where op(X) is one of

op(X) = X or op(X) = X**T,

alpha and beta are scalars, A and B and C are matrices with op(A) an M by K matrix, op(B) a K by N matrix, and C is an M by N matrix.

The matrix-matrix product is computed using indexed types with idxdBLAS_didgemm()

Parameters
foldthe fold of the indexed types
Ordera character specifying the matrix ordering ('r' or 'R' for row-major, 'c' or 'C' for column major)
TransAa character specifying whether or not to transpose A before taking the matrix-matrix product ('n' or 'N' not to transpose, 't' or 'T' or 'c' or 'C' to transpose)
TransBa character specifying whether or not to transpose B before taking the matrix-matrix product ('n' or 'N' not to transpose, 't' or 'T' or 'c' or 'C' to transpose)
Mnumber of rows of matrix op(A) and of the matrix C.
Nnumber of columns of matrix op(B) and of the matrix C.
Knumber of columns of matrix op(A) and columns of the matrix op(B).
alphascalar alpha
Adouble precision matrix of dimension (ma, lda) in row-major or (lda, na) in column-major. (ma, na) is (M, K) if A is not transposed and (K, M) otherwise.
ldathe first dimension of A as declared in the calling program. lda must be at least na in row major or ma in column major.
Bdouble precision matrix of dimension (mb, ldb) in row-major or (ldb, nb) in column-major. (mb, nb) is (K, N) if B is not transposed and (N, K) otherwise.
ldbthe first dimension of B as declared in the calling program. ldb must be at least nb in row major or mb in column major.
betascalar beta
Cdouble precision matrix of dimension (M, ldc) in row-major or (ldc, N) in column-major.
ldcthe first dimension of C as declared in the calling program. ldc must be at least N in row major or M in column major.
Author
Peter Ahrens
Date
18 Jan 2016
void reproBLAS_rdgemv ( const int  fold,
const char  Order,
const char  TransA,
const int  M,
const int  N,
const double  alpha,
const double *  A,
const int  lda,
const double *  X,
const int  incX,
const double  beta,
double *  Y,
const int  incY 
)

Add to double precision vector Y the reproducible matrix-vector product of double precision matrix A and double precision vector X.

Performs one of the matrix-vector operations

y := alpha*A*x + beta*y or y := alpha*A**T*x + beta*y,

where alpha and beta are scalars, x and y are vectors, and A is an M by N matrix.

The matrix-vector product is computed using indexed types with idxdBLAS_didgemv()

Parameters
foldthe fold of the indexed types
Ordera character specifying the matrix ordering ('r' or 'R' for row-major, 'c' or 'C' for column major)
TransAa character specifying whether or not to transpose A before taking the matrix-vector product ('n' or 'N' not to transpose, 't' or 'T' or 'c' or 'C' to transpose)
Mnumber of rows of matrix A
Nnumber of columns of matrix A
alphascalar alpha
Adouble precision matrix of dimension (M, lda) in row-major or (lda, N) in column-major
ldathe first dimension of A as declared in the calling program
Xdouble precision vector of at least size N if not transposed or size M otherwise
incXX vector stride (use every incX'th element)
betascalar beta
Ydouble precision vector Y of at least size M if not transposed or size N otherwise
incYY vector stride (use every incY'th element)
Author
Peter Ahrens
Date
18 Jan 2016
double reproBLAS_rdnrm2 ( const int  fold,
const int  N,
const double *  X,
const int  incX 
)

Compute the reproducible Euclidian norm of double precision vector X.

Return the square root of the sum of the squared elements of X.

The reproducible Euclidian norm is computed with scaled indexed types using idxdBLAS_didssq()

Parameters
foldthe fold of the indexed types
Nvector length
Xdouble precision vector
incXX vector stride (use every incX'th element)
Returns
Euclidian norm of X
Author
Peter Ahrens
Date
15 Jan 2016
double reproBLAS_rdsum ( const int  fold,
const int  N,
const double *  X,
const int  incX 
)

Compute the reproducible sum of double precision vector X.

Return the sum of X.

The reproducible sum is computed with indexed types using idxdBLAS_didsum()

Parameters
foldthe fold of the indexed types
Nvector length
Xdouble precision vector
incXX vector stride (use every incX'th element)
Returns
sum of X
Author
Peter Ahrens
Date
15 Jan 2016
double reproBLAS_rdzasum ( const int  fold,
const int  N,
const void *  X,
const int  incX 
)

Compute the reproducible absolute sum of complex double precision vector X.

Return the sum of magnitudes of elements of X.

The reproducible absolute sum is computed with indexed types using idxdBLAS_dizasum()

Parameters
foldthe fold of the indexed types
Nvector length
Xcomplex double precision vector
incXX vector stride (use every incX'th element)
Returns
absolute sum of X
Author
Peter Ahrens
Date
15 Jan 2016
double reproBLAS_rdznrm2 ( const int  fold,
const int  N,
const void *  X,
const int  incX 
)

Compute the reproducible Euclidian norm of complex double precision vector X.

Return the square root of the sum of the squared elements of X.

The reproducible Euclidian norm is computed with scaled indexed types using idxdBLAS_dizssq()

Parameters
foldthe fold of the indexed types
Nvector length
Xcomplex double precision vector
incXX vector stride (use every incX'th element)
Returns
Euclidian norm of X
Author
Peter Ahrens
Date
15 Jan 2016
float reproBLAS_rsasum ( const int  fold,
const int  N,
const float *  X,
const int  incX 
)

Compute the reproducible absolute sum of single precision vector X.

Return the sum of absolute values of elements in X.

The reproducible absolute sum is computed with indexed types using idxdBLAS_sisasum()

Parameters
foldthe fold of the indexed types
Nvector length
Xsingle precision vector
incXX vector stride (use every incX'th element)
Returns
absolute sum of X
Author
Peter Ahrens
Date
15 Jan 2016
float reproBLAS_rscasum ( const int  fold,
const int  N,
const void *  X,
const int  incX 
)

Compute the reproducible absolute sum of complex single precision vector X.

Return the sum of magnitudes of elements of X.

The reproducible absolute sum is computed with indexed types using idxdBLAS_sicasum()

Parameters
foldthe fold of the indexed types
Nvector length
Xcomplex single precision vector
incXX vector stride (use every incX'th element)
Returns
absolute sum of X
Author
Peter Ahrens
Date
15 Jan 2016
float reproBLAS_rscnrm2 ( const int  fold,
const int  N,
const void *  X,
const int  incX 
)

Compute the reproducible Euclidian norm of complex single precision vector X.

Return the square root of the sum of the squared elements of X.

The reproducible Euclidian norm is computed with scaled indexed types using idxdBLAS_sicssq()

Parameters
foldthe fold of the indexed types
Nvector length
Xcomplex single precision vector
incXX vector stride (use every incX'th element)
Returns
Euclidian norm of X
Author
Peter Ahrens
Date
15 Jan 2016
float reproBLAS_rsdot ( const int  fold,
const int  N,
const float *  X,
const int  incX,
const float *  Y,
const int  incY 
)

Compute the reproducible dot product of single precision vectors X and Y.

Return the sum of the pairwise products of X and Y.

The reproducible dot product is computed with indexed types using idxdBLAS_sisdot()

Parameters
foldthe fold of the indexed types
Nvector length
Xsingle precision vector
incXX vector stride (use every incX'th element)
Ysingle precision vector
incYY vector stride (use every incY'th element)
Returns
the dot product of X and Y
Author
Peter Ahrens
Date
15 Jan 2016
void reproBLAS_rsgemm ( const int  fold,
const char  Order,
const char  TransA,
const char  TransB,
const int  M,
const int  N,
const int  K,
const float  alpha,
const float *  A,
const int  lda,
const float *  B,
const int  ldb,
const float  beta,
float *  C,
const int  ldc 
)

Add to single precision matrix C the reproducible matrix-matrix product of single precision matrices A and B.

Performs one of the matrix-matrix operations

C := alpha*op(A)*op(B) + beta*C,

where op(X) is one of

op(X) = X or op(X) = X**T,

alpha and beta are scalars, A and B and C are matrices with op(A) an M by K matrix, op(B) a K by N matrix, and C is an M by N matrix.

The matrix-matrix product is computed using indexed types with idxdBLAS_sisgemm()

Parameters
foldthe fold of the indexed types
Ordera character specifying the matrix ordering ('r' or 'R' for row-major, 'c' or 'C' for column major)
TransAa character specifying whether or not to transpose A before taking the matrix-matrix product ('n' or 'N' not to transpose, 't' or 'T' or 'c' or 'C' to transpose)
TransBa character specifying whether or not to transpose B before taking the matrix-matrix product ('n' or 'N' not to transpose, 't' or 'T' or 'c' or 'C' to transpose)
Mnumber of rows of matrix op(A) and of the matrix C.
Nnumber of columns of matrix op(B) and of the matrix C.
Knumber of columns of matrix op(A) and columns of the matrix op(B).
alphascalar alpha
Asingle precision matrix of dimension (ma, lda) in row-major or (lda, na) in column-major. (ma, na) is (M, K) if A is not transposed and (K, M) otherwise.
ldathe first dimension of A as declared in the calling program. lda must be at least na in row major or ma in column major.
Bsingle precision matrix of dimension (mb, ldb) in row-major or (ldb, nb) in column-major. (mb, nb) is (K, N) if B is not transposed and (N, K) otherwise.
ldbthe first dimension of B as declared in the calling program. ldb must be at least nb in row major or mb in column major.
betascalar beta
Csingle precision matrix of dimension (M, ldc) in row-major or (ldc, N) in column-major.
ldcthe first dimension of C as declared in the calling program. ldc must be at least N in row major or M in column major.
Author
Peter Ahrens
Date
18 Jan 2016
void reproBLAS_rsgemv ( const int  fold,
const char  Order,
const char  TransA,
const int  M,
const int  N,
const float  alpha,
const float *  A,
const int  lda,
const float *  X,
const int  incX,
const float  beta,
float *  Y,
const int  incY 
)

Add to single precision vector Y the reproducible matrix-vector product of single precision matrix A and single precision vector X.

Performs one of the matrix-vector operations

y := alpha*A*x + beta*y or y := alpha*A**T*x + beta*y,

where alpha and beta are scalars, x and y are vectors, and A is an M by N matrix.

The matrix-vector product is computed using indexed types with idxdBLAS_sisgemv()

Parameters
foldthe fold of the indexed types
Ordera character specifying the matrix ordering ('r' or 'R' for row-major, 'c' or 'C' for column major)
TransAa character specifying whether or not to transpose A before taking the matrix-vector product ('n' or 'N' not to transpose, 't' or 'T' or 'c' or 'C' to transpose)
Mnumber of rows of matrix A
Nnumber of columns of matrix A
alphascalar alpha
Asingle precision matrix of dimension (M, lda) in row-major or (lda, N) in column-major
ldathe first dimension of A as declared in the calling program
Xsingle precision vector of at least size N if not transposed or size M otherwise
incXX vector stride (use every incX'th element)
betascalar beta
Ysingle precision vector Y of at least size M if not transposed or size N otherwise
incYY vector stride (use every incY'th element)
Author
Peter Ahrens
Date
18 Jan 2016
float reproBLAS_rsnrm2 ( const int  fold,
const int  N,
const float *  X,
const int  incX 
)

Compute the reproducible Euclidian norm of single precision vector X.

Return the square root of the sum of the squared elements of X.

The reproducible Euclidian norm is computed with scaled indexed types using idxdBLAS_sisssq()

Parameters
foldthe fold of the indexed types
Nvector length
Xsingle precision vector
incXX vector stride (use every incX'th element)
Returns
Euclidian norm of X
Author
Peter Ahrens
Date
15 Jan 2016
float reproBLAS_rssum ( const int  fold,
const int  N,
const float *  X,
const int  incX 
)

Compute the reproducible sum of single precision vector X.

Return the sum of X.

The reproducible sum is computed with indexed types using idxdBLAS_sissum()

Parameters
foldthe fold of the indexed types
Nvector length
Xsingle precision vector
incXX vector stride (use every incX'th element)
Returns
sum of X
Author
Peter Ahrens
Date
15 Jan 2016
void reproBLAS_rzdotc_sub ( const int  fold,
const int  N,
const void *  X,
const int  incX,
const void *  Y,
const int  incY,
void *  dotc 
)

Compute the reproducible conjugated dot product of complex double precision vectors X and Y.

Return the sum of the pairwise products of X and conjugated Y.

The reproducible dot product is computed with indexed types using idxdBLAS_zizdotc()

Parameters
foldthe fold of the indexed types
Nvector length
Xcomplex double precision vector
incXX vector stride (use every incX'th element)
Ycomplex double precision vector
incYY vector stride (use every incY'th element)
dotcscalar return
Author
Peter Ahrens
Date
15 Jan 2016
void reproBLAS_rzdotu_sub ( const int  fold,
const int  N,
const void *  X,
const int  incX,
const void *  Y,
const int  incY,
void *  dotu 
)

Compute the reproducible unconjugated dot product of complex double precision vectors X and Y.

Return the sum of the pairwise products of X and Y.

The reproducible dot product is computed with indexed types using idxdBLAS_zizdotu()

Parameters
foldthe fold of the indexed types
Nvector length
Xcomplex double precision vector
incXX vector stride (use every incX'th element)
Ycomplex double precision vector
incYY vector stride (use every incY'th element)
dotuscalar return
Author
Peter Ahrens
Date
15 Jan 2016
void reproBLAS_rzgemm ( const int  fold,
const char  Order,
const char  TransA,
const char  TransB,
const int  M,
const int  N,
const int  K,
const void *  alpha,
const void *  A,
const int  lda,
const void *  B,
const int  ldb,
const void *  beta,
void *  C,
const int  ldc 
)

Add to complex double precision matrix C the reproducible matrix-matrix product of complex double precision matrices A and B.

Performs one of the matrix-matrix operations

C := alpha*op(A)*op(B) + beta*C,

where op(X) is one of

op(X) = X or op(X) = X**T or op(X) = X**H,

alpha and beta are scalars, A and B and C are matrices with op(A) an M by K matrix, op(B) a K by N matrix, and C is an M by N matrix.

The matrix-matrix product is computed using indexed types with idxdBLAS_zizgemm()

Parameters
foldthe fold of the indexed types
Ordera character specifying the matrix ordering ('r' or 'R' for row-major, 'c' or 'C' for column major)
TransAa character specifying whether or not to transpose A before taking the matrix-matrix product ('n' or 'N' not to transpose, 't' or 'T' to transpose, 'c' or 'C' to conjugate transpose)
TransBa character specifying whether or not to transpose B before taking the matrix-matrix product ('n' or 'N' not to transpose, 't' or 'T' to transpose, 'c' or 'C' to conjugate transpose)
Mnumber of rows of matrix op(A) and of the matrix C.
Nnumber of columns of matrix op(B) and of the matrix C.
Knumber of columns of matrix op(A) and columns of the matrix op(B).
alphascalar alpha
Acomplex double precision matrix of dimension (ma, lda) in row-major or (lda, na) in column-major. (ma, na) is (M, K) if A is not transposed and (K, M) otherwise.
ldathe first dimension of A as declared in the calling program. lda must be at least na in row major or ma in column major.
Bcomplex double precision matrix of dimension (mb, ldb) in row-major or (ldb, nb) in column-major. (mb, nb) is (K, N) if B is not transposed and (N, K) otherwise.
ldbthe first dimension of B as declared in the calling program. ldb must be at least nb in row major or mb in column major.
betascalar beta
Ccomplex double precision matrix of dimension (M, ldc) in row-major or (ldc, N) in column-major.
ldcthe first dimension of C as declared in the calling program. ldc must be at least N in row major or M in column major.
Author
Peter Ahrens
Date
18 Jan 2016
void reproBLAS_rzgemv ( const int  fold,
const char  Order,
const char  TransA,
const int  M,
const int  N,
const void *  alpha,
const void *  A,
const int  lda,
const void *  X,
const int  incX,
const void *  beta,
void *  Y,
const int  incY 
)

Add to complex double precision vector Y the reproducible matrix-vector product of complex double precision matrix A and complex double precision vector X.

Performs one of the matrix-vector operations

y := alpha*A*x + beta*y or y := alpha*A**T*x + beta*y or y := alpha*A**H*x + beta*y,

where alpha and beta are scalars, x and y are vectors, and A is an M by N matrix.

The matrix-vector product is computed using indexed types with idxdBLAS_zizgemv()

Parameters
foldthe fold of the indexed types
Ordera character specifying the matrix ordering ('r' or 'R' for row-major, 'c' or 'C' for column major)
TransAa character specifying whether or not to transpose A before taking the matrix-vector product ('n' or 'N' not to transpose, 't' or 'T' to transpose, 'c' or 'C' to conjugate transpose)
Mnumber of rows of matrix A
Nnumber of columns of matrix A
alphascalar alpha
Acomplex double precision matrix of dimension (M, lda) in row-major or (lda, N) in column-major
ldathe first dimension of A as declared in the calling program
Xcomplex double precision vector of at least size N if not transposed or size M otherwise
incXX vector stride (use every incX'th element)
betascalar beta
Ycomplex double precision vector Y of at least size M if not transposed or size N otherwise
incYY vector stride (use every incY'th element)
Author
Peter Ahrens
Date
18 Jan 2016
void reproBLAS_rzsum_sub ( const int  fold,
const int  N,
const void *  X,
const int  incX,
void *  sum 
)

Compute the reproducible sum of complex double precision vector X.

Return the sum of X.

The reproducible sum is computed with indexed types using idxdBLAS_zizsum()

Parameters
foldthe fold of the indexed types
Nvector length
Xcomplex double precision vector
incXX vector stride (use every incX'th element)
sumscalar return
Author
Peter Ahrens
Date
15 Jan 2016
float reproBLAS_sasum ( const int  N,
const float *  X,
const int  incX 
)

Compute the reproducible absolute sum of single precision vector X.

Return the sum of absolute values of elements in X.

The reproducible absolute sum is computed with indexed types of default fold using idxdBLAS_sisasum()

Parameters
Nvector length
Xsingle precision vector
incXX vector stride (use every incX'th element)
Returns
absolute sum of X
Author
Peter Ahrens
Date
15 Jan 2016
float reproBLAS_scasum ( const int  N,
const void *  X,
const int  incX 
)

Compute the reproducible absolute sum of complex single precision vector X.

Return the sum of magnitudes of elements of X.

The reproducible absolute sum is computed with indexed types of default fold using idxdBLAS_sicasum()

Parameters
Nvector length
Xcomplex single precision vector
incXX vector stride (use every incX'th element)
Returns
absolute sum of X
Author
Peter Ahrens
Date
15 Jan 2016
float reproBLAS_scnrm2 ( const int  N,
const void *  X,
const int  incX 
)

Compute the reproducible Euclidian norm of complex single precision vector X.

Return the square root of the sum of the squared elements of X.

The reproducible Euclidian norm is computed with scaled indexed types of default fold using idxdBLAS_sicssq()

Parameters
Nvector length
Xcomplex single precision vector
incXX vector stride (use every incX'th element)
Returns
Euclidian norm of X
Author
Peter Ahrens
Date
15 Jan 2016
float reproBLAS_sdot ( const int  N,
const float *  X,
const int  incX,
const float *  Y,
const int  incY 
)

Compute the reproducible dot product of single precision vectors X and Y.

Return the sum of the pairwise products of X and Y.

The reproducible dot product is computed with indexed types of default fold using idxdBLAS_sisdot()

Parameters
Nvector length
Xsingle precision vector
incXX vector stride (use every incX'th element)
Ysingle precision vector
incYY vector stride (use every incY'th element)
Returns
the dot product of X and Y
Author
Peter Ahrens
Date
15 Jan 2016
void reproBLAS_sgemm ( const char  Order,
const char  TransA,
const char  TransB,
const int  M,
const int  N,
const int  K,
const float  alpha,
const float *  A,
const int  lda,
const float *  B,
const int  ldb,
const float  beta,
float *  C,
const int  ldc 
)

Add to single precision matrix C the reproducible matrix-matrix product of single precision matrices A and B.

Performs one of the matrix-matrix operations

C := alpha*op(A)*op(B) + beta*C,

where op(X) is one of

op(X) = X or op(X) = X**T,

alpha and beta are scalars, A and B and C are matrices with op(A) an M by K matrix, op(B) a K by N matrix, and C is an M by N matrix.

The matrix-matrix product is computed using indexed types of default fold with idxdBLAS_sisgemm()

Parameters
Ordera character specifying the matrix ordering ('r' or 'R' for row-major, 'c' or 'C' for column major)
TransAa character specifying whether or not to transpose A before taking the matrix-matrix product ('n' or 'N' not to transpose, 't' or 'T' or 'c' or 'C' to transpose)
TransBa character specifying whether or not to transpose B before taking the matrix-matrix product ('n' or 'N' not to transpose, 't' or 'T' or 'c' or 'C' to transpose)
Mnumber of rows of matrix op(A) and of the matrix C.
Nnumber of columns of matrix op(B) and of the matrix C.
Knumber of columns of matrix op(A) and columns of the matrix op(B).
alphascalar alpha
Asingle precision matrix of dimension (ma, lda) in row-major or (lda, na) in column-major. (ma, na) is (M, K) if A is not transposed and (K, M) otherwise.
ldathe first dimension of A as declared in the calling program. lda must be at least na in row major or ma in column major.
Bsingle precision matrix of dimension (mb, ldb) in row-major or (ldb, nb) in column-major. (mb, nb) is (K, N) if B is not transposed and (N, K) otherwise.
ldbthe first dimension of B as declared in the calling program. ldb must be at least nb in row major or mb in column major.
betascalar beta
Csingle precision matrix of dimension (M, ldc) in row-major or (ldc, N) in column-major.
ldcthe first dimension of C as declared in the calling program. ldc must be at least N in row major or M in column major.
Author
Peter Ahrens
Date
18 Jan 2016
void reproBLAS_sgemv ( const char  Order,
const char  TransA,
const int  M,
const int  N,
const float  alpha,
const float *  A,
const int  lda,
const float *  X,
const int  incX,
const float  beta,
float *  Y,
const int  incY 
)

Add to single precision vector Y the reproducible matrix-vector product of single precision matrix A and single precision vector X.

Performs one of the matrix-vector operations

y := alpha*A*x + beta*y or y := alpha*A**T*x + beta*y,

where alpha and beta are scalars, x and y are vectors, and A is an M by N matrix.

The matrix-vector product is computed using indexed types of default fold with idxdBLAS_sisgemv()

Parameters
Ordera character specifying the matrix ordering ('r' or 'R' for row-major, 'c' or 'C' for column major)
TransAa character specifying whether or not to transpose A before taking the matrix-vector product ('n' or 'N' not to transpose, 't' or 'T' or 'c' or 'C' to transpose)
Mnumber of rows of matrix A
Nnumber of columns of matrix A
alphascalar alpha
Asingle precision matrix of dimension (M, lda) in row-major or (lda, N) in column-major
ldathe first dimension of A as declared in the calling program
Xsingle precision vector of at least size N if not transposed or size M otherwise
incXX vector stride (use every incX'th element)
betascalar beta
Ysingle precision vector Y of at least size M if not transposed or size N otherwise
incYY vector stride (use every incY'th element)
Author
Peter Ahrens
Date
18 Jan 2016
float reproBLAS_snrm2 ( const int  N,
const float *  X,
const int  incX 
)

Compute the reproducible Euclidian norm of single precision vector X.

Return the square root of the sum of the squared elements of X.

The reproducible Euclidian norm is computed with scaled indexed types of default fold using idxdBLAS_sisssq()

Parameters
Nvector length
Xsingle precision vector
incXX vector stride (use every incX'th element)
Returns
Euclidian norm of X
Author
Peter Ahrens
Date
15 Jan 2016
float reproBLAS_ssum ( const int  N,
const float *  X,
const int  incX 
)

Compute the reproducible sum of single precision vector X.

Return the sum of X.

The reproducible sum is computed with indexed types of default fold using idxdBLAS_sissum()

Parameters
Nvector length
Xsingle precision vector
incXX vector stride (use every incX'th element)
Returns
sum of X
Author
Peter Ahrens
Date
15 Jan 2016
void reproBLAS_zdotc_sub ( const int  N,
const void *  X,
const int  incX,
const void *  Y,
const int  incY,
void *  dotc 
)

Compute the reproducible conjugated dot product of complex double precision vectors X and Y.

Return the sum of the pairwise products of X and conjugated Y.

The reproducible dot product is computed with indexed types of default fold using idxdBLAS_zizdotc()

Parameters
Nvector length
Xcomplex double precision vector
incXX vector stride (use every incX'th element)
Ycomplex double precision vector
incYY vector stride (use every incY'th element)
dotcscalar return
Author
Peter Ahrens
Date
15 Jan 2016
void reproBLAS_zdotu_sub ( const int  N,
const void *  X,
const int  incX,
const void *  Y,
const int  incY,
void *  dotu 
)

Compute the reproducible unconjugated dot product of complex double precision vectors X and Y.

Return the sum of the pairwise products of X and Y.

The reproducible dot product is computed with indexed types of default fold using idxdBLAS_zizdotu()

Parameters
Nvector length
Xcomplex double precision vector
incXX vector stride (use every incX'th element)
Ycomplex double precision vector
incYY vector stride (use every incY'th element)
dotuscalar return
Author
Peter Ahrens
Date
15 Jan 2016
void reproBLAS_zgemm ( const char  Order,
const char  TransA,
const char  TransB,
const int  M,
const int  N,
const int  K,
const void *  alpha,
const void *  A,
const int  lda,
const void *  B,
const int  ldb,
const void *  beta,
void *  C,
const int  ldc 
)

Add to complex double precision matrix C the reproducible matrix-matrix product of complex double precision matrices A and B.

Performs one of the matrix-matrix operations

C := alpha*op(A)*op(B) + beta*C,

where op(X) is one of

op(X) = X or op(X) = X**T or op(X) = X**H,

alpha and beta are scalars, A and B and C are matrices with op(A) an M by K matrix, op(B) a K by N matrix, and C is an M by N matrix.

The matrix-matrix product is computed using indexed types of default fold with idxdBLAS_zizgemm()

Parameters
Ordera character specifying the matrix ordering ('r' or 'R' for row-major, 'c' or 'C' for column major)
TransAa character specifying whether or not to transpose A before taking the matrix-matrix product ('n' or 'N' not to transpose, 't' or 'T' to transpose, 'c' or 'C' to conjugate transpose)
TransBa character specifying whether or not to transpose B before taking the matrix-matrix product ('n' or 'N' not to transpose, 't' or 'T' to transpose, 'c' or 'C' to conjugate transpose)
Mnumber of rows of matrix op(A) and of the matrix C.
Nnumber of columns of matrix op(B) and of the matrix C.
Knumber of columns of matrix op(A) and columns of the matrix op(B).
alphascalar alpha
Acomplex double precision matrix of dimension (ma, lda) in row-major or (lda, na) in column-major. (ma, na) is (M, K) if A is not transposed and (K, M) otherwise.
ldathe first dimension of A as declared in the calling program. lda must be at least na in row major or ma in column major.
Bcomplex double precision matrix of dimension (mb, ldb) in row-major or (ldb, nb) in column-major. (mb, nb) is (K, N) if B is not transposed and (N, K) otherwise.
ldbthe first dimension of B as declared in the calling program. ldb must be at least nb in row major or mb in column major.
betascalar beta
Ccomplex double precision matrix of dimension (M, ldc) in row-major or (ldc, N) in column-major.
ldcthe first dimension of C as declared in the calling program. ldc must be at least N in row major or M in column major.
Author
Peter Ahrens
Date
18 Jan 2016
void reproBLAS_zgemv ( const char  Order,
const char  TransA,
const int  M,
const int  N,
const void *  alpha,
const void *  A,
const int  lda,
const void *  X,
const int  incX,
const void *  beta,
void *  Y,
const int  incY 
)

Add to complex double precision vector Y the reproducible matrix-vector product of complex double precision matrix A and complex double precision vector X.

Performs one of the matrix-vector operations

y := alpha*A*x + beta*y or y := alpha*A**T*x + beta*y or y := alpha*A**H*x + beta*y,

where alpha and beta are scalars, x and y are vectors, and A is an M by N matrix.

The matrix-vector product is computed using indexed types of default fold with idxdBLAS_zizgemv()

Parameters
Ordera character specifying the matrix ordering ('r' or 'R' for row-major, 'c' or 'C' for column major)
TransAa character specifying whether or not to transpose A before taking the matrix-vector product ('n' or 'N' not to transpose, 't' or 'T' to transpose, 'c' or 'C' to conjugate transpose)
Mnumber of rows of matrix A
Nnumber of columns of matrix A
alphascalar alpha
Acomplex double precision matrix of dimension (M, lda) in row-major or (lda, N) in column-major
ldathe first dimension of A as declared in the calling program
Xcomplex double precision vector of at least size N if not transposed or size M otherwise
incXX vector stride (use every incX'th element)
betascalar beta
Ycomplex double precision vector Y of at least size M if not transposed or size N otherwise
incYY vector stride (use every incY'th element)
Author
Peter Ahrens
Date
18 Jan 2016
void reproBLAS_zsum_sub ( const int  N,
const void *  X,
const int  incX,
void *  sum 
)

Compute the reproducible sum of complex double precision vector X.

Return the sum of X.

The reproducible sum is computed with indexed types of default fold using idxdBLAS_zizsum()

Parameters
Nvector length
Xcomplex double precision vector
incXX vector stride (use every incX'th element)
sumscalar return
Author
Peter Ahrens
Date
15 Jan 2016