18 #include "common/common.h"
99 assert( !(cblkA->
cblktype & CBLK_COMPRESSED) );
100 assert( cblkB->
cblktype & CBLK_COMPRESSED );
101 assert( cblkA->
cblktype & CBLK_LAYOUT_2D );
109 params.
alpha = alpha;
114 params.
lwork = lwork;
134 assert( blokB <= lblokB );
136 lrA.
u = (
float*)A + blokA->
coefind - offsetA;
149 while ( ( blokA < lblokA ) &&
150 ( blokA[-1].fcblknm == blokA[0].fcblknm ) &&
151 ( blokA[-1].lcblknm == blokA[0].lcblknm ) );
224 assert( (cblkA->
cblktype & CBLK_COMPRESSED) );
225 assert( (cblkB->
cblktype & CBLK_COMPRESSED) );
231 params.
alpha = alpha;
236 params.
lwork = lwork;
252 assert( blokB <= lblokB );
263 while ( ( blokA < lblokA ) &&
264 ( blokA[-1].fcblknm == blokA[0].fcblknm ) &&
265 ( blokA[-1].lcblknm == blokA[0].lcblknm ) );
333 size_t offsetA, offsetB;
335 assert( !(cblkA->
cblktype & CBLK_COMPRESSED) );
336 assert( !(cblkB->
cblktype & CBLK_COMPRESSED) );
339 assert( cblkA->
cblktype & CBLK_LAYOUT_2D );
340 assert( cblkB->
cblktype & CBLK_LAYOUT_2D );
353 assert( blokB <= lblokB );
355 bA = A + blokA->
coefind - offsetA;
356 bB = B + blokB->
coefind - offsetB;
363 pastix_cblk_lock( cblkB );
367 pastix_cblk_unlock( cblkB );
371 while ( ( blokA < lblokA ) &&
372 ( blokA[-1].fcblknm == blokA[0].fcblknm ) &&
373 ( blokA[-1].lcblknm == blokA[0].lcblknm ) );
447 if ( cblkB->
cblktype & CBLK_COMPRESSED ) {
448 if ( cblkA->
cblktype & CBLK_COMPRESSED ) {
452 A, B, work, lwork, lowrank );
458 A, B, work, lwork, lowrank );
462 if ( cblkA->
cblktype & CBLK_COMPRESSED ) {
static pastix_fixdbl_t cpublok_sadd_lrlr(float alpha, const SolverCblk *cblkA, SolverCblk *cblkB, pastix_int_t blokA_m, pastix_int_t blokB_m, 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 cpublok_sadd_frfr(float alpha, const SolverCblk *cblkA, SolverCblk *cblkB, pastix_int_t blokA_m, pastix_int_t blokB_m, const float *A, float *B)
Add two bloks in full rank format.
static pastix_fixdbl_t cpublok_sadd_frlr(float alpha, const SolverCblk *cblkA, SolverCblk *cblkB, pastix_int_t blokA_m, pastix_int_t blokB_m, const float *A, pastix_lrblock_t *lrB, float *work, pastix_int_t lwork, const pastix_lr_t *lowrank)
Add a blok in full rank format to a 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 cpublok_sadd(float alpha, const SolverCblk *cblkA, SolverCblk *cblkB, pastix_int_t blokA_m, pastix_int_t blokB_m, const void *A, void *B, float *work, pastix_int_t lwork, const pastix_lr_t *lowrank)
Add two bloks.
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.