21 #include "common/common.h"
90 assert( !(cblkA->
cblktype & CBLK_COMPRESSED) );
91 assert( cblkB->
cblktype & CBLK_COMPRESSED );
92 assert( cblkA->
cblktype & CBLK_LAYOUT_2D );
100 params.
alpha = alpha;
105 params.
lwork = lwork;
117 for (; blokA < lblokA; blokA++) {
201 assert( (cblkA->
cblktype & CBLK_COMPRESSED) );
202 assert( (cblkB->
cblktype & CBLK_COMPRESSED) );
208 params.
alpha = alpha;
213 params.
lwork = lwork;
222 for (; blokA < lblokA; blokA++, lrA++) {
289 assert( !(cblkA->
cblktype & CBLK_COMPRESSED) );
290 assert( !(cblkB->
cblktype & CBLK_COMPRESSED) );
292 assert( (A != NULL) && (B != NULL) );
298 pastix_cblk_lock( cblkB );
302 pastix_cblk_unlock( cblkB );
314 assert( cblkA->
cblktype & CBLK_LAYOUT_2D );
315 assert( cblkB->
cblktype & CBLK_LAYOUT_2D );
317 for (; blokA < lblokA; blokA++) {
334 pastix_cblk_lock( cblkB );
338 pastix_cblk_unlock( cblkB );
405 if ( cblkB->
cblktype & CBLK_COMPRESSED ) {
406 if ( cblkA->
cblktype & CBLK_COMPRESSED ) {
410 A, B, work, lwork, lowrank );
416 A, B, work, lwork, lowrank );
420 if ( cblkA->
cblktype & CBLK_COMPRESSED ) {
static pastix_fixdbl_t cpucblk_sadd_lrlr(float alpha, const SolverCblk *cblkA, SolverCblk *cblkB, const pastix_lrblock_t *lrA, pastix_lrblock_t *lrB, float *work, pastix_int_t lwork, const pastix_lr_t *lowrank)
Add two column bloks in low rank format.
static pastix_fixdbl_t cpucblk_sadd_frfr(float alpha, const SolverCblk *cblkA, SolverCblk *cblkB, const float *A, float *B)
Add two column bloks in full rank format.
static pastix_fixdbl_t cpucblk_sadd_frlr(float alpha, const SolverCblk *cblkA, SolverCblk *cblkB, const float *A, pastix_lrblock_t *lrB, float *work, pastix_int_t lwork, const pastix_lr_t *lowrank)
Add a column blok in full rank format to a column blok in low rank format.
BEGIN_C_DECLS typedef int pastix_int_t
enum pastix_ktype_e pastix_ktype_t
List of the Level 1 events that may be traced in PaStiX.
static void kernel_trace_stop(int8_t inlast, pastix_ktype_t ktype, int m, int n, int k, double flops, double starttime)
Stop the trace of a single kernel.
static double kernel_trace_start(pastix_ktype_t ktype)
Start the trace of a single kernel.
@ PastixKernelGEADDCblkFRFR
@ PastixKernelGEADDCblkLRLR
@ PastixKernelGEADDCblkFRLR
int core_sgeadd(pastix_trans_t trans, pastix_int_t M, pastix_int_t N, float alpha, const float *A, pastix_int_t LDA, float beta, float *B, pastix_int_t LDB)
Add two matrices together.
pastix_fixdbl_t cpucblk_sadd(float alpha, const SolverCblk *cblkA, SolverCblk *cblkB, const void *A, void *B, float *work, pastix_int_t lwork, const pastix_lr_t *lowrank)
Add two column bloks in full rank format.
const pastix_lrblock_t * B
const pastix_lrblock_t * A
const pastix_lr_t * lowrank
pastix_atomic_lock_t * lock
pastix_fixdbl_t core_slradd(core_slrmm_t *params, const pastix_lrblock_t *A, pastix_trans_t transV, int infomask)
Perform the addition of two low-rank matrices.
Structure to store all the parameters of the core_slrmm family functions.
#define PASTIX_LRM3_ORTHOU
Macro to specify if the U part of a low-rank matrix is orthogonal or not (Used in LRMM functions).
Structure to define the type of function to use for the low-rank kernels and their parameters.
The block low-rank structure to hold a matrix in low-rank form.
static pastix_int_t blok_rownbr(const SolverBlok *blok)
Compute the number of rows of a block.
static pastix_int_t cblk_colnbr(const SolverCblk *cblk)
Compute the number of columns in a column block.
static int is_block_inside_fblock(const SolverBlok *blok, const SolverBlok *fblok)
Check if a block is included inside another one.
pastix_atomic_lock_t lock
Solver column block structure.