Functions | |
magma_int_t | magma_dlobpcg_res (magma_int_t num_rows, magma_int_t num_vecs, double *evalues, double *X, double *R, double *res) |
This routine computes for Block-LOBPCG, the set of residuals. | |
magma_int_t | magma_dlobpcg_shift (magma_int_t num_rows, magma_int_t num_vecs, magma_int_t shift, double *x) |
For a Block-LOBPCG, the set of residuals (entries consecutive in memory) shrinks and the vectors are shifted in case shift residuals drop below threshold. | |
magma_int_t | magma_dcopyscale (int n, int k, double *r, double *v, double *skp) |
Computes the correction term of the pipelined GMRES according to P. | |
magma_int_t | magma_d_spmv_shift (double alpha, magma_d_sparse_matrix A, double lambda, magma_d_vector x, double beta, magma_int_t offset, magma_int_t blocksize, magma_index_t *add_rows, magma_d_vector y) |
For a given input matrix A and vectors x, y and scalars alpha, beta the wrapper determines the suitable SpMV computing y = alpha * ( A - lambda I ) * x + beta * y. |
magma_int_t magma_d_spmv_shift | ( | double | alpha, | |
magma_d_sparse_matrix | A, | |||
double | lambda, | |||
magma_d_vector | x, | |||
double | beta, | |||
magma_int_t | offset, | |||
magma_int_t | blocksize, | |||
magma_index_t * | add_rows, | |||
magma_d_vector | y | |||
) |
For a given input matrix A and vectors x, y and scalars alpha, beta the wrapper determines the suitable SpMV computing y = alpha * ( A - lambda I ) * x + beta * y.
alpha | double scalar alpha | |
A | magma_d_sparse_matrix sparse matrix A | |
lambda | double scalar lambda | |
x | magma_d_vector input vector x | |
beta | double scalar beta | |
offset | magma_int_t in case not the main diagonal is scaled | |
blocksize | magma_int_t in case of processing multiple vectors | |
add_rows | magma_int_t* in case the matrixpowerskernel is used | |
y | magma_d_vector output vector y |
magma_int_t magma_dcopyscale | ( | int | n, | |
int | k, | |||
double * | r, | |||
double * | v, | |||
double * | skp | |||
) |
Computes the correction term of the pipelined GMRES according to P.
Ghysels and scales and copies the new search direction
Returns the vector v = r/ ( skp[k] - (sum_i=1^k skp[i]^2) ) .
n | int length of v_i | |
k | int # skp entries v_i^T * r ( without r ) | |
r | double* vector of length n | |
v | double* vector of length n | |
skp | double* array of parameters |
magma_int_t magma_dlobpcg_res | ( | magma_int_t | num_rows, | |
magma_int_t | num_vecs, | |||
double * | evalues, | |||
double * | X, | |||
double * | R, | |||
double * | res | |||
) |
This routine computes for Block-LOBPCG, the set of residuals.
R = Ax - x evalues It replaces: for(int i=0; i < n; i++){ magma_daxpy(m, MAGMA_D_MAKE(-evalues[i],0),blockX+i*m,1,blockR+i*m,1); } The memory layout of x is:
/ x1[0] x2[0] x3[0] \ | x1[1] x2[1] x3[1] | x = | x1[2] x2[2] x3[2] | = x1[0] x1[1] x1[2] x1[3] x1[4] x2[0] x2[1] . | x1[3] x2[3] x3[3] | \ x1[4] x2[4] x3[4] /
num_rows | magma_int_t number of rows | |
num_vecs | magma_int_t number of vectors | |
evalues | double* array of eigenvalues/approximations | |
X | double* block of eigenvector approximations | |
R | double* block of residuals | |
res | double* array of residuals |
magma_int_t magma_dlobpcg_shift | ( | magma_int_t | num_rows, | |
magma_int_t | num_vecs, | |||
magma_int_t | shift, | |||
double * | x | |||
) |
For a Block-LOBPCG, the set of residuals (entries consecutive in memory) shrinks and the vectors are shifted in case shift residuals drop below threshold.
The memory layout of x is:
/ x1[0] x2[0] x3[0] \ | x1[1] x2[1] x3[1] | x = | x1[2] x2[2] x3[2] | = x1[0] x2[0] x3[0] x1[1] x2[1] x3[1] x1[2] . | x1[3] x2[3] x3[3] | \ x1[4] x2[4] x3[4] /
num_rows | magma_int_t number of rows | |
num_vecs | magma_int_t number of vectors | |
shift | magma_int_t shift number | |
x | double* input/output vector x |