PLASMA  2.4.5
PLASMA - Parallel Linear Algebra for Scalable Multi-core Architectures
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
pchegst.c File Reference
#include "common.h"
Include dependency graph for pchegst.c:

Go to the source code of this file.

Macros

#define A(m, n)   BLKADDR(A, PLASMA_Complex32_t, m, n)
#define B(m, n)   BLKADDR(B, PLASMA_Complex32_t, m, n)

Functions

void plasma_pchegst_quark (PLASMA_enum itype, PLASMA_enum uplo, PLASMA_desc A, PLASMA_desc B, PLASMA_sequence *sequence, PLASMA_request *request)

Detailed Description

PLASMA auxiliary routines PLASMA is a software package provided by Univ. of Tennessee, Univ. of California Berkeley and Univ. of Colorado Denver

Version:
2.4.5
Author:
Hatem Ltaief
Date:
2010-11-15 c Tue Nov 22 14:35:43 2011

Definition in file pchegst.c.


Macro Definition Documentation

#define A (   m,
 
)    BLKADDR(A, PLASMA_Complex32_t, m, n)

Definition at line 17 of file pchegst.c.

#define B (   m,
 
)    BLKADDR(B, PLASMA_Complex32_t, m, n)

Definition at line 18 of file pchegst.c.


Function Documentation

void plasma_pchegst_quark ( PLASMA_enum  itype,
PLASMA_enum  uplo,
PLASMA_desc  A,
PLASMA_desc  B,
PLASMA_sequence sequence,
PLASMA_request request 
)

Parallel Transformation to standard eigenvalue problem - dynamic scheduler

Definition at line 22 of file pchegst.c.

References B, BLKLDD, plasma_desc_t::n, plasma_desc_t::nb, plasma_desc_t::nt, plasma_context_self(), plasma_desc_submatrix(), plasma_pchemm_quark(), plasma_pcher2k_quark(), plasma_pctrmm_quark(), plasma_pctrsm_quark(), PLASMA_SUCCESS, PlasmaConjTrans, PlasmaLeft, PlasmaLower, PlasmaNonUnit, PlasmaNoTrans, PlasmaRight, plasma_context_struct::quark, QUARK_CORE_chegst(), plasma_sequence_t::quark_sequence, QUARK_Task_Flag_Set(), Quark_Task_Flags_Initializer, plasma_sequence_t::status, and TASK_SEQUENCE.

{
int k;
int ldak, ldbk;
int tempkn;
static float done = 1.0;
static PLASMA_Complex32_t zone = 1.0;
static PLASMA_Complex32_t mzone = -1.0;
static PLASMA_Complex32_t zhalf = 0.5;
static PLASMA_Complex32_t mzhalf = -0.5;
plasma = plasma_context_self();
if (sequence->status != PLASMA_SUCCESS)
return;
QUARK_Task_Flag_Set(&task_flags, TASK_SEQUENCE, (intptr_t)sequence->quark_sequence);
if (itype == 1) {
if (uplo == PlasmaLower) {
for (k = 0; k < A.nt; k++){
tempkn = k == A.nt-1 ? A.n-k*A.nb : A.nb;
ldak = BLKLDD(A, k);
ldbk = BLKLDD(B, k);
plasma->quark, &task_flags,
itype, uplo, tempkn,
A(k, k), ldak,
B(k, k), ldbk,
sequence, request, A.nb*k);
if (k*A.nb+tempkn < A.n) {
zone,
plasma_desc_submatrix(B, k*B.nb, k*B.nb, tempkn, tempkn),
plasma_desc_submatrix(A, k*A.nb+tempkn, k*A.nb, A.n-k*A.nb-tempkn, tempkn),
sequence, request);
PlasmaRight, uplo, mzhalf,
plasma_desc_submatrix(A, k*A.nb, k*A.nb, tempkn, tempkn),
plasma_desc_submatrix(B, k*B.nb+tempkn, k*B.nb, B.n-k*B.nb-tempkn, tempkn),
zone,
plasma_desc_submatrix(A, k*A.nb+tempkn, k*A.nb, A.n-k*A.nb-tempkn, tempkn),
sequence, request);
mzone,
plasma_desc_submatrix(A, k*A.nb+tempkn, k*A.nb, A.n-k*A.nb-tempkn, tempkn),
plasma_desc_submatrix(B, k*B.nb+tempkn, k*B.nb, B.n-k*B.nb-tempkn, tempkn),
done,
plasma_desc_submatrix(A, k*A.nb+tempkn, k*A.nb+tempkn, A.n-k*A.nb-tempkn, A.n-k*A.nb-tempkn),
sequence, request);
mzhalf,
plasma_desc_submatrix(A, k*A.nb, k*A.nb, tempkn, tempkn),
plasma_desc_submatrix(B, k*B.nb+tempkn, k*B.nb, B.n-k*B.nb-tempkn, tempkn),
zone,
plasma_desc_submatrix(A, k*A.nb+tempkn, k*A.nb, A.n-k*A.nb-tempkn, tempkn),
sequence, request);
zone,
plasma_desc_submatrix(B, k*B.nb+tempkn, k*B.nb+tempkn, tempkn, tempkn),
plasma_desc_submatrix(A, k*A.nb+tempkn, k*A.nb, A.n-k*A.nb-tempkn, tempkn),
sequence, request);
}
}
}
else {
for (k = 0; k < A.nt; k++){
tempkn = k == A.nt-1 ? A.n-k*A.nb : A.nb;
ldak = BLKLDD(A, k);
ldbk = BLKLDD(B, k);
plasma->quark, &task_flags,
itype, uplo, tempkn,
A(k, k), ldak,
B(k, k), ldbk,
sequence, request, A.nb*k);
if (k*A.nb+tempkn < A.n) {
zone,
plasma_desc_submatrix(B, k*B.nb, k*B.nb, tempkn, tempkn),
plasma_desc_submatrix(A, k*A.nb, k*A.nb+tempkn, tempkn, A.n-k*A.nb-tempkn),
sequence, request);
PlasmaLeft, uplo, mzhalf,
plasma_desc_submatrix(A, k*A.nb, k*A.nb, tempkn, tempkn),
plasma_desc_submatrix(B, k*B.nb, k*B.nb+tempkn, tempkn, B.n-k*B.nb-tempkn),
zone,
plasma_desc_submatrix(A, k*A.nb, k*A.nb+tempkn, tempkn, A.n-k*A.nb-tempkn),
sequence, request);
mzone,
plasma_desc_submatrix(A, k*A.nb, k*A.nb+tempkn, tempkn, A.n-k*A.nb-tempkn),
plasma_desc_submatrix(B, k*B.nb, k*B.nb+tempkn, tempkn, B.n-k*B.nb-tempkn),
done,
plasma_desc_submatrix(A, k*A.nb+tempkn, k*A.nb+tempkn, A.n-k*A.nb-tempkn, A.n-k*A.nb-tempkn),
sequence, request);
mzhalf,
plasma_desc_submatrix(A, k*A.nb, k*A.nb, tempkn, tempkn),
plasma_desc_submatrix(B, k*B.nb, k*B.nb+tempkn, tempkn, B.n-k*B.nb-tempkn),
zone,
plasma_desc_submatrix(A, k*A.nb, k*A.nb+tempkn, tempkn, A.n-k*A.nb-tempkn),
sequence, request);
zone,
plasma_desc_submatrix(B, k*B.nb+tempkn, k*B.nb+tempkn, tempkn, tempkn),
plasma_desc_submatrix(A, k*A.nb, k*A.nb+tempkn, tempkn, A.n-k*A.nb-tempkn),
sequence, request);
}
}
}
}
else{
if (uplo == PlasmaLower) {
for (k = 0; k < A.nt; k++){
tempkn = k == A.nt-1 ? A.n-k*A.nb : A.nb;
ldak = BLKLDD(A, k);
ldbk = BLKLDD(B, k);
zone,
plasma_desc_submatrix(B, 0, 0, k*B.nb, k*B.nb),
plasma_desc_submatrix(A, k*A.nb, 0, tempkn, k*A.nb),
sequence, request);
PlasmaLeft, uplo, zhalf,
plasma_desc_submatrix(A, k*A.nb, k*A.nb, tempkn, tempkn),
plasma_desc_submatrix(B, k*B.nb, 0, tempkn, k*B.nb),
zone,
plasma_desc_submatrix(A, k*A.nb, 0, tempkn, k*A.nb),
sequence, request);
zone,
plasma_desc_submatrix(A, k*A.nb, 0, tempkn, k*A.nb),
plasma_desc_submatrix(B, k*B.nb, 0, tempkn, k*B.nb),
done,
plasma_desc_submatrix(A, 0, 0, k*A.nb, k*A.nb),
sequence, request);
PlasmaLeft, uplo, zhalf,
plasma_desc_submatrix(A, k*A.nb, k*A.nb, tempkn, tempkn),
plasma_desc_submatrix(B, k*B.nb, 0, tempkn, k*B.nb),
zone,
plasma_desc_submatrix(A, k*A.nb, 0, tempkn, k*A.nb),
sequence, request);
zone,
plasma_desc_submatrix(B, k*B.nb, k*B.nb, tempkn, tempkn),
plasma_desc_submatrix(A, k*A.nb, 0, tempkn, k*A.nb),
sequence, request);
plasma->quark, &task_flags,
itype, uplo, tempkn,
A(k, k), ldak,
B(k, k), ldbk,
sequence, request, A.nb*k);
}
}
else {
for (k = 0; k < A.nt; k++){
tempkn = k == A.nt-1 ? A.n-k*A.nb : A.nb;
ldak = BLKLDD(A, k);
ldbk = BLKLDD(B, k);
zone,
plasma_desc_submatrix(B, 0, 0, k*B.nb, k*B.nb),
plasma_desc_submatrix(A, 0, k*A.nb, k*A.nb, tempkn),
sequence, request);
PlasmaRight, uplo, zhalf,
plasma_desc_submatrix(A, k*A.nb, k*A.nb, k*A.nb, k*A.nb),
plasma_desc_submatrix(B, 0, k*B.nb, k*B.nb, tempkn),
zone,
plasma_desc_submatrix(A, 0, k*A.nb, k*A.nb, tempkn),
sequence, request);
zone,
plasma_desc_submatrix(A, 0, k*A.nb, k*A.nb, tempkn),
plasma_desc_submatrix(B, 0, k*B.nb, k*B.nb, tempkn),
done,
plasma_desc_submatrix(A, 0, 0, k*A.nb, k*A.nb),
sequence, request);
PlasmaRight, uplo, zhalf,
plasma_desc_submatrix(A, k*A.nb, k*A.nb, k*A.nb, k*A.nb),
plasma_desc_submatrix(B, 0, k*B.nb, k*B.nb, tempkn),
zone,
plasma_desc_submatrix(A, 0, k*A.nb, k*A.nb, tempkn),
sequence, request);
zone,
plasma_desc_submatrix(B, k*B.nb, k*B.nb, tempkn, tempkn),
plasma_desc_submatrix(A, 0, k*A.nb, k*A.nb, tempkn),
sequence, request);
plasma->quark, &task_flags,
itype, uplo, tempkn,
A(k, k), ldak,
B(k, k), ldbk,
sequence, request, A.nb*k);
}
}
}
}

Here is the call graph for this function: