MAGMA  2.3.0 Matrix Algebra for GPU and Multicore Architectures
double precision

## Functions

magma_int_t magma_dftjacobi (magma_d_matrix A, magma_d_matrix b, magma_d_matrix *x, magma_d_solver_par *solver_par, magma_queue_t queue)
Iterates the solution approximation according to x^(k+1) = D^(-1) * b - D^(-1) * (L+U) * x^k x^(k+1) = c - M * x^k. More...

magma_int_t magma_djacobisetup_matrix (magma_d_matrix A, magma_d_matrix *M, magma_d_matrix *d, magma_queue_t queue)
Prepares the Matrix M for the Jacobi Iteration according to x^(k+1) = D^(-1) * b - D^(-1) * (L+U) * x^k x^(k+1) = c - M * x^k. More...

magma_int_t magma_djacobisetup_diagscal (magma_d_matrix A, magma_d_matrix *d, magma_queue_t queue)
It returns a vector d containing the inverse diagonal elements. More...

magma_int_t magma_djacobisetup_vector (magma_d_matrix b, magma_d_matrix d, magma_d_matrix *c, magma_queue_t queue)
Prepares the Jacobi Iteration according to x^(k+1) = D^(-1) * b - D^(-1) * (L+U) * x^k x^(k+1) = c - M * x^k. More...

magma_int_t magma_djacobisetup (magma_d_matrix A, magma_d_matrix b, magma_d_matrix *M, magma_d_matrix *c, magma_queue_t queue)
Prepares the Jacobi Iteration according to x^(k+1) = D^(-1) * b - D^(-1) * (L+U) * x^k x^(k+1) = c - M * x^k. More...

magma_int_t magma_djacobiiter (magma_d_matrix M, magma_d_matrix c, magma_d_matrix *x, magma_d_solver_par *solver_par, magma_queue_t queue)
Iterates the solution approximation according to x^(k+1) = D^(-1) * b - D^(-1) * (L+U) * x^k x^(k+1) = c - M * x^k. More...

magma_int_t magma_djacobiiter_precond (magma_d_matrix M, magma_d_matrix *x, magma_d_solver_par *solver_par, magma_d_preconditioner *precond, magma_queue_t queue)
Iterates the solution approximation according to x^(k+1) = D^(-1) * b - D^(-1) * (L+U) * x^k x^(k+1) = c - M * x^k. More...

magma_int_t magma_djacobiiter_sys (magma_d_matrix A, magma_d_matrix b, magma_d_matrix d, magma_d_matrix t, magma_d_matrix *x, magma_d_solver_par *solver_par, magma_queue_t queue)
Iterates the solution approximation according to x^(k+1) = D^(-1) * b - D^(-1) * (L+U) * x^k x^(k+1) = c - M * x^k. More...

magma_int_t magma_dcompactActive (magma_int_t m, magma_int_t n, magmaDouble_ptr dA, magma_int_t ldda, magmaInt_ptr active, magma_queue_t queue)
ZCOMPACTACTIVE takes a set of n vectors of size m (in dA) and an array of 1s and 0sindicating which vectors to compact (for 1s) and which to disregard (for 0s). More...

magma_int_t magma_dgeelltmv (magma_trans_t transA, magma_int_t m, magma_int_t n, magma_int_t nnz_per_row, double alpha, magmaDouble_ptr dval, magmaIndex_ptr dcolind, magmaDouble_ptr dx, double beta, magmaDouble_ptr dy, magma_queue_t queue)
This routine computes y = alpha * A^t * x + beta * y on the GPU. More...

This is an extension of the merged dot product above by chunking the set of vectors v_i such that the data always fits into cache. More...

magma_int_t magma_djacobi_diagscal (magma_int_t num_rows, magma_d_matrix d, magma_d_matrix b, magma_d_matrix *c, magma_queue_t queue)
Prepares the Jacobi Iteration according to x^(k+1) = D^(-1) * b - D^(-1) * (L+U) * x^k x^(k+1) = c - M * x^k. More...

magma_int_t magma_djacobiupdate (magma_d_matrix t, magma_d_matrix b, magma_d_matrix d, magma_d_matrix *x, magma_queue_t queue)
Updates the iteration vector x for the Jacobi iteration according to x=x+d. More...

magma_int_t magma_djacobispmvupdate (magma_int_t maxiter, magma_d_matrix A, magma_d_matrix t, magma_d_matrix b, magma_d_matrix d, magma_d_matrix *x, magma_queue_t queue)
Updates the iteration vector x for the Jacobi iteration according to x=x+d. More...

magma_int_t magma_djacobispmvupdate_bw (magma_int_t maxiter, magma_d_matrix A, magma_d_matrix t, magma_d_matrix b, magma_d_matrix d, magma_d_matrix *x, magma_queue_t queue)
Updates the iteration vector x for the Jacobi iteration according to x=x+d. More...

magma_int_t magma_djacobispmvupdateselect (magma_int_t maxiter, magma_int_t num_updates, magma_index_t *indices, magma_d_matrix A, magma_d_matrix t, magma_d_matrix b, magma_d_matrix d, magma_d_matrix tmp, magma_d_matrix *x, magma_queue_t queue)
Updates the iteration vector x for the Jacobi iteration according to x=x+d. More...

magma_int_t magma_dftjacobicontractions (magma_d_matrix xkm2, magma_d_matrix xkm1, magma_d_matrix xk, magma_d_matrix *z, magma_d_matrix *c, magma_queue_t queue)
Computes the contraction coefficients c_i: More...

magma_int_t magma_dftjacobiupdatecheck (double delta, magma_d_matrix *xold, magma_d_matrix *xnew, magma_d_matrix *zprev, magma_d_matrix c, magma_int_t *flag_t, magma_int_t *flag_fp, magma_queue_t queue)
Checks the Jacobi updates accorting to the condition in the ScaLA'15 paper. More...

This is an extension of the merged dot product above by chunking the set of vectors v_i such that the data always fits into cache. More...

## Function Documentation

 magma_int_t magma_dftjacobi ( magma_d_matrix A, magma_d_matrix b, magma_d_matrix * x, magma_d_solver_par * solver_par, magma_queue_t queue )

Iterates the solution approximation according to x^(k+1) = D^(-1) * b - D^(-1) * (L+U) * x^k x^(k+1) = c - M * x^k.

This routine takes the system matrix A and the RHS b as input. This is the fault-tolerant version of Jacobi according to ScalLA'15.

Parameters
 [in] A magma_d_matrix input matrix M = D^(-1) * (L+U) [in] b magma_d_matrix input RHS b [in,out] x magma_d_matrix* iteration vector x [in,out] solver_par magma_d_solver_par* solver parameters [in] queue magma_queue_t Queue to execute in.
 magma_int_t magma_djacobisetup_matrix ( magma_d_matrix A, magma_d_matrix * M, magma_d_matrix * d, magma_queue_t queue )

Prepares the Matrix M for the Jacobi Iteration according to x^(k+1) = D^(-1) * b - D^(-1) * (L+U) * x^k x^(k+1) = c - M * x^k.

It returns the preconditioner Matrix M and a vector d containing the diagonal elements.

Parameters
 [in] A magma_d_matrix input matrix A [in] M magma_d_matrix* M = D^(-1) * (L+U) [in,out] d magma_d_matrix* vector with diagonal elements of A [in] queue magma_queue_t Queue to execute in.
 magma_int_t magma_djacobisetup_diagscal ( magma_d_matrix A, magma_d_matrix * d, magma_queue_t queue )

It returns a vector d containing the inverse diagonal elements.

Parameters
 [in] A magma_d_matrix input matrix A [in,out] d magma_d_matrix* vector with diagonal elements [in] queue magma_queue_t Queue to execute in.
 magma_int_t magma_djacobisetup_vector ( magma_d_matrix b, magma_d_matrix d, magma_d_matrix * c, magma_queue_t queue )

Prepares the Jacobi Iteration according to x^(k+1) = D^(-1) * b - D^(-1) * (L+U) * x^k x^(k+1) = c - M * x^k.

Returns the vector c

Parameters
 [in] b magma_d_matrix RHS b [in] d magma_d_matrix vector with diagonal entries [in] c magma_d_matrix* c = D^(-1) * b [in] queue magma_queue_t Queue to execute in.
 magma_int_t magma_djacobisetup ( magma_d_matrix A, magma_d_matrix b, magma_d_matrix * M, magma_d_matrix * c, magma_queue_t queue )

Prepares the Jacobi Iteration according to x^(k+1) = D^(-1) * b - D^(-1) * (L+U) * x^k x^(k+1) = c - M * x^k.

Parameters
 [in] A magma_d_matrix input matrix A [in] b magma_d_matrix RHS b [in] M magma_d_matrix* M = D^(-1) * (L+U) [in] c magma_d_matrix* c = D^(-1) * b [in] queue magma_queue_t Queue to execute in.
 magma_int_t magma_djacobiiter ( magma_d_matrix M, magma_d_matrix c, magma_d_matrix * x, magma_d_solver_par * solver_par, magma_queue_t queue )

Iterates the solution approximation according to x^(k+1) = D^(-1) * b - D^(-1) * (L+U) * x^k x^(k+1) = c - M * x^k.

This routine takes the iteration matrix M as input.

Parameters
 [in] M magma_d_matrix input matrix M = D^(-1) * (L+U) [in] c magma_d_matrix c = D^(-1) * b [in,out] x magma_d_matrix* iteration vector x [in,out] solver_par magma_d_solver_par* solver parameters [in] queue magma_queue_t Queue to execute in.
 magma_int_t magma_djacobiiter_precond ( magma_d_matrix M, magma_d_matrix * x, magma_d_solver_par * solver_par, magma_d_preconditioner * precond, magma_queue_t queue )

Iterates the solution approximation according to x^(k+1) = D^(-1) * b - D^(-1) * (L+U) * x^k x^(k+1) = c - M * x^k.

Parameters
 [in] M magma_d_matrix input matrix M = D^(-1) * (L+U) [in,out] x magma_d_matrix* iteration vector x [in,out] solver_par magma_d_solver_par* solver parameters [in] precond magma_d_precond_par* precond parameters [in] queue magma_queue_t Queue to execute in.
 magma_int_t magma_djacobiiter_sys ( magma_d_matrix A, magma_d_matrix b, magma_d_matrix d, magma_d_matrix t, magma_d_matrix * x, magma_d_solver_par * solver_par, magma_queue_t queue )

Iterates the solution approximation according to x^(k+1) = D^(-1) * b - D^(-1) * (L+U) * x^k x^(k+1) = c - M * x^k.

This routine takes the system matrix A and the RHS b as input.

Parameters
 [in] A magma_d_matrix input matrix M = D^(-1) * (L+U) [in] b magma_d_matrix input RHS b [in] d magma_d_matrix input matrix diagonal elements diag(A) [in] t magma_d_matrix temporary vector [in,out] x magma_d_matrix* iteration vector x [in,out] solver_par magma_d_solver_par* solver parameters [in] queue magma_queue_t Queue to execute in.
 magma_int_t magma_dcompactActive ( magma_int_t m, magma_int_t n, magmaDouble_ptr dA, magma_int_t ldda, magmaInt_ptr active, magma_queue_t queue )

ZCOMPACTACTIVE takes a set of n vectors of size m (in dA) and an array of 1s and 0sindicating which vectors to compact (for 1s) and which to disregard (for 0s).

Parameters
 [in] m INTEGER The number of rows of the matrix dA. M >= 0. [in] n INTEGER The number of columns of the matrix dA. N >= 0. [in,out] dA COMPLEX DOUBLE PRECISION array, dimension (LDDA,N) The m by n matrix dA. [in] ldda INTEGER The leading dimension of the array dA. LDDA >= max(1,M). [in] active INTEGER array, dimension N A mask of 1s and 0s showing if a vector remains or has been removed [in] queue magma_queue_t Queue to execute in.
 magma_int_t magma_dgeelltmv ( magma_trans_t transA, magma_int_t m, magma_int_t n, magma_int_t nnz_per_row, double alpha, magmaDouble_ptr dval, magmaIndex_ptr dcolind, magmaDouble_ptr dx, double beta, magmaDouble_ptr dy, magma_queue_t queue )

This routine computes y = alpha * A^t * x + beta * y on the GPU.

Input format is ELL.

Parameters
 [in] transA magma_trans_t transposition parameter for A [in] m magma_int_t number of rows in A [in] n magma_int_t number of columns in A [in] nnz_per_row magma_int_t number of elements in the longest row [in] alpha double scalar multiplier [in] dval magmaDouble_ptr array containing values of A in ELL [in] dcolind magmaIndex_ptr columnindices of A in ELL [in] dx magmaDouble_ptr input vector x [in] beta double scalar multiplier [out] dy magmaDouble_ptr input/output vector y [in] queue magma_queue_t Queue to execute in.

This is an extension of the merged dot product above by chunking the set of vectors v_i such that the data always fits into cache.

It is equivalent to a matrix vecor product Vr where V contains few rows and many columns. The computation is the same:

skp = ( <v_0,r>, <v_1,r>, .. )

Returns the vector skp.

Parameters
[in]nint length of v_i and r
[in]kint

# vectors v_i

Parameters
 [in] v magmaDouble_ptr v = (v_0 .. v_i.. v_k) [in] r magmaDouble_ptr r [in] d1 magmaDouble_ptr workspace [in] d2 magmaDouble_ptr workspace [out] skp magmaDouble_ptr vector[k] of scalar products (...) [in] queue magma_queue_t Queue to execute in.
 magma_int_t magma_djacobi_diagscal ( magma_int_t num_rows, magma_d_matrix d, magma_d_matrix b, magma_d_matrix * c, magma_queue_t queue )

Prepares the Jacobi Iteration according to x^(k+1) = D^(-1) * b - D^(-1) * (L+U) * x^k x^(k+1) = c - M * x^k.

Returns the vector c. It calls a GPU kernel

Parameters
 [in] num_rows magma_int_t number of rows [in] b magma_d_matrix RHS b [in] d magma_d_matrix vector with diagonal entries [out] c magma_d_matrix* c = D^(-1) * b [in] queue magma_queue_t Queue to execute in.
 magma_int_t magma_djacobiupdate ( magma_d_matrix t, magma_d_matrix b, magma_d_matrix d, magma_d_matrix * x, magma_queue_t queue )

Updates the iteration vector x for the Jacobi iteration according to x=x+d.

*(b-t) where d is the diagonal of the system matrix A and t=Ax.

Parameters
 [in] t magma_d_matrix t = A*x [in] b magma_d_matrix RHS b [in] d magma_d_matrix vector with diagonal entries [out] x magma_d_matrix* iteration vector [in] queue magma_queue_t Queue to execute in.
 magma_int_t magma_djacobispmvupdate ( magma_int_t maxiter, magma_d_matrix A, magma_d_matrix t, magma_d_matrix b, magma_d_matrix d, magma_d_matrix * x, magma_queue_t queue )

Updates the iteration vector x for the Jacobi iteration according to x=x+d.

*(b-Ax)

Parameters
 [in] maxiter magma_int_t number of Jacobi iterations [in] A magma_d_matrix system matrix [in] t magma_d_matrix workspace [in] b magma_d_matrix RHS b [in] d magma_d_matrix vector with diagonal entries [out] x magma_d_matrix* iteration vector [in] queue magma_queue_t Queue to execute in.
 magma_int_t magma_djacobispmvupdate_bw ( magma_int_t maxiter, magma_d_matrix A, magma_d_matrix t, magma_d_matrix b, magma_d_matrix d, magma_d_matrix * x, magma_queue_t queue )

Updates the iteration vector x for the Jacobi iteration according to x=x+d.

*(b-Ax) This kernel processes the thread blocks in reversed order.

Parameters
 [in] maxiter magma_int_t number of Jacobi iterations [in] A magma_d_matrix system matrix [in] t magma_d_matrix workspace [in] b magma_d_matrix RHS b [in] d magma_d_matrix vector with diagonal entries [out] x magma_d_matrix* iteration vector [in] queue magma_queue_t Queue to execute in.
 magma_int_t magma_djacobispmvupdateselect ( magma_int_t maxiter, magma_int_t num_updates, magma_index_t * indices, magma_d_matrix A, magma_d_matrix t, magma_d_matrix b, magma_d_matrix d, magma_d_matrix tmp, magma_d_matrix * x, magma_queue_t queue )

Updates the iteration vector x for the Jacobi iteration according to x=x+d.

*(b-Ax)

This kernel allows for overlapping domains: the indices-array contains the locations that are updated. Locations may be repeated to simulate overlapping domains.

Parameters
 [in] maxiter magma_int_t number of Jacobi iterations [in] num_updates magma_int_t number of updates - length of the indices array [in] indices magma_index_t* indices, which entries of x to update [in] A magma_d_matrix system matrix [in] t magma_d_matrix workspace [in] b magma_d_matrix RHS b [in] d magma_d_matrix vector with diagonal entries [in] tmp magma_d_matrix workspace [out] x magma_d_matrix* iteration vector [in] queue magma_queue_t Queue to execute in.
 magma_int_t magma_dftjacobicontractions ( magma_d_matrix xkm2, magma_d_matrix xkm1, magma_d_matrix xk, magma_d_matrix * z, magma_d_matrix * c, magma_queue_t queue )

Computes the contraction coefficients c_i:

c_i = z_i^{k-1} / z_i^{k}

= | x_i^{k-1} - x_i^{k-2} | / |  x_i^{k} - x_i^{k-1} |

Parameters
 [in] xkm2 magma_d_matrix vector x^{k-2} [in] xkm1 magma_d_matrix vector x^{k-2} [in] xk magma_d_matrix vector x^{k-2} [out] z magma_d_matrix* ratio [out] c magma_d_matrix* contraction coefficients [in] queue magma_queue_t Queue to execute in.
 magma_int_t magma_dftjacobiupdatecheck ( double delta, magma_d_matrix * xold, magma_d_matrix * xnew, magma_d_matrix * zprev, magma_d_matrix c, magma_int_t * flag_t, magma_int_t * flag_fp, magma_queue_t queue )

Checks the Jacobi updates accorting to the condition in the ScaLA'15 paper.

Parameters
 [in] delta double threshold [in,out] xold magma_d_matrix* vector xold [in,out] xnew magma_d_matrix* vector xnew [in,out] zprev magma_d_matrix* vector z = | x_k-1 - x_k | [in] c magma_d_matrix contraction coefficients [in,out] flag_t magma_int_t threshold condition [in,out] flag_fp magma_int_t false positive condition [in] queue magma_queue_t Queue to execute in.

This is an extension of the merged dot product above by chunking the set of vectors v_i such that the data always fits into cache.

It is equivalent to a matrix vecor product Vr where V contains few rows and many columns. The computation is the same:

skp = ( <v_0,r>, <v_1,r>, .. )

Returns the vector skp.

Parameters
[in]nint length of v_i and r
[in]kint

# vectors v_i

Parameters
 [in] v magmaDouble_ptr v = (v_0 .. v_i.. v_k) [in] r magmaDouble_ptr r [in] d1 magmaDouble_ptr workspace [in] d2 magmaDouble_ptr workspace [out] skp magmaDouble_ptr vector[k] of scalar products (...) [in] queue magma_queue_t Queue to execute in.