STARS-H
Software for Testing Accuracy, Reliability and Scalability of Hierarchical computations
starsh.h File Reference
#include <sys/types.h>
#include <stdarg.h>
#include "starsh-constants.h"
#include "starsh-mpi.h"
#include "starsh-starpu.h"
#include "starsh-mpi-starpu.h"
Include dependency graph for starsh.h:

Go to the source code of this file.

Data Structures

struct  starsh_params
 Structure for built-in STARS-H parameters. More...
 
struct  array
 N-dimensional array. More...
 
struct  starsh_problem
 Matrix/tensor in matrix/tensor-free form. More...
 
struct  starsh_cluster
 Info about clusterization of physical data. More...
 
struct  starsh_blrf
 Non-nested block-wise low-rank format. More...
 
struct  starsh_blrm
 Non-nested block low-rank matrix. More...
 

Typedefs

typedef ssize_t STARSH_int
 STARSH signed integer to support more, than MAX_INT rows/columns.
 
typedef void STARSH_kernel(int nrows, int ncols, STARSH_int *irow, STARSH_int *icol, void *row_data, void *col_data, void *result, int ld)
 
typedef struct array Array
 
typedef struct starsh_problem STARSH_problem
 
typedef struct starsh_cluster STARSH_cluster
 
typedef struct starsh_blrf STARSH_blrf
 
typedef struct starsh_blrm STARSH_blrm
 
typedef int STARSH_blrm_approximate(STARSH_blrm **matrix, STARSH_blrf *format, int maxrank, double tol, int onfly)
 Typedef for prototype of approximation routine.
 

Functions

int starsh_init ()
 Initialize backend and low-rank engine to be used. More...
 
int starsh_set_backend (const char *string)
 Set backend (MPI or OpenMP or other scheduler) for computations. More...
 
int starsh_set_lrengine (const char *string)
 Set low-rank engine (SVD, Randomized SVD or Cross) for computations. More...
 
int starsh_set_oversample (const char *string)
 Set oversampling size for randomized SVD and RRQR. More...
 
int starsh_application (void **data, STARSH_kernel **kernel, STARSH_int count, char dtype, int problem_type, int kernel_type,...)
 Generates data and matrix kernel for one of predefined applications. More...
 
int array_from_buffer (Array **A, int ndim, int *shape, char dtype, char order, void *data)
 Init array from given buffer. More...
 
int array_new (Array **A, int ndim, int *shape, char dtype, char order)
 Init array object and allocate memory for its buffer. More...
 
int array_new_like (Array **A, Array *B)
 Init new array object with the shape, dtype and order of other. More...
 
int array_new_copy (Array **A, Array *B, char order)
 Init new array object as copy of other with given data layout. More...
 
void array_free (Array *A)
 
void array_info (Array *A)
 
void array_print (Array *A)
 
int array_to_matrix (Array *A, char kind)
 
int array_trans_inplace (Array *A)
 Transpose A by changing shape, stride and order. More...
 
int array_dot (Array *A, Array *B, Array **C)
 GEMM for A and B into C. More...
 
int array_SVD (Array *A, Array **U, Array **S, Array **V)
 Compute SVD of a given 2-dimensional A. More...
 
int SVD_get_rank (Array *S, double tol, char type, int *rank)
 Returns rank by given singular values S, tolerance and type of norm. More...
 
int array_scale (Array *A, char kind, Array *S)
 Apply row or column scaling to A. More...
 
int array_diff (Array *A, Array *B, double *result)
 Measure Frobenius error of approximation of A by B. More...
 
int array_norm (Array *A, double *result)
 Measure Frobenius norm of A. More...
 
int array_convert (Array **A, Array *B, char dtype)
 Create A as a copy of B with different data type (precision). More...
 
int array_cholesky (Array *A, char uplo)
 Cholesky factorization for A. More...
 
int starsh_problem_new (STARSH_problem **problem, int ndim, STARSH_int *shape, char symm, char dtype, void *row_data, void *col_data, STARSH_kernel *kernel, char *name)
 Init STARSH_problem object. More...
 
void starsh_problem_free (STARSH_problem *problem)
 
void starsh_problem_info (STARSH_problem *problem)
 
int starsh_problem_get_block (STARSH_problem *problem, int nrows, int ncols, STARSH_int *irow, STARSH_int *icol, Array **A)
 Get submatrix on given rows and columns. More...
 
int starsh_problem_from_array (STARSH_problem **problem, Array *A, char symm)
 Create STARSH_problem instance, based on dense array. More...
 
int starsh_problem_to_array (STARSH_problem *problem, Array **A)
 Generate dense array by a given problem. More...
 
int starsh_cluster_new (STARSH_cluster **cluster, void *data, STARSH_int ndata, STARSH_int *pivot, STARSH_int nblocks, STARSH_int nlevels, STARSH_int *level, STARSH_int *start, STARSH_int *size, STARSH_int *parent, STARSH_int *child_start, STARSH_int *child, enum STARSH_CLUSTER_TYPE type)
 Init STARSH_cluster object. More...
 
void starsh_cluster_free (STARSH_cluster *cluster)
 
void starsh_cluster_info (STARSH_cluster *cluster)
 
int starsh_cluster_new_plain (STARSH_cluster **cluster, void *data, STARSH_int ndata, STARSH_int block_size)
 Plain division of data into blocks of discrete elements. More...
 
int starsh_blrf_new (STARSH_blrf **format, STARSH_problem *problem, char symm, STARSH_cluster *row_cluster, STARSH_cluster *col_cluster, STARSH_int nbrows, STARSH_int nbcols, STARSH_int nblocks_far, STARSH_int *block_far, STARSH_int *brow_far_start, STARSH_int *brow_far, STARSH_int *bcol_far_start, STARSH_int *bcol_far, STARSH_int nblocks_far_local, STARSH_int *block_far_local, STARSH_int nblocks_near, STARSH_int *block_near, STARSH_int *brow_near_start, STARSH_int *brow_near, STARSH_int *bcol_near_start, STARSH_int *bcol_near, STARSH_int nblocks_near_local, STARSH_int *block_near_local, enum STARSH_BLRF_TYPE type)
 Init STARSH_blrf object. More...
 
int starsh_blrf_new_from_coo (STARSH_blrf **format, STARSH_problem *problem, char symm, STARSH_cluster *row_cluster, STARSH_cluster *col_cluster, STARSH_int nblocks_far, STARSH_int *block_far, STARSH_int nblocks_near, STARSH_int *block_near, enum STARSH_BLRF_TYPE type)
 Init STARSH_blrf object by lists of admissible blocks. More...
 
int starsh_blrf_new_tlr (STARSH_blrf **format, STARSH_problem *problem, char symm, STARSH_cluster *row_cluster, STARSH_cluster *col_cluster)
 TLR partitioning of problem with given plain clusters. More...
 
void starsh_blrf_free (STARSH_blrf *format)
 
void starsh_blrf_info (STARSH_blrf *format)
 
void starsh_blrf_print (STARSH_blrf *format)
 
int starsh_blrf_get_block (STARSH_blrf *format, STARSH_int i, STARSH_int j, int *shape, void **D)
 Returns dense block on intersection of given block row and column. More...
 
int starsh_blrm_new (STARSH_blrm **matrix, STARSH_blrf *format, int *far_rank, Array **far_U, Array **far_V, int onfly, Array **near_D, void *alloc_U, void *alloc_V, void *alloc_D, char alloc_type)
 Init STARSH_blrm object. More...
 
void starsh_blrm_free (STARSH_blrm *matrix)
 
void starsh_blrm_info (STARSH_blrm *matrix)
 
int starsh_blrm_get_block (STARSH_blrm *matrix, STARSH_int i, STARSH_int j, int *shape, int *rank, void **U, void **V, void **D)
 Get shape, rank and low-rank factors or dense representation of a block. More...
 
int starsh_blrm__dsdd (STARSH_blrm **matrix, STARSH_blrf *format, int maxrank, double tol, int onfly)
 Approximate each tile by divide-and-conquer SVD (GESDD function). More...
 
int starsh_blrm__drsdd (STARSH_blrm **matrix, STARSH_blrf *format, int maxrank, double tol, int onfly)
 Approximate each tile by randomized SVD. More...
 
int starsh_blrm__dqp3 (STARSH_blrm **matrix, STARSH_blrf *format, int maxrank, double tol, int onfly)
 Approximate each tile of BLR matrix with RRQR (GEQP3 function). More...
 
int starsh_blrm__dsdd_omp (STARSH_blrm **matrix, STARSH_blrf *format, int maxrank, double tol, int onfly)
 Approximate each tile by divide-and-conquer SVD (GESDD function). More...
 
int starsh_blrm__drsdd_omp (STARSH_blrm **matrix, STARSH_blrf *format, int maxrank, double tol, int onfly)
 Approximate each tile by randomized SVD. More...
 
int starsh_blrm__dqp3_omp (STARSH_blrm **matrix, STARSH_blrf *format, int maxrank, double tol, int onfly)
 Approximate each tile of BLR matrix with RRQR (GEQP3 function). More...
 
int starsh_blrm__dmml (STARSH_blrm *matrix, int nrhs, double alpha, double *A, int lda, double beta, double *B, int ldb)
 Multiply blr-matrix by dense matrix. More...
 
int starsh_blrm__dmml_omp (STARSH_blrm *matrix, int nrhs, double alpha, double *A, int lda, double beta, double *B, int ldb)
 Multiply blr-matrix by dense matrix. More...
 
double starsh_blrm__dfe (STARSH_blrm *matrix)
 Approximation error in Frobenius norm of double precision matrix. More...
 
double starsh_blrm__dfe_omp (STARSH_blrm *matrix)
 Approximation error in Frobenius norm of double precision matrix. More...
 
int starsh_blrm__dca (STARSH_blrm *matrix, Array *A)
 Convert double precision block low-rank matrix to dense Array. More...
 
int starsh_dense_dsvfr (int size, double *S, double tol)
 Returns rank of double precision singular values. More...
 
void starsh_dense_dlrsdd (int nrows, int ncols, double *D, int ldD, double *U, int ldU, double *V, int ldV, int *rank, int maxrank, double tol, double *work, int lwork, int *iwork)
 SVD approximation of a dense double precision matrix. More...
 
void starsh_dense_dlrrsdd (int nrows, int ncols, double *D, int ldD, double *U, int ldU, double *V, int ldV, int *rank, int maxrank, int oversample, double tol, double *work, int lwork, int *iwork)
 Randomized SVD approximation of a dense double precision matrix. More...
 
void starsh_dense_dlrqp3 (int nrows, int ncols, double *D, int ldD, double *U, int ldU, double *V, int ldV, int *rank, int maxrank, int oversample, double tol, double *work, int lwork, int *iwork)
 Rank-revealing QR approximation of a dense double precision matrix. More...
 
void starsh_dense_dlrna (int nrows, int ncols, double *D, double *U, double *V, int *rank, int maxrank, double tol, double *work, int lwork, int *iwork)
 Fake approximation schemes, that returns rank=-1. More...
 
int starsh_itersolvers__dcg_omp (STARSH_blrm *matrix, int nrhs, double *B, int ldb, double *X, int ldx, double tol, double *work)
 Conjugate gradient method for STARSH_blrm object. More...
 

Variables

struct starsh_params starsh_params
 Built-in parameters of STARS-H, accessible through environment.
 
STARSH_blrm_approximatestarsh_blrm_approximate
 

Detailed Description

STARS-H is a software package, provided by King Abdullah University of Science and Technology (KAUST)

Version
0.1.1
Author
Aleksandr Mikhalev
Date
2018-11-06