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

Go to the source code of this file.

Macros

#define A(m, n)   dA, m, n
#define B(m, n)   dB, m, n
#define C(m, n)   dC, m, n

Functions

void magma_pzgemm (PLASMA_enum transA, PLASMA_enum transB, PLASMA_Complex64_t alpha, magma_desc_t *dA, magma_desc_t *dB, PLASMA_Complex64_t beta, magma_desc_t *dC, magma_sequence_t *sequence, magma_request_t *request)

Detailed Description

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

Version:
2.3.1
Author:
Emmanuel Agullo
Mathieu Faverge
Date:
2010-11-15 normal z -> s d c

Definition in file pzgemm.c.


Macro Definition Documentation

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

Definition at line 18 of file pzgemm.c.

#define B (   m,
 
)    dB, m, n

Definition at line 19 of file pzgemm.c.

#define C (   m,
 
)    dC, m, n

Definition at line 20 of file pzgemm.c.


Function Documentation

void magma_pzgemm ( PLASMA_enum  transA,
PLASMA_enum  transB,
PLASMA_Complex64_t  alpha,
magma_desc_t dA,
magma_desc_t dB,
PLASMA_Complex64_t  beta,
magma_desc_t dC,
magma_sequence_t sequence,
magma_request_t request 
)

Parallel tile matrix-matrix multiplication - dynamic scheduling

Definition at line 25 of file pzgemm.c.

References A, B, C, magma_desc_s::desc, magma_context_self(), MAGMA_SUCCESS, morse_options_finalize(), morse_options_init(), MORSE_zgemm(), and magma_sequence_s::status.

{
MorseOption_t options;
PLASMA_desc A = dA->desc;
PLASMA_desc C = dC->desc;
int k, m, n;
int tempmm, tempnn, tempkn, tempkm;
PLASMA_Complex64_t zone = (PLASMA_Complex64_t) 1.0;
PLASMA_Complex64_t zbeta;
magma = magma_context_self();
if (sequence->status != MAGMA_SUCCESS)
return;
morse_options_init( &options, magma, sequence, request );
for (m = 0; m < C.mt; m++) {
tempmm = m == C.mt-1 ? C.m-m*C.mb : C.mb;
for (n = 0; n < C.nt; n++) {
tempnn = n == C.nt-1 ? C.n-n*C.nb : C.nb;
/*
* A: PlasmaNoTrans / B: PlasmaNoTrans
*/
if (transA == PlasmaNoTrans) {
if (transB == PlasmaNoTrans) {
for (k = 0; k < A.nt; k++) {
tempkn = k == A.nt-1 ? A.n-k*A.nb : A.nb;
zbeta = k == 0 ? beta : zone;
&options,
transA, transB,
tempmm, tempnn, tempkn,
alpha, A(m, k),
B(k, n),
zbeta, C(m, n));
}
}
/*
* A: PlasmaNoTrans / B: Plasma[Conj]Trans
*/
else {
for (k = 0; k < A.nt; k++) {
tempkn = k == A.nt-1 ? A.n-k*A.nb : A.nb;
zbeta = k == 0 ? beta : zone;
&options,
transA, transB,
tempmm, tempnn, tempkn,
alpha, A(m, k), /* lda * Z */
B(n, k), /* ldb * Z */
zbeta, C(m, n)); /* ldc * Y */
}
}
}
/*
* A: Plasma[Conj]Trans / B: PlasmaNoTrans
*/
else {
if (transB == PlasmaNoTrans) {
for (k = 0; k < A.mt; k++) {
tempkm = k == A.mt-1 ? A.m-k*A.mb : A.mb;
zbeta = k == 0 ? beta : zone;
&options,
transA, transB,
tempmm, tempnn, tempkm,
alpha, A(k, m), /* lda * X */
B(k, n), /* ldb * Y */
zbeta, C(m, n)); /* ldc * Y */
}
}
/*
* A: Plasma[Conj]Trans / B: Plasma[Conj]Trans
*/
else {
for (k = 0; k < A.mt; k++) {
tempkm = k == A.mt-1 ? A.m-k*A.mb : A.mb;
zbeta = k == 0 ? beta : zone;
&options,
transA, transB,
tempmm, tempnn, tempkm,
alpha, A(k, m), /* lda * X */
B(n, k), /* ldb * Z */
zbeta, C(m, n)); /* ldc * Y */
}
}
}
}
}
morse_options_finalize( &options, magma );
}

Here is the call graph for this function: