MAGMA  1.2.0
MatrixAlgebraonGPUandMulticoreArchitectures
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
pzpotrf.c File Reference
#include "common.h"
Include dependency graph for pzpotrf.c:

Go to the source code of this file.

Macros

#define A(m, n)   dA, m, n

Functions

void magma_pzpotrf (PLASMA_enum uplo, magma_desc_t *dA, magma_sequence_t *sequence, magma_request_t *request)

Detailed Description

MAGMA compute MAGMA is a software package provided by Univ. of Tennessee, Univ. of California Berkeley and Univ. of Colorado Denver, and INRIA Bordeaux Sud-Ouest

Version:
2.3.1
Author:
Mathieu Faverge
Cedric Augonnet
Jakub Kurzak
Hatem Ltaief
Date:
2011-06-01 normal z -> c d s

Definition in file pzpotrf.c.


Macro Definition Documentation

#define A (   m,
 
)    dA, m, n

Definition at line 21 of file pzpotrf.c.


Function Documentation

void magma_pzpotrf ( PLASMA_enum  uplo,
magma_desc_t dA,
magma_sequence_t sequence,
magma_request_t request 
)

Parallel tile Cholesky factorization - dynamic scheduling

Definition at line 27 of file pzpotrf.c.

References A, magma_desc_s::desc, magma_context_self(), MAGMA_SUCCESS, morse_options_finalize(), morse_options_init(), MORSE_zgemm(), MORSE_zherk(), MORSE_zpotrf(), MORSE_ztrsm(), MorseOption_s::nb, and magma_sequence_s::status.

{
MorseOption_t options;
PLASMA_desc A = dA->desc;
int k, m, n;
int tempkm, tempmm;
PLASMA_Complex64_t zone = (PLASMA_Complex64_t) 1.0;
PLASMA_Complex64_t mzone = (PLASMA_Complex64_t)-1.0;
magma = magma_context_self();
if (sequence->status != MAGMA_SUCCESS)
return;
morse_options_init( &options, magma, sequence, request );
/*
* PlasmaLower
*/
if (uplo == PlasmaLower) {
for (k = 0; k < A.mt; k++) {
tempkm = k == A.mt-1 ? A.m-k*A.mb : A.mb;
&options,
PlasmaLower, tempkm,
A(k, k), A.nb*k);
for (m = k+1; m < A.mt; m++) {
tempmm = m == A.mt-1 ? A.m-m*A.mb : A.mb;
&options,
PlasmaRight, PlasmaLower, PlasmaConjTrans, PlasmaNonUnit,
tempmm, A.mb,
zone, A(k, k),
A(m, k));
}
for (m = k+1; m < A.mt; m++) {
tempmm = m == A.mt-1 ? A.m-m*A.mb : A.mb;
&options,
PlasmaLower, PlasmaNoTrans,
tempmm, A.mb,
-1.0, A(m, k),
1.0, A(m, m));
for (n = k+1; n < m; n++) {
&options,
PlasmaNoTrans, PlasmaConjTrans,
tempmm, A.mb, A.mb,
mzone, A(m, k),
A(n, k),
zone, A(m, n));
}
}
}
}
/*
* PlasmaUpper
*/
else {
for (k = 0; k < A.nt; k++) {
tempkm = k == A.nt-1 ? A.n-k*A.nb : A.nb;
&options,
PlasmaUpper, tempkm,
A(k, k),
A.nb*k);
for (m = k+1; m < A.nt; m++) {
tempmm = m == A.nt-1 ? A.n-m*A.nb : A.nb;
&options,
PlasmaLeft, PlasmaUpper, PlasmaConjTrans, PlasmaNonUnit,
A.nb, tempmm,
zone, A(k, k),
A(k, m));
}
for (m = k+1; m < A.nt; m++) {
tempmm = m == A.nt-1 ? A.n-m*A.nb : A.nb;
&options,
PlasmaUpper, PlasmaConjTrans,
tempmm, A.mb,
-1.0, A(k, m),
1.0, A(m, m));
for (n = k+1; n < m; n++) {
&options,
PlasmaConjTrans, PlasmaNoTrans,
A.mb, tempmm, A.mb,
mzone, A(k, n),
A(k, m),
zone, A(n, m));
}
}
}
}
morse_options_finalize( &options, magma );
}

Here is the call graph for this function: