Commit 22e8ea8e authored by Mathieu Faverge's avatar Mathieu Faverge

Merge back the twosided branch

parent fd42e344
......@@ -179,16 +179,16 @@ set(ZSRC
##################
# OTHERS
##################
#pzgebrd_ge2tb.c
#pzgebrd_tb2bd.c
pztile2band.c
#pzgebrd_gb2bd.c
pzgebrd_ge2gb.c
#pzgetmi2.c
#pzgetrf_reclap.c
#pzgetrf_rectil.c
#pzhbcpy_t2bl.c
#pzhegst.c
#pzherbt.c
#pzhetrd_hb2st.c
#pzhetrd_he2hb.c
#pzhetrd_hb2ht.c
pzhetrd_he2hb.c
#pzlarft_blgtrd.c
#pzlaswp.c
#pzlaswpc.c
......@@ -198,16 +198,16 @@ set(ZSRC
#zgebrd.c
#zgecfi.c
#zgecfi2.c
#zgesvd.c
zgesvd.c
#zgetmi.c
#zgetri.c
#zgetrs.c
#zheev.c
#zheevd.c
zheevd.c
#zhegst.c
#zhegv.c
#zhegvd.c
#zhetrd.c
zhetrd.c
#zlaswp.c
#zlaswpc.c
#ztrsmrv.c
......
/**
*
* @copyright (c) 2009-2014 The University of Tennessee and The University
* of Tennessee Research Foundation.
* All rights reserved.
* @copyright (c) 2012-2014 Inria. All rights reserved.
* @copyright (c) 2012-2014 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
*
**/
/**
*
* @file pzgebrd_ge2gb.c
*
* PLASMA auxiliary routines
* PLASMA is a software package provided by Univ. of Tennessee,
* Univ. of California Berkeley and Univ. of Colorado Denver
*
* @version 2.8.0
* @author Hatem Ltaief
* @author Azzam Haidar
* @date 2010-11-15
* @precisions normal z -> s d c
*
**/
#include "control/common.h"
void morse_pzgebrd_ge2gb(MORSE_desc_t A, MORSE_desc_t T,
MORSE_sequence_t *sequence, MORSE_request_t *request)
{
int k;
int tempkm, tempkn;
if (A.m >= A.n){
for (k = 0; k < A.nt; k++) {
tempkm = k == A.mt-1 ? A.m-k*A.mb : A.mb;
tempkn = k == A.nt-1 ? A.n-k*A.nb : A.nb;
morse_pzgeqrf(
morse_desc_submatrix(&A, k*A.mb, k*A.nb, A.m-k*A.mb, tempkn),
morse_desc_submatrix(&T, k*T.mb, k*T.nb, T.m-k*T.mb, tempkn),
sequence, request);
morse_pzunmqr(
MorseLeft,
MorseConjTrans,
morse_desc_submatrix(&A, k*A.mb, k*A.nb, A.m-k*A.mb, tempkn),
morse_desc_submatrix(&A, k*A.mb, (k+1)*A.nb, A.m-k*A.mb, A.n-(k+1)*A.nb),
morse_desc_submatrix(&T, k*T.mb, k*T.nb, T.m-k*T.mb, tempkn),
sequence, request);
if (k+1 < A.nt){
tempkn = k+1 == A.nt-1 ? A.n-(k+1)*A.nb : A.nb;
morse_pzgelqf(
morse_desc_submatrix(&A, k*A.mb, (k+1)*A.nb, tempkm, A.n-(k+1)*A.nb),
morse_desc_submatrix(&T, k*T.mb, (k+1)*T.nb, T.mb, T.n-(k+1)*T.nb),
sequence, request);
morse_pzunmlq(
MorseRight, MorseConjTrans,
morse_desc_submatrix(&A, k*A.mb, (k+1)*A.nb, tempkm, A.n-(k+1)*A.nb),
morse_desc_submatrix(&A, (k+1)*A.mb, (k+1)*A.nb, A.m-(k+1)*A.mb, A.n-(k+1)*A.nb),
morse_desc_submatrix(&T, k*T.mb, (k+1)*T.nb, T.mb, T.n-(k+1)*T.nb),
sequence, request);
}
}
}
else{
for (k = 0; k < A.mt; k++) {
tempkm = k == A.mt-1 ? A.m-k*A.mb : A.mb;
tempkn = k == A.nt-1 ? A.n-k*A.nb : A.nb;
morse_pzgelqf(
morse_desc_submatrix(&A, k*A.mb, k*A.nb, tempkm, A.n-k*A.nb),
morse_desc_submatrix(&T, k*T.mb, k*T.nb, T.mb, T.n-k*T.nb),
sequence, request);
morse_pzunmlq(
MorseRight, MorseConjTrans,
morse_desc_submatrix(&A, k*A.mb, k*A.nb, tempkm, A.n-k*A.nb),
morse_desc_submatrix(&A, (k+1)*A.mb, k*A.nb, A.m-(k+1)*A.mb, A.n-k*A.nb),
morse_desc_submatrix(&T, k*T.mb, k*T.nb, T.mb, T.n-k*T.nb),
sequence, request);
if (k+1 < A.mt){
tempkm = k+1 == A.mt-1 ? A.m-(k+1)*A.mb : A.mb;
morse_pzgeqrf(
morse_desc_submatrix(&A, (k+1)*A.mb, k*A.nb, A.m-(k+1)*A.mb, tempkn),
morse_desc_submatrix(&T, (k+1)*T.mb, k*T.nb, T.m-(k+1)*T.mb, tempkn),
sequence, request);
morse_pzunmqr(
MorseLeft, MorseConjTrans,
morse_desc_submatrix(&A, (k+1)*A.mb, k*A.nb, A.m-(k+1)*A.mb, tempkn),
morse_desc_submatrix(&A, (k+1)*A.mb, (k+1)*A.nb, A.m-(k+1)*A.mb, A.n-(k+1)*A.nb),
morse_desc_submatrix(&T, (k+1)*T.mb, k*T.nb, T.m-(k+1)*T.mb, tempkn),
sequence, request);
}
}
}
}
......@@ -53,7 +53,7 @@ void morse_pzgelqf(MORSE_desc_t *A, MORSE_desc_t *T,
int k, m, n;
int ldak, ldam;
int tempkm, tempkn, tempmm, tempnn;
int ib, minMT;
int ib, minMNT;
morse = morse_context_self();
if (sequence->status != MORSE_SUCCESS)
......@@ -63,9 +63,9 @@ void morse_pzgelqf(MORSE_desc_t *A, MORSE_desc_t *T,
ib = MORSE_IB;
if (A->m > A->n) {
minMT = A->nt;
minMNT = A->nt;
} else {
minMT = A->mt;
minMNT = A->mt;
}
/*
......@@ -114,7 +114,7 @@ void morse_pzgelqf(MORSE_desc_t *A, MORSE_desc_t *T,
morse_zdesc_alloc_diag(*DIAG, A->mb, A->nb, min(A->m, A->n), A->nb, 0, 0, min(A->m, A->n), A->nb, A->p, A->q);
#endif
for (k = 0; k < min(A->mt, A->nt); k++) {
for (k = 0; k < minMNT; k++) {
tempkm = k == A->mt-1 ? A->m-k*A->mb : A->mb;
tempkn = k == A->nt-1 ? A->n-k*A->nb : A->nb;
ldak = BLKLDD(A, k);
......@@ -181,4 +181,5 @@ void morse_pzgelqf(MORSE_desc_t *A, MORSE_desc_t *T,
morse_desc_mat_free(DIAG);
free(DIAG);
#endif
(void)DIAG;
}
......@@ -59,7 +59,6 @@ void morse_pzgelqfrh(MORSE_desc_t *A, MORSE_desc_t *T, int BS,
int ldak, ldam;
int tempkmin, tempkm, tempNn, tempnn, tempmm, tempNRDn;
int ib;
int nblk;
morse = morse_context_self();
if (sequence->status != MORSE_SUCCESS)
......@@ -112,9 +111,11 @@ void morse_pzgelqfrh(MORSE_desc_t *A, MORSE_desc_t *T, int BS,
#if defined(CHAMELEON_COPY_DIAG)
/* necessary to avoid dependencies between tasks regarding the diag tile */
nblk = ( A->nt + BS -1 ) / BS;
DIAG = (MORSE_desc_t*)malloc(sizeof(MORSE_desc_t));
morse_zdesc_alloc_diag(*DIAG, A->mb, A->nb, nblk * A->mb, A->nb, 0, 0, nblk * A->mb, A->nb, A->p, A->q);
{
int nblk = ( A->nt + BS -1 ) / BS;
DIAG = (MORSE_desc_t*)malloc(sizeof(MORSE_desc_t));
morse_zdesc_alloc_diag(*DIAG, A->mb, A->nb, nblk * A->mb, A->nb, 0, 0, nblk * A->mb, A->nb, A->p, A->q);
}
#endif
for (k = 0; k < min(A->mt, A->nt); k++) {
......@@ -212,4 +213,5 @@ void morse_pzgelqfrh(MORSE_desc_t *A, MORSE_desc_t *T, int BS,
morse_desc_mat_free(DIAG);
free(DIAG);
#endif
(void)DIAG;
}
......@@ -175,4 +175,5 @@ void morse_pzgeqrf(MORSE_desc_t *A, MORSE_desc_t *T,
morse_desc_mat_free(DIAG);
free(DIAG);
#endif
(void)DIAG;
}
......@@ -57,7 +57,6 @@ void morse_pzgeqrfrh(MORSE_desc_t *A, MORSE_desc_t *T, int BS,
int ldaM, ldam, ldaMRD;
int tempkmin, tempkn, tempMm, tempnn, tempmm, tempMRDm;
int ib;
int nblk;
morse = morse_context_self();
if (sequence->status != MORSE_SUCCESS)
......@@ -109,10 +108,12 @@ void morse_pzgeqrfrh(MORSE_desc_t *A, MORSE_desc_t *T, int BS,
RUNTIME_options_ws_alloc( &options, ws_worker, ws_host );
#if defined(CHAMELEON_COPY_DIAG)
/* necessary to avoid dependencies between tasks regarding the diag tile */
nblk = ( A->mt + BS -1 ) / BS;
DIAG = (MORSE_desc_t*)malloc(sizeof(MORSE_desc_t));
morse_zdesc_alloc_diag(*DIAG, A->mb, A->nb, nblk * A->mb, A->nb, 0, 0, nblk * A->mb, A->nb, A->p, A->q);
{
/* necessary to avoid dependencies between tasks regarding the diag tile */
int nblk = ( A->mt + BS -1 ) / BS;
DIAG = (MORSE_desc_t*)malloc(sizeof(MORSE_desc_t));
morse_zdesc_alloc_diag(*DIAG, A->mb, A->nb, nblk * A->mb, A->nb, 0, 0, nblk * A->mb, A->nb, A->p, A->q);
}
#endif
K = min(A->mt, A->nt);
......@@ -211,4 +212,5 @@ void morse_pzgeqrfrh(MORSE_desc_t *A, MORSE_desc_t *T, int BS,
morse_desc_mat_free(DIAG);
free(DIAG);
#endif
(void)DIAG;
}
This diff is collapsed.
/**
*
* @copyright (c) 2009-2014 The University of Tennessee and The University
* of Tennessee Research Foundation.
* All rights reserved.
* @copyright (c) 2012-2014 Inria. All rights reserved.
* @copyright (c) 2012-2014 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
*
**/
/**
*
* @file pztile2band.c
*
* PLASMA auxiliary routines
* PLASMA is a software package provided by Univ. of Tennessee,
* Univ. of California Berkeley and Univ. of Colorado Denver
*
* @version 2.8.0
* @author Azzam Haidar
* @author Gregoire Pichon
* @author Mathieu Faverge
* @date 2010-11-15
* @precisions normal z -> s d c
*
**/
#include "control/common.h"
#define A(m,n) A, m, n
#define B(m, n) B, m, n
/***************************************************************************//**
* Parallel copy of a band matrix from full NxN tile storage to band storage (LDABxN).
**/
void morse_pztile2band(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B,
MORSE_sequence_t *sequence, MORSE_request_t *request)
{
MORSE_context_t *morse;
MORSE_option_t options;
int j;
int ldaj, ldx;
int tempjm, tempjn;
int minmnt = min(A->mt, A->nt);
morse = morse_context_self();
if (sequence->status != MORSE_SUCCESS)
return;
RUNTIME_options_init(&options, morse, sequence, request);
ldx = B->mb-1;
/*
* MorseLower => Lower Band
*/
if ( uplo == MorseLower ) {
for (j = 0; j < minmnt; j++){
/* Compute dimension on N with B since it is dimensioned with min(A->m, A->n) */
assert( A->m == B->n );
assert( A->n >= B->n );
tempjm = j == A->mt-1 ? A->m - j * A->mb : A->mb;
tempjn = j == B->nt-1 ? B->n - j * B->nb : B->nb;
ldaj = BLKLDD(A, j);
MORSE_TASK_zlaset(
&options,
MorseUpperLower, B->mb, tempjn,
0., 0.,
B(0, j), B->mb );
MORSE_TASK_zlacpy(
&options,
MorseLower, tempjm, tempjn, A->nb,
A(j, j), ldaj,
B(0, j), ldx );
if( j<minmnt-1 ){
tempjm = (j+1) == A->mt-1 ? A->m-(j+1)*A->mb : A->mb;
ldaj = BLKLDD(A, j+1);
MORSE_TASK_zlacpyx(
&options,
MorseUpper, tempjm, tempjn, A->nb,
0, A(j+1, j), ldaj,
A->nb, B(0, j), ldx);
}
}
}
else if ( uplo == MorseUpper ) {
for (j = 0; j < minmnt; j++){
/* Compute dimension on M with B since it is dimensioned with min(A->m, A->n) */
assert( A->n == B->n );
assert( A->m >= B->n );
tempjn = j == A->nt-1 ? A->n - j * A->nb : A->nb;
ldaj = BLKLDD(A, j);
MORSE_TASK_zlaset(
&options,
MorseUpperLower, B->mb, tempjn,
0., 0.,
B(0, j), B->mb );
if(j > 0){
MORSE_TASK_zlacpy(
&options,
MorseLower, A->mb, tempjn, A->nb,
A(j-1, j), BLKLDD(A, j-1),
B(0, j), ldx);
}
tempjm = j == B->nt-1 ? B->n - j * B->nb : B->nb;
MORSE_TASK_zlacpyx(
&options,
MorseUpper, tempjm, tempjn, A->nb,
0, A(j, j), ldaj,
A->nb, B(0, j), ldx);
}
}
RUNTIME_options_finalize(&options, morse);
MORSE_TASK_dataflush_all();
}
#undef B
#undef A
......@@ -153,4 +153,5 @@ void morse_pzunglq(MORSE_desc_t *A, MORSE_desc_t *Q, MORSE_desc_t *T,
morse_desc_mat_free(DIAG);
free(DIAG);
#endif
(void)DIAG;
}
......@@ -59,7 +59,6 @@ void morse_pzunglqrh(MORSE_desc_t *A, MORSE_desc_t *Q,
int ldqm;
int tempkm, tempkmin, tempNn, tempnn, tempmm, tempNRDn;
int ib;
int nblk;
morse = morse_context_self();
if (sequence->status != MORSE_SUCCESS)
......@@ -90,10 +89,12 @@ void morse_pzunglqrh(MORSE_desc_t *A, MORSE_desc_t *Q,
RUNTIME_options_ws_alloc( &options, ws_worker, ws_host );
#if defined(CHAMELEON_COPY_DIAG)
/* necessary to avoid dependencies between tasks regarding the diag tile */
nblk = ( A->nt + BS -1 ) / BS;
DIAG = (MORSE_desc_t*)malloc(sizeof(MORSE_desc_t));
morse_zdesc_alloc_diag(*DIAG, A->mb, A->nb, nblk * A->mb, A->nb, 0, 0, nblk * A->mb, A->nb, A->p, A->q);
{
/* necessary to avoid dependencies between tasks regarding the diag tile */
int nblk = ( A->nt + BS -1 ) / BS;
DIAG = (MORSE_desc_t*)malloc(sizeof(MORSE_desc_t));
morse_zdesc_alloc_diag(*DIAG, A->mb, A->nb, nblk * A->mb, A->nb, 0, 0, nblk * A->mb, A->nb, A->p, A->q);
}
#endif
K = min(A->mt, A->nt);
......@@ -178,4 +179,5 @@ void morse_pzunglqrh(MORSE_desc_t *A, MORSE_desc_t *Q,
morse_desc_mat_free(DIAG);
free(DIAG);
#endif
(void)DIAG;
}
......@@ -154,4 +154,5 @@ void morse_pzungqr(MORSE_desc_t *A, MORSE_desc_t *Q, MORSE_desc_t *T,
morse_desc_mat_free(DIAG);
free(DIAG);
#endif
(void)DIAG;
}
......@@ -61,7 +61,6 @@ void morse_pzungqrrh(MORSE_desc_t *A, MORSE_desc_t *Q,
int ldqM, ldqm, ldqMRD;
int tempkn, tempMm, tempnn, tempmm, tempMRDm, tempkmin;
int ib;
int nblk;
morse = morse_context_self();
if (sequence->status != MORSE_SUCCESS)
......@@ -92,10 +91,12 @@ void morse_pzungqrrh(MORSE_desc_t *A, MORSE_desc_t *Q,
RUNTIME_options_ws_alloc( &options, ws_worker, ws_host );
#if defined(CHAMELEON_COPY_DIAG)
/* necessary to avoid dependencies between tasks regarding the diag tile */
nblk = ( A->mt + BS -1 ) / BS;
DIAG = (MORSE_desc_t*)malloc(sizeof(MORSE_desc_t));
morse_zdesc_alloc_diag(*DIAG, A->mb, A->nb, nblk * A->mb, A->nb, 0, 0, nblk * A->mb, A->nb, A->p, A->q);
{
/* necessary to avoid dependencies between tasks regarding the diag tile */
int nblk = ( A->mt + BS -1 ) / BS;
DIAG = (MORSE_desc_t*)malloc(sizeof(MORSE_desc_t));
morse_zdesc_alloc_diag(*DIAG, A->mb, A->nb, nblk * A->mb, A->nb, 0, 0, nblk * A->mb, A->nb, A->p, A->q);
}
#endif
K = min(A->mt, A->nt);
......@@ -183,4 +184,5 @@ void morse_pzungqrrh(MORSE_desc_t *A, MORSE_desc_t *Q,
morse_desc_mat_free(DIAG);
free(DIAG);
#endif
(void)DIAG;
}
......@@ -312,4 +312,5 @@ void morse_pzunmlq(MORSE_enum side, MORSE_enum trans,
morse_desc_mat_free(DIAG);
free(DIAG);
#endif
(void)DIAG;
}
......@@ -57,11 +57,9 @@ void morse_pzunmlqrh(MORSE_enum side, MORSE_enum trans,
int k, m, n;
int K, N, RD, lastRD;
int ldaN, ldak;
int ldbN, ldbm, ldbNRD;
int ldak, ldbN, ldbm, ldbNRD;
int tempNn, tempkm, tempnn, tempmm, tempNRDn, tempkmin;
int ib;
int nblk;
morse = morse_context_self();
if (sequence->status != MORSE_SUCCESS)
......@@ -91,11 +89,13 @@ void morse_pzunmlqrh(MORSE_enum side, MORSE_enum trans,
RUNTIME_options_ws_alloc( &options, ws_worker, ws_host );
/* necessary to avoid dependencies between tasks regarding the diag tile */
#if defined(CHAMELEON_COPY_DIAG)
nblk = ( A->nt + BS -1 ) / BS;
DIAG = (MORSE_desc_t*)malloc(sizeof(MORSE_desc_t));
morse_zdesc_alloc_diag(*DIAG, A->mb, A->nb, nblk * A->mb, A->nb, 0, 0, nblk * A->mb, A->nb, A->p, A->q);
/* necessary to avoid dependencies between tasks regarding the diag tile */
{
int nblk = ( A->nt + BS -1 ) / BS;
DIAG = (MORSE_desc_t*)malloc(sizeof(MORSE_desc_t));
morse_zdesc_alloc_diag(*DIAG, A->mb, A->nb, nblk * A->mb, A->nb, 0, 0, nblk * A->mb, A->nb, A->p, A->q);
}
#endif
K = min(A->mt, A->nt);
......@@ -110,7 +110,6 @@ void morse_pzunmlqrh(MORSE_enum side, MORSE_enum trans,
for (N = k; N < A->nt; N += BS) {
tempNn = N == A->nt-1 ? A->n-N*A->nb : A->nb;
tempkmin = min(tempkm,tempNn);
ldaN = BLKLDD(A, N);
ldbN = BLKLDD(B, N);
#if defined(CHAMELEON_COPY_DIAG)
MORSE_TASK_zlacpy(
......@@ -206,7 +205,6 @@ void morse_pzunmlqrh(MORSE_enum side, MORSE_enum trans,
for (N = k; N < A->nt; N += BS) {
tempNn = N == A->nt-1 ? A->n-N*A->nb : A->nb;
tempkmin = min(tempkm,tempNn);
ldaN = BLKLDD(A, N);
ldbN = BLKLDD(B, N);
for (m = min(N+BS, A->nt)-1; m > N; m--) {
tempmm = m == B->mt-1 ? B->m-m*B->mb : B->mb;
......@@ -339,7 +337,6 @@ void morse_pzunmlqrh(MORSE_enum side, MORSE_enum trans,
for (N = k; N < A->nt; N += BS) {
tempNn = N == A->nt-1 ? A->n-N*A->nb : A->nb;
tempkmin = min(tempkm,tempNn);
ldaN = BLKLDD(A, N);
#if defined(CHAMELEON_COPY_DIAG)
MORSE_TASK_zlacpy(
&options,
......@@ -413,4 +410,5 @@ void morse_pzunmlqrh(MORSE_enum side, MORSE_enum trans,
morse_desc_mat_free(DIAG);
free(DIAG);
#endif
(void)DIAG;
}
......@@ -317,4 +317,5 @@ void morse_pzunmqr(MORSE_enum side, MORSE_enum trans,
morse_desc_mat_free(DIAG);
free(DIAG);
#endif
(void)DIAG;
}
......@@ -61,7 +61,6 @@ void morse_pzunmqrrh(MORSE_enum side, MORSE_enum trans,
int ldbM, ldbm, ldbMRD;
int tempMm, tempkn, tempnn, tempmm, tempMRDm, tempkmin;
int ib;
int nblk;
morse = morse_context_self();
if (sequence->status != MORSE_SUCCESS)
......@@ -91,11 +90,14 @@ void morse_pzunmqrrh(MORSE_enum side, MORSE_enum trans,
RUNTIME_options_ws_alloc( &options, ws_worker, ws_host );
/* necessary to avoid dependencies between tasks regarding the diag tile */
#if defined(CHAMELEON_COPY_DIAG)
nblk = ( A->mt + BS -1 ) / BS;
DIAG = (MORSE_desc_t*)malloc(sizeof(MORSE_desc_t));
morse_zdesc_alloc_diag(*DIAG, A->mb, A->nb, nblk * A->mb, A->nb, 0, 0, nblk * A->mb, A->nb, A->p, A->q);
/* necessary to avoid dependencies between tasks regarding the diag tile */
{
int nblk = ( A->mt + BS -1 ) / BS;
nblk = ( A->mt + BS -1 ) / BS;
DIAG = (MORSE_desc_t*)malloc(sizeof(MORSE_desc_t));
morse_zdesc_alloc_diag(*DIAG, A->mb, A->nb, nblk * A->mb, A->nb, 0, 0, nblk * A->mb, A->nb, A->p, A->q);
}
#endif
K = min(A->mt, A->nt);
......@@ -418,4 +420,5 @@ void morse_pzunmqrrh(MORSE_enum side, MORSE_enum trans,
morse_desc_mat_free(DIAG);
free(DIAG);
#endif
(void)DIAG;
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -84,25 +84,22 @@ int morse_zshift(MORSE_context_t *morse, int m, int n, MORSE_Complex64_t *A,
/***************************************************************************//**
* Declarations of parallel functions (dynamic scheduling) - alphabetical order
**/
void morse_pzbarrier_tl2pnl(MORSE_desc_t *A, MORSE_sequence_t *sequence, MORSE_request_t *request);
void morse_pzbarrier_pnl2tl(MORSE_desc_t *A, MORSE_sequence_t *sequence, MORSE_request_t *request);
void morse_pzbarrier_tl2row(MORSE_desc_t *A, MORSE_sequence_t *sequence, MORSE_request_t *request);
void morse_pzbarrier_row2tl(MORSE_desc_t *A, MORSE_sequence_t *sequence, MORSE_request_t *request);
void morse_pzgebrd_tb2bd(MORSE_enum uplo, MORSE_desc_t *A, double *D, double *E, MORSE_desc_t *T, MORSE_sequence_t *sequence, MORSE_request_t *request);
void morse_pzgebrd_ge2tb(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_sequence_t *sequence, MORSE_request_t *request);
void morse_pzbarrier_tl2pnl(MORSE_desc_t *A, MORSE_sequence_t *sequence, MORSE_request_t *request);
void morse_pzbarrier_tl2row(MORSE_desc_t *A, MORSE_sequence_t *sequence, MORSE_request_t *request);
void morse_pzgebrd_gb2bd(MORSE_enum uplo, MORSE_desc_t *A, double *D, double *E, MORSE_desc_t *T, MORSE_sequence_t *sequence, MORSE_request_t *request);
void morse_pzgebrd_ge2gb(MORSE_desc_t A, MORSE_desc_t T, MORSE_sequence_t *sequence, MORSE_request_t *request);
void morse_pzgelqf(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_sequence_t *sequence, MORSE_request_t *request);
void morse_pzgelqfrh(MORSE_desc_t *A, MORSE_desc_t *T, int BS, MORSE_sequence_t *sequence, MORSE_request_t *request);
void morse_pzgemm(MORSE_enum transA, MORSE_enum transB, MORSE_Complex64_t alpha, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_Complex64_t beta, MORSE_desc_t *C, MORSE_sequence_t *sequence, MORSE_request_t *request);
void morse_pzgeqrf(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_sequence_t *sequence, MORSE_request_t *request);
void morse_pzgeqrfrh(MORSE_desc_t *A, MORSE_desc_t *T, int BS, MORSE_sequence_t *sequence, MORSE_request_t *request);
void morse_pzgerbh(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_sequence_t *sequence, MORSE_request_t *request);
void morse_pzgerbbrh(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_sequence_t *sequence, MORSE_request_t *request);
void morse_pzgetmi2(MORSE_enum idep, MORSE_enum odep, MORSE_enum storev, int m, int n, int mb, int nb, MORSE_Complex64_t *A, MORSE_sequence_t *sequence, MORSE_request_t *request);
void morse_pzgetrf_incpiv(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV, MORSE_sequence_t *sequence, MORSE_request_t *request);
void morse_pzgetrf_nopiv(MORSE_desc_t *A, MORSE_sequence_t *sequence, MORSE_request_t *request);
void morse_pzgetrf_reclap(MORSE_desc_t *A, int *IPIV, MORSE_sequence_t *sequence, MORSE_request_t *request);
void morse_pzgetrf_rectil(MORSE_desc_t *A, int *IPIV, MORSE_sequence_t *sequence, MORSE_request_t *request);
void morse_pzhbcpy_t2bl(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *AB, MORSE_sequence_t *sequence, MORSE_request_t *request);
void morse_pzhegst(MORSE_enum itype, MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_sequence_t *sequence, MORSE_request_t *request);
#ifdef COMPLEX
void morse_pzhemm(MORSE_enum side, MORSE_enum uplo, MORSE_Complex64_t alpha, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_Complex64_t beta, MORSE_desc_t *C, MORSE_sequence_t *sequence, MORSE_request_t *request);
......@@ -136,6 +133,7 @@ void morse_pzsymm(MORSE_enum side, MORSE_enum uplo, MORSE_Complex64_t alpha, MOR
void morse_pzsyrk(MORSE_enum uplo, MORSE_enum trans, MORSE_Complex64_t alpha, MORSE_desc_t *A, MORSE_Complex64_t beta, MORSE_desc_t *C, MORSE_sequence_t *sequence, MORSE_request_t *request);
void morse_pzsyr2k(MORSE_enum uplo, MORSE_enum trans, MORSE_Complex64_t alpha, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_Complex64_t beta, MORSE_desc_t *C, MORSE_sequence_t *sequence, MORSE_request_t *request);
void morse_pzsytrf(MORSE_enum uplo, MORSE_desc_t *A, MORSE_sequence_t *sequence, MORSE_request_t *request);
void morse_pztile2band(MORSE_enum uplo, MORSE_desc_t *A, MORSE_desc_t *descAB, MORSE_sequence_t *sequence, MORSE_request_t *request);
void morse_pztradd(MORSE_enum uplo, MORSE_enum trans, MORSE_Complex64_t alpha, MORSE_desc_t *A, MORSE_Complex64_t beta, MORSE_desc_t *B, MORSE_sequence_t *sequence, MORSE_request_t *request);
void morse_pztrmm(MORSE_enum side, MORSE_enum uplo, MORSE_enum transA, MORSE_enum diag, MORSE_Complex64_t alpha, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_sequence_t *sequence, MORSE_request_t *request);
void morse_pztrsm(MORSE_enum side, MORSE_enum uplo, MORSE_enum transA, MORSE_enum diag, MORSE_Complex64_t alpha, MORSE_desc_t *A, MORSE_desc_t *B, MORSE_sequence_t *sequence, MORSE_request_t *request);
......
......@@ -44,6 +44,8 @@ set(ZSRC
core_zgetrf.c
core_zgetrf_incpiv.c
core_zgetrf_nopiv.c
core_zhe2ge.c
core_zherfb.c
core_zhemm.c
core_zher2k.c
core_zherk.c
......@@ -56,6 +58,7 @@ set(ZSRC
core_zlantr.c
core_zlaset2.c
core_zlaset.c
core_zlatro.c
core_zlauum.c
core_zpamm.c
core_zparfb.c
......@@ -79,6 +82,8 @@ set(ZSRC
core_ztslqt.c
core_ztsmlq.c
core_ztsmqr.c
core_ztsmlq_hetra1.c
core_ztsmqr_hetra1.c
core_ztsqrt.c
core_ztstrf.c
core_zttlqt.c
......
/**
*
* @copyright (c) 2009-2014 The University of Tennessee and The University
* of Tennessee Research Foundation.
* All rights reserved.
* @copyright (c) 2012-2014 Inria. All rights reserved.
* @copyright (c) 2012-2014 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
*
**/
/**
*
* @file core_zhe2ge.c
*
* 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.5.0
* @comment This file has been automatically generated
* from Plasma 2.5.0 for MORSE 1.0.0
* @author Julien Langou
* @author Henricus Bouwmeester
* @author Mathieu Faverge
* @author Emmanuel Agullo
* @author Cedric Castagnede
* @date 2010-11-15
* @precisions normal z -> c d s
*
**/
#include "coreblas/include/lapacke.h"
#include "coreblas/include/coreblas.h"
/***************************************************************************//**
*
* @ingroup CORE_MORSE_Complex64_t
*
**/
void CORE_zhe2ge(MORSE_enum uplo, int M, int N,
const MORSE_Complex64_t *A, int LDA,
MORSE_Complex64_t *B, int LDB)
{
const MORSE_Complex64_t *Aptr;
MORSE_Complex64_t *Bptr, *BTptr;
int i, j;
Aptr = A;
Bptr = B;
BTptr = B;
if (uplo == MorseLower){
for (j = 0; j < N; j++){
/* Diagonal element */
*Bptr = *Aptr;
Bptr++; Aptr++;
/* Outside the diagonal */
BTptr = B + j + (j+1) * LDB;
for (i = j+1; i < M; i++, Bptr++, Aptr++, BTptr += LDB) {
*Bptr = *Aptr;
*BTptr = conj( *Aptr );
}
Aptr += (LDA - i + j + 1);
Bptr += (LDB - i + j + 1);
/* Bptr[ j * LDB + j ] = A[ j * LDA + j ]; */