24 #ifndef DOXYGEN_SHOULD_SKIP_THIS
25 #define MAXSIZEOFBLOCKS 64
78 if ( cabsf(*Akk) < criterion ) {
87 cblas_cscal(n-k-1, CBLAS_SADDR( alpha ), Amk, 1 );
92 cblas_csyrk( CblasColMajor, CblasLower, CblasNoTrans,
94 CBLAS_SADDR( mcone ), Amk, lda,
95 CBLAS_SADDR( cone ), Akk, lda );
146 blocknbr = pastix_iceil( n, MAXSIZEOFBLOCKS );
148 for (k=0; k<blocknbr; k++) {
150 blocksize = pastix_imin(MAXSIZEOFBLOCKS, n-k*MAXSIZEOFBLOCKS);
151 tmp = A+(k*MAXSIZEOFBLOCKS)*(lda+1);
156 if ((k*MAXSIZEOFBLOCKS+blocksize) < n) {
158 tmp1 = tmp + blocksize;
159 tmp2 = tmp1 + blocksize * lda;
161 matrixsize = n-(k*MAXSIZEOFBLOCKS+blocksize);
167 cblas_ctrsm(CblasColMajor,
168 CblasRight, CblasLower,
169 CblasTrans, CblasNonUnit,
170 matrixsize, blocksize,
171 CBLAS_SADDR(cone), tmp, lda,
175 cblas_csyrk(CblasColMajor, CblasLower, CblasNoTrans,
176 matrixsize, blocksize,
177 CBLAS_SADDR( mcone ), tmp1, lda,
178 CBLAS_SADDR( cone ), tmp2, lda);
226 stride = (cblk->
cblktype & CBLK_LAYOUT_2D) ? ncols : cblk->
stride;
232 if ( cblk->
cblktype & CBLK_COMPRESSED ) {
238 assert( lrL->
rk == -1 );
239 assert( stride == lrL->
rkmax );
245 flops = FLOPS_CPOTRF( ncols );
248 kernel_trace_stop_lvl2( flops );
253 pastix_atomic_add_32b( &(solvmtx->
nbpivots), nbpivots );
293 cblk, L, L, &(solvmtx->
lowrank) );
342 for( ; blok < lblk; blok++ )
346 if ( fcblk->
cblktype & CBLK_FANIN ) {
353 work, lwork, &(solvmtx->
lowrank) );
390 assert( cblk->
cblktype & CBLK_TASKS_2D );
397 for( i=0; blok < lblk; i++, blok++ )
399 assert( !((solvmtx->
cblktab + blok->
fcblknm)->cblktype & CBLK_RECV) );
403 while ( ( blok < lblk ) &&
404 ( blok[0].fcblknm == blok[1].fcblknm ) &&
405 ( blok[0].lcblknm == blok[1].lcblknm ) )
445 if ( fcbk->
cblktype & CBLK_FANIN ) {
455 work, lwork, &(solvmtx->
lowrank) );
460 while ( ( blok < lblk ) &&
461 ( blok[-1].fcblknm == blok[0].fcblknm ) &&
462 ( blok[-1].lcblknm == blok[0].lcblknm ) );
int cpucblk_cpxtrfsp1d_panel(SolverMatrix *solvmtx, SolverCblk *cblk, void *L)
Compute the LL^t factorization of one panel.
static void core_cpxtf2sp(pastix_int_t n, pastix_complex32_t *A, pastix_int_t lda, pastix_int_t *nbpivots, float criterion)
Compute the sequential static pivoting LL^t factorization of the matrix n-by-n A = L * L^t .
void cpucblk_cpxtrfsp1dplus_update(SolverMatrix *solvmtx, SolverBlok *blok, pastix_complex32_t *work, pastix_int_t lwork)
Apply the updates of the LL^t factorisation of a given panel.
int cpucblk_cpxtrfsp1d_pxtrf(SolverMatrix *solvmtx, SolverCblk *cblk, void *dataL)
Compute the LL^t factorization of the diagonal block in a panel.
int cpucblk_cpxtrfsp1dplus(SolverMatrix *solvmtx, SolverCblk *cblk)
Perform the LL^t factorization of a given panel.
int cpucblk_cpxtrfsp1d(SolverMatrix *solvmtx, SolverCblk *cblk, pastix_complex32_t *work, pastix_int_t lwork)
Perform the LL^t factorization of a given panel and apply all its updates.
BEGIN_C_DECLS typedef int pastix_int_t
float _Complex pastix_complex32_t
static void pqueuePush1(pastix_queue_t *q, pastix_int_t elt, double key1)
Push an element with a single key.
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.
void core_cpxtrfsp(pastix_int_t n, pastix_complex32_t *A, pastix_int_t lda, pastix_int_t *nbpivots, float criterion)
Compute the block static pivoting LL^t factorization of the matrix n-by-n A = L * L^t .
pastix_fixdbl_t cpucblk_cgemmsp(pastix_coefside_t sideA, pastix_trans_t trans, const SolverCblk *cblk, const SolverBlok *blok, SolverCblk *fcblk, const void *A, const void *B, void *C, pastix_complex32_t *work, pastix_int_t lwork, const pastix_lr_t *lowrank)
Compute the updates associated to one off-diagonal block.
void cpucblk_crelease_deps(pastix_coefside_t side, SolverMatrix *solvmtx, const SolverCblk *cblk, SolverCblk *fcbk)
Release the dependencies of the given cblk after an update.
void cpucblk_ctrsmsp(pastix_side_t side, pastix_uplo_t uplo, pastix_trans_t trans, pastix_diag_t diag, const SolverCblk *cblk, const void *A, void *C, const pastix_lr_t *lowrank)
Compute the updates associated to a column of off-diagonal blocks.
void cpucblk_calloc(pastix_coefside_t side, SolverCblk *cblk)
Allocate the cblk structure to store the coefficient.
The block low-rank structure to hold a matrix in low-rank form.
SolverBlok *restrict bloktab
static void * cblk_getdataL(const SolverCblk *cblk)
Get the pointer to the data associated to the lower part of the cblk.
SolverCblk *restrict cblktab
volatile int32_t nbpivots
Solver column block structure.
Solver column block structure.