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

Go to the source code of this file.

Functions

int CORE_dgessm (int M, int N, int K, int IB, int *IPIV, double *L, int LDL, double *A, int LDA)
void QUARK_CORE_dgessm (Quark *quark, Quark_Task_Flags *task_flags, int m, int n, int k, int ib, int nb, int *IPIV, double *L, int ldl, double *A, int lda)
void CORE_dgessm_quark (Quark *quark)

Detailed Description

PLASMA core_blas kernel 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
Mathieu Faverge
Jakub Kurzak
Date:
2010-11-15 d Tue Nov 22 14:35:18 2011

Definition in file core_dgessm.c.


Function Documentation

int CORE_dgessm ( int  M,
int  N,
int  K,
int  IB,
int *  IPIV,
double *  L,
int  LDL,
double *  A,
int  LDA 
)

CORE_dgessm applies the factor L computed by CORE_dgetrf_incpiv to a complex M-by-N tile A.

Parameters:
[in]MThe number of rows of the tile A. M >= 0.
[in]NThe number of columns of the tile A. N >= 0.
[in]K
[in]IBThe inner-blocking size. IB >= 0.
[in]IPIVas returned by CORE_dgetrf_incpiv.
[in]LThe NB-by-NB lower triangular tile.
[in]LDLThe leading dimension of the array L. LDL >= max(1,NB).
[in,out]AOn entry, the M-by-N tile A. On exit, updated by the application of L.
[in]LDAThe leading dimension of the array A. LDA >= max(1,M).
Returns:
Return values:
PLASMA_SUCCESSsuccessful exit
<0if INFO = -k, the k-th argument had an illegal value

Definition at line 68 of file core_dgessm.c.

References cblas_dgemm(), cblas_dtrsm(), CblasColMajor, CblasLeft, CblasLower, CblasNoTrans, CblasUnit, coreblas_error, max, min, and PLASMA_SUCCESS.

{
static double zone = 1.0;
static double mzone = -1.0;
static int ione = 1;
int i, sb;
int tmp, tmp2;
/* Check input arguments */
if (M < 0) {
coreblas_error(1, "Illegal value of M");
return -1;
}
if (N < 0) {
coreblas_error(2, "Illegal value of N");
return -2;
}
if (K < 0) {
coreblas_error(3, "Illegal value of K");
return -3;
}
if (IB < 0) {
coreblas_error(4, "Illegal value of IB");
return -4;
}
if ((LDL < max(1,M)) && (M > 0)) {
coreblas_error(7, "Illegal value of LDL");
return -7;
}
if ((LDA < max(1,M)) && (M > 0)) {
coreblas_error(9, "Illegal value of LDA");
return -9;
}
/* Quick return */
if ((M == 0) || (N == 0) || (K == 0) || (IB == 0))
for(i = 0; i < K; i += IB) {
sb = min(IB, K-i);
/*
* Apply interchanges to columns I*IB+1:IB*( I+1 )+1.
*/
tmp = i+1;
tmp2 = i+sb;
LAPACKE_dlaswp_work(LAPACK_COL_MAJOR, N, A, LDA, tmp, tmp2, IPIV, ione);
/*
* Compute block row of U.
*/
sb, N, (zone),
&L[LDL*i+i], LDL,
&A[i], LDA );
if (i+sb < M) {
/*
* Update trailing submatrix.
*/
M-(i+sb), N, sb,
(mzone), &L[LDL*i+(i+sb)], LDL,
&A[i], LDA,
(zone), &A[i+sb], LDA );
}
}
}

Here is the call graph for this function:

Here is the caller graph for this function:

void CORE_dgessm_quark ( Quark quark)

Definition at line 172 of file core_dgessm.c.

References A, CORE_dgessm(), IPIV, L, and quark_unpack_args_9.

{
int m;
int n;
int k;
int ib;
int *IPIV;
double *L;
int ldl;
double *A;
int lda;
quark_unpack_args_9(quark, m, n, k, ib, IPIV, L, ldl, A, lda);
CORE_dgessm(m, n, k, ib, IPIV, L, ldl, A, lda);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void QUARK_CORE_dgessm ( Quark quark,
Quark_Task_Flags task_flags,
int  m,
int  n,
int  k,
int  ib,
int  nb,
int *  IPIV,
double *  L,
int  ldl,
double *  A,
int  lda 
)

Definition at line 145 of file core_dgessm.c.

References CORE_dgessm_quark(), DAG_CORE_GESSM, INOUT, INPUT, QUARK_Insert_Task(), QUARK_REGION_L, and VALUE.

{
sizeof(int), &m, VALUE,
sizeof(int), &n, VALUE,
sizeof(int), &k, VALUE,
sizeof(int), &ib, VALUE,
sizeof(int)*nb, IPIV, INPUT,
sizeof(double)*nb*nb, L, INPUT | QUARK_REGION_L,
sizeof(int), &ldl, VALUE,
sizeof(double)*nb*nb, A, INOUT,
sizeof(int), &lda, VALUE,
0);
}

Here is the call graph for this function:

Here is the caller graph for this function: