MAGMA 2.9.0
Matrix Algebra for GPU and Multicore Architectures
Loading...
Searching...
No Matches
single precision

Functions

magma_int_t magma_sftjacobi (magma_s_matrix A, magma_s_matrix b, magma_s_matrix *x, magma_s_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.
 
magma_int_t magma_sjacobisetup_matrix (magma_s_matrix A, magma_s_matrix *M, magma_s_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.
 
magma_int_t magma_sjacobisetup_diagscal (magma_s_matrix A, magma_s_matrix *d, magma_queue_t queue)
 It returns a vector d containing the inverse diagonal elements.
 
magma_int_t magma_sjacobisetup_vector (magma_s_matrix b, magma_s_matrix d, magma_s_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.
 
magma_int_t magma_sjacobisetup (magma_s_matrix A, magma_s_matrix b, magma_s_matrix *M, magma_s_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.
 
magma_int_t magma_sjacobiiter (magma_s_matrix M, magma_s_matrix c, magma_s_matrix *x, magma_s_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.
 
magma_int_t magma_sjacobiiter_precond (magma_s_matrix M, magma_s_matrix *x, magma_s_solver_par *solver_par, magma_s_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.
 
magma_int_t magma_sjacobiiter_sys (magma_s_matrix A, magma_s_matrix b, magma_s_matrix d, magma_s_matrix t, magma_s_matrix *x, magma_s_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.
 
magma_int_t magma_scompactActive (magma_int_t m, magma_int_t n, magmaFloat_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).
 
magma_int_t magma_sgeelltmv (magma_trans_t transA, magma_int_t m, magma_int_t n, magma_int_t nnz_per_row, float alpha, magmaFloat_ptr dval, magmaIndex_ptr dcolind, magmaFloat_ptr dx, float beta, magmaFloat_ptr dy, magma_queue_t queue)
 This routine computes y = alpha * A^t * x + beta * y on the GPU.
 
magma_int_t magma_sgemvmdot (magma_int_t n, magma_int_t k, magmaFloat_ptr v, magmaFloat_ptr r, magmaFloat_ptr d1, magmaFloat_ptr d2, magmaFloat_ptr skp, magma_queue_t queue)
 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.
 
magma_int_t magma_sjacobi_diagscal (magma_int_t num_rows, magma_s_matrix d, magma_s_matrix b, magma_s_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.
 
magma_int_t magma_sjacobiupdate (magma_s_matrix t, magma_s_matrix b, magma_s_matrix d, magma_s_matrix *x, magma_queue_t queue)
 Updates the iteration vector x for the Jacobi iteration according to x=x+d.
 
magma_int_t magma_sjacobispmvupdate (magma_int_t maxiter, magma_s_matrix A, magma_s_matrix t, magma_s_matrix b, magma_s_matrix d, magma_s_matrix *x, magma_queue_t queue)
 Updates the iteration vector x for the Jacobi iteration according to x=x+d.
 
magma_int_t magma_sjacobispmvupdate_bw (magma_int_t maxiter, magma_s_matrix A, magma_s_matrix t, magma_s_matrix b, magma_s_matrix d, magma_s_matrix *x, magma_queue_t queue)
 Updates the iteration vector x for the Jacobi iteration according to x=x+d.
 
magma_int_t magma_sjacobispmvupdateselect (magma_int_t maxiter, magma_int_t num_updates, magma_index_t *indices, magma_s_matrix A, magma_s_matrix t, magma_s_matrix b, magma_s_matrix d, magma_s_matrix tmp, magma_s_matrix *x, magma_queue_t queue)
 Updates the iteration vector x for the Jacobi iteration according to x=x+d.
 
magma_int_t magma_sftjacobicontractions (magma_s_matrix xkm2, magma_s_matrix xkm1, magma_s_matrix xk, magma_s_matrix *z, magma_s_matrix *c, magma_queue_t queue)
 Computes the contraction coefficients c_i:
 
magma_int_t magma_sftjacobiupdatecheck (float delta, magma_s_matrix *xold, magma_s_matrix *xnew, magma_s_matrix *zprev, magma_s_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.
 
magma_int_t magma_sgemvmdot_shfl (magma_int_t n, magma_int_t k, magmaFloat_ptr v, magmaFloat_ptr r, magmaFloat_ptr d1, magmaFloat_ptr d2, magmaFloat_ptr skp, magma_queue_t queue)
 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.
 

Detailed Description

Function Documentation

◆ magma_sftjacobi()

magma_int_t magma_sftjacobi ( magma_s_matrix A,
magma_s_matrix b,
magma_s_matrix * x,
magma_s_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]Amagma_s_matrix input matrix M = D^(-1) * (L+U)
[in]bmagma_s_matrix input RHS b
[in,out]xmagma_s_matrix* iteration vector x
[in,out]solver_parmagma_s_solver_par* solver parameters
[in]queuemagma_queue_t Queue to execute in.

◆ magma_sjacobisetup_matrix()

magma_int_t magma_sjacobisetup_matrix ( magma_s_matrix A,
magma_s_matrix * M,
magma_s_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]Amagma_s_matrix input matrix A
[in]Mmagma_s_matrix* M = D^(-1) * (L+U)
[in,out]dmagma_s_matrix* vector with diagonal elements of A
[in]queuemagma_queue_t Queue to execute in.

◆ magma_sjacobisetup_diagscal()

magma_int_t magma_sjacobisetup_diagscal ( magma_s_matrix A,
magma_s_matrix * d,
magma_queue_t queue )

It returns a vector d containing the inverse diagonal elements.

Parameters
[in]Amagma_s_matrix input matrix A
[in,out]dmagma_s_matrix* vector with diagonal elements
[in]queuemagma_queue_t Queue to execute in.

◆ magma_sjacobisetup_vector()

magma_int_t magma_sjacobisetup_vector ( magma_s_matrix b,
magma_s_matrix d,
magma_s_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]bmagma_s_matrix RHS b
[in]dmagma_s_matrix vector with diagonal entries
[in]cmagma_s_matrix* c = D^(-1) * b
[in]queuemagma_queue_t Queue to execute in.

◆ magma_sjacobisetup()

magma_int_t magma_sjacobisetup ( magma_s_matrix A,
magma_s_matrix b,
magma_s_matrix * M,
magma_s_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]Amagma_s_matrix input matrix A
[in]bmagma_s_matrix RHS b
[in]Mmagma_s_matrix* M = D^(-1) * (L+U)
[in]cmagma_s_matrix* c = D^(-1) * b
[in]queuemagma_queue_t Queue to execute in.

◆ magma_sjacobiiter()

magma_int_t magma_sjacobiiter ( magma_s_matrix M,
magma_s_matrix c,
magma_s_matrix * x,
magma_s_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]Mmagma_s_matrix input matrix M = D^(-1) * (L+U)
[in]cmagma_s_matrix c = D^(-1) * b
[in,out]xmagma_s_matrix* iteration vector x
[in,out]solver_parmagma_s_solver_par* solver parameters
[in]queuemagma_queue_t Queue to execute in.

◆ magma_sjacobiiter_precond()

magma_int_t magma_sjacobiiter_precond ( magma_s_matrix M,
magma_s_matrix * x,
magma_s_solver_par * solver_par,
magma_s_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]Mmagma_s_matrix input matrix M = D^(-1) * (L+U)
[in,out]xmagma_s_matrix* iteration vector x
[in,out]solver_parmagma_s_solver_par* solver parameters
[in]precondmagma_s_precond_par* precond parameters
[in]queuemagma_queue_t Queue to execute in.

◆ magma_sjacobiiter_sys()

magma_int_t magma_sjacobiiter_sys ( magma_s_matrix A,
magma_s_matrix b,
magma_s_matrix d,
magma_s_matrix t,
magma_s_matrix * x,
magma_s_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]Amagma_s_matrix input matrix M = D^(-1) * (L+U)
[in]bmagma_s_matrix input RHS b
[in]dmagma_s_matrix input matrix diagonal elements diag(A)
[in]tmagma_s_matrix temporary vector
[in,out]xmagma_s_matrix* iteration vector x
[in,out]solver_parmagma_s_solver_par* solver parameters
[in]queuemagma_queue_t Queue to execute in.

◆ magma_scompactActive()

magma_int_t magma_scompactActive ( magma_int_t m,
magma_int_t n,
magmaFloat_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]mINTEGER The number of rows of the matrix dA. M >= 0.
[in]nINTEGER The number of columns of the matrix dA. N >= 0.
[in,out]dACOMPLEX REAL array, dimension (LDDA,N) The m by n matrix dA.
[in]lddaINTEGER The leading dimension of the array dA. LDDA >= max(1,M).
[in]activeINTEGER array, dimension N A mask of 1s and 0s showing if a vector remains or has been removed
[in]queuemagma_queue_t Queue to execute in.

◆ magma_sgeelltmv()

magma_int_t magma_sgeelltmv ( magma_trans_t transA,
magma_int_t m,
magma_int_t n,
magma_int_t nnz_per_row,
float alpha,
magmaFloat_ptr dval,
magmaIndex_ptr dcolind,
magmaFloat_ptr dx,
float beta,
magmaFloat_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]transAmagma_trans_t transposition parameter for A
[in]mmagma_int_t number of rows in A
[in]nmagma_int_t number of columns in A
[in]nnz_per_rowmagma_int_t number of elements in the longest row
[in]alphafloat scalar multiplier
[in]dvalmagmaFloat_ptr array containing values of A in ELL
[in]dcolindmagmaIndex_ptr columnindices of A in ELL
[in]dxmagmaFloat_ptr input vector x
[in]betafloat scalar multiplier
[out]dymagmaFloat_ptr input/output vector y
[in]queuemagma_queue_t Queue to execute in.

◆ magma_sgemvmdot()

magma_int_t magma_sgemvmdot ( magma_int_t n,
magma_int_t k,
magmaFloat_ptr v,
magmaFloat_ptr r,
magmaFloat_ptr d1,
magmaFloat_ptr d2,
magmaFloat_ptr skp,
magma_queue_t queue )

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]vmagmaFloat_ptr v = (v_0 .. v_i.. v_k)
[in]rmagmaFloat_ptr r
[in]d1magmaFloat_ptr workspace
[in]d2magmaFloat_ptr workspace
[out]skpmagmaFloat_ptr vector[k] of scalar products (<v_i,r>...)
[in]queuemagma_queue_t Queue to execute in.

◆ magma_sjacobi_diagscal()

magma_int_t magma_sjacobi_diagscal ( magma_int_t num_rows,
magma_s_matrix d,
magma_s_matrix b,
magma_s_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_rowsmagma_int_t number of rows
[in]bmagma_s_matrix RHS b
[in]dmagma_s_matrix vector with diagonal entries
[out]cmagma_s_matrix* c = D^(-1) * b
[in]queuemagma_queue_t Queue to execute in.

◆ magma_sjacobiupdate()

magma_int_t magma_sjacobiupdate ( magma_s_matrix t,
magma_s_matrix b,
magma_s_matrix d,
magma_s_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]tmagma_s_matrix t = A*x
[in]bmagma_s_matrix RHS b
[in]dmagma_s_matrix vector with diagonal entries
[out]xmagma_s_matrix* iteration vector
[in]queuemagma_queue_t Queue to execute in.

◆ magma_sjacobispmvupdate()

magma_int_t magma_sjacobispmvupdate ( magma_int_t maxiter,
magma_s_matrix A,
magma_s_matrix t,
magma_s_matrix b,
magma_s_matrix d,
magma_s_matrix * x,
magma_queue_t queue )

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

*(b-Ax)

Parameters
[in]maxitermagma_int_t number of Jacobi iterations
[in]Amagma_s_matrix system matrix
[in]tmagma_s_matrix workspace
[in]bmagma_s_matrix RHS b
[in]dmagma_s_matrix vector with diagonal entries
[out]xmagma_s_matrix* iteration vector
[in]queuemagma_queue_t Queue to execute in.

◆ magma_sjacobispmvupdate_bw()

magma_int_t magma_sjacobispmvupdate_bw ( magma_int_t maxiter,
magma_s_matrix A,
magma_s_matrix t,
magma_s_matrix b,
magma_s_matrix d,
magma_s_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]maxitermagma_int_t number of Jacobi iterations
[in]Amagma_s_matrix system matrix
[in]tmagma_s_matrix workspace
[in]bmagma_s_matrix RHS b
[in]dmagma_s_matrix vector with diagonal entries
[out]xmagma_s_matrix* iteration vector
[in]queuemagma_queue_t Queue to execute in.

◆ magma_sjacobispmvupdateselect()

magma_int_t magma_sjacobispmvupdateselect ( magma_int_t maxiter,
magma_int_t num_updates,
magma_index_t * indices,
magma_s_matrix A,
magma_s_matrix t,
magma_s_matrix b,
magma_s_matrix d,
magma_s_matrix tmp,
magma_s_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]maxitermagma_int_t number of Jacobi iterations
[in]num_updatesmagma_int_t number of updates - length of the indices array
[in]indicesmagma_index_t* indices, which entries of x to update
[in]Amagma_s_matrix system matrix
[in]tmagma_s_matrix workspace
[in]bmagma_s_matrix RHS b
[in]dmagma_s_matrix vector with diagonal entries
[in]tmpmagma_s_matrix workspace
[out]xmagma_s_matrix* iteration vector
[in]queuemagma_queue_t Queue to execute in.

◆ magma_sftjacobicontractions()

magma_int_t magma_sftjacobicontractions ( magma_s_matrix xkm2,
magma_s_matrix xkm1,
magma_s_matrix xk,
magma_s_matrix * z,
magma_s_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]xkm2magma_s_matrix vector x^{k-2}
[in]xkm1magma_s_matrix vector x^{k-2}
[in]xkmagma_s_matrix vector x^{k-2}
[out]zmagma_s_matrix* ratio
[out]cmagma_s_matrix* contraction coefficients
[in]queuemagma_queue_t Queue to execute in.

◆ magma_sftjacobiupdatecheck()

magma_int_t magma_sftjacobiupdatecheck ( float delta,
magma_s_matrix * xold,
magma_s_matrix * xnew,
magma_s_matrix * zprev,
magma_s_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]deltafloat threshold
[in,out]xoldmagma_s_matrix* vector xold
[in,out]xnewmagma_s_matrix* vector xnew
[in,out]zprevmagma_s_matrix* vector z = | x_k-1 - x_k |
[in]cmagma_s_matrix contraction coefficients
[in,out]flag_tmagma_int_t threshold condition
[in,out]flag_fpmagma_int_t false positive condition
[in]queuemagma_queue_t Queue to execute in.

◆ magma_sgemvmdot_shfl()

magma_int_t magma_sgemvmdot_shfl ( magma_int_t n,
magma_int_t k,
magmaFloat_ptr v,
magmaFloat_ptr r,
magmaFloat_ptr d1,
magmaFloat_ptr d2,
magmaFloat_ptr skp,
magma_queue_t queue )

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]vmagmaFloat_ptr v = (v_0 .. v_i.. v_k)
[in]rmagmaFloat_ptr r
[in]d1magmaFloat_ptr workspace
[in]d2magmaFloat_ptr workspace
[out]skpmagmaFloat_ptr vector[k] of scalar products (<v_i,r>...)
[in]queuemagma_queue_t Queue to execute in.