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

Go to the source code of this file.

Macros

#define B(m, n)   BLKADDR(B, float, m, n)
#define IPIV(k)   &(IPIV[(int64_t)B.mb*(int64_t)(k)])

Functions

void plasma_pslaswpc_quark (PLASMA_desc B, int *IPIV, int inc, 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:
Mathieu Faverge
Date:
2010-11-15 s Tue Nov 22 14:35:43 2011

Definition in file pslaswpc.c.


Macro Definition Documentation

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

Definition at line 17 of file pslaswpc.c.

#define IPIV (   k)    &(IPIV[(int64_t)B.mb*(int64_t)(k)])

Definition at line 18 of file pslaswpc.c.


Function Documentation

void plasma_pslaswpc_quark ( PLASMA_desc  B,
int *  IPIV,
int  inc,
PLASMA_sequence sequence,
PLASMA_request request 
)

Parallel tile column interchanges - dynamic scheduling

Definition at line 23 of file pslaswpc.c.

References B, IPIV, plasma_desc_t::m, plasma_desc_t::mb, plasma_desc_t::mt, plasma_desc_t::n, plasma_desc_t::nb, plasma_desc_t::nt, plasma_context_self(), plasma_desc_submatrix(), PLASMA_SUCCESS, plasma_context_struct::quark, QUARK_CORE_slaswpc_ontile(), plasma_sequence_t::quark_sequence, QUARK_Task_Flag_Set(), Quark_Task_Flags_Initializer, plasma_sequence_t::status, and TASK_SEQUENCE.

{
int m, n;
int tempj, tempn, tempmm, tempnn;
plasma = plasma_context_self();
if (sequence->status != PLASMA_SUCCESS)
return;
QUARK_Task_Flag_Set(&task_flags, TASK_SEQUENCE, (intptr_t)sequence->quark_sequence);
if ( inc > 0 )
{
for (n = 0; n < B.nt; n++) {
tempj = n * B.nb;
tempn = B.n - tempj;
tempnn = n == B.nt-1 ? tempn : B.nb;
for (m = 0; m < B.mt; m++) {
tempmm = m == B.mt-1 ? B.m - m * B.mb : B.mb;
plasma->quark, &task_flags,
plasma_desc_submatrix(B, m*B.mb, tempj, tempmm, tempn),
B(m, n), 1, tempnn, IPIV(n), inc, B(m, B.nt-1) );
}
}
}
else
{
for (n = B.nt-1; n > -1; n--) {
tempj = n * B.nb;
tempn = B.n - tempj;
tempnn = n == B.nt-1 ? tempn : B.nb;
for (m = 0; m < B.mt; m++) {
tempmm = m == B.mt-1 ? B.m - m * B.mb : B.mb;
plasma->quark, &task_flags,
plasma_desc_submatrix(B, m*B.mb, tempj, tempmm, tempn),
B(m, n), 1, tempnn, IPIV(n), inc, B(m, 0) );
}
}
}
}

Here is the call graph for this function: