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
pdgelqfrh.c File Reference
#include "common.h"
Include dependency graph for pdgelqfrh.c:

Go to the source code of this file.

Macros

#define A(m, n)   BLKADDR(A, double, (m), (n))
#define T(m, n)   BLKADDR(T, double, (m), (n))
#define T2(m, n)   BLKADDR(T, double, (m), (n)+A.nt)

Functions

void plasma_pdgelqfrh_quark (PLASMA_desc A, PLASMA_desc T, int BS, 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:
Jakub Kurzak
Hatem Ltaief
Dulceneia Becker
Date:
2010-11-15 d Tue Nov 22 14:35:38 2011

Definition in file pdgelqfrh.c.


Macro Definition Documentation

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

Definition at line 19 of file pdgelqfrh.c.

#define T (   m,
 
)    BLKADDR(T, double, (m), (n))

Definition at line 20 of file pdgelqfrh.c.

#define T2 (   m,
 
)    BLKADDR(T, double, (m), (n)+A.nt)

Definition at line 21 of file pdgelqfrh.c.


Function Documentation

void plasma_pdgelqfrh_quark ( PLASMA_desc  A,
PLASMA_desc  T,
int  BS,
PLASMA_sequence sequence,
PLASMA_request request 
)

Parallel tile LQ factorization (reduction Householder) - dynamic scheduling

Definition at line 25 of file pdgelqfrh.c.

References A, BLKLDD, plasma_desc_t::m, plasma_desc_t::mb, min, plasma_desc_t::mt, plasma_desc_t::n, plasma_desc_t::nb, plasma_desc_t::nt, plasma_context_self(), PLASMA_IB, PLASMA_SUCCESS, PlasmaRight, PlasmaTrans, plasma_context_struct::quark, QUARK_CORE_dgelqt(), QUARK_CORE_dormlq(), QUARK_CORE_dtslqt(), QUARK_CORE_dtsmlq(), QUARK_CORE_dttlqt(), QUARK_CORE_dttmlq(), plasma_sequence_t::quark_sequence, QUARK_Task_Flag_Set(), Quark_Task_Flags_Initializer, plasma_sequence_t::status, T, T2, and TASK_SEQUENCE.

{
int k, m, n;
int N, RD;
int ldak, ldam;
int tempkmin, tempkm, tempNn, tempnn, tempmm, tempNRDn;
int ib;
plasma = plasma_context_self();
if (sequence->status != PLASMA_SUCCESS)
return;
QUARK_Task_Flag_Set(&task_flags, TASK_SEQUENCE, (intptr_t)sequence->quark_sequence);
ib = PLASMA_IB;
for (k = 0; k < min(A.mt, A.nt); k++) {
tempkm = k == A.mt-1 ? A.m-k*A.mb : A.mb;
ldak = BLKLDD(A, k);
for (N = k; N < A.nt; N += BS) {
tempNn = N == A.nt-1 ? A.n-N*A.nb : A.nb;
tempkmin = min(tempkm, tempNn);
plasma->quark, &task_flags,
tempkm, tempNn, ib, T.nb,
A(k, N), ldak,
T(k, N), T.mb);
for (m = k+1; m < A.mt; m++) {
tempmm = m == A.mt-1 ? A.m-m*A.mb : A.mb;
ldam = BLKLDD(A, m);
plasma->quark, &task_flags,
tempmm, tempNn, tempkmin, ib, T.nb,
A(k, N), ldak,
T(k, N), T.mb,
A(m, N), ldam);
}
for (n = N+1; n < min(N+BS, A.nt); n++) {
tempnn = n == A.nt-1 ? A.n-n*A.nb : A.nb;
plasma->quark, &task_flags,
tempkm, tempnn, ib, T.nb,
A(k, N), ldak,
A(k, n), ldak,
T(k, n), T.mb);
for (m = k+1; m < A.mt; m++) {
tempmm = m == A.mt-1 ? A.m-m*A.mb : A.mb;
ldam = BLKLDD(A, m);
plasma->quark, &task_flags,
tempmm, A.nb, tempmm, tempnn, tempkm, ib, T.nb,
A(m, N), ldam,
A(m, n), ldam,
A(k, n), ldak,
T(k, n), T.mb);
}
}
}
for (RD = BS; RD < A.nt-k; RD *= 2) {
for (N = k; N+RD < A.nt; N += 2*RD) {
tempNRDn = N+RD == A.nt-1 ? A.n-(N+RD)*A.nb : A.nb;
plasma->quark, &task_flags,
tempkm, tempNRDn, ib, T.nb,
A (k, N ), ldak,
A (k, N+RD), ldak,
T2(k, N+RD), T.mb);
for (m = k+1; m < A.mt; m++) {
tempmm = m == A.mt-1 ? A.m-m*A.mb : A.mb;
ldam = BLKLDD(A, m );
plasma->quark, &task_flags,
tempmm, A.nb, tempmm, tempNRDn, tempkm, ib, T.nb,
A (m, N ), ldam,
A (m, N+RD), ldam,
A (k, N+RD), ldak,
T2(k, N+RD), T.mb);
}
}
}
}
}

Here is the call graph for this function: