Mentions légales du service

Skip to content
Snippets Groups Projects
Commit e3bdbf60 authored by Mathieu Faverge's avatar Mathieu Faverge
Browse files

Modify gesv to match QR algorithms

parent 62b14f81
No related branches found
No related tags found
1 merge request!72PaRSEC DTD Interface
...@@ -35,9 +35,9 @@ ...@@ -35,9 +35,9 @@
#define A(_m_,_n_) A, _m_, _n_ #define A(_m_,_n_) A, _m_, _n_
#if defined(CHAMELEON_COPY_DIAG) #if defined(CHAMELEON_COPY_DIAG)
#define DIAG(_k_) DIAG, _k_, 0 #define D(k) D, k, 0
#else #else
#define DIAG(_k_) A, _k_, _k_ #define D(k) A, k, k
#endif #endif
#define L(_m_,_n_) L, _m_, _n_ #define L(_m_,_n_) L, _m_, _n_
#define IPIV(_m_,_n_) &(IPIV[(int64_t)A->mb*((int64_t)(_m_)+(int64_t)A->mt*(int64_t)(_n_))]) #define IPIV(_m_,_n_) &(IPIV[(int64_t)A->mb*((int64_t)(_m_)+(int64_t)A->mt*(int64_t)(_n_))])
...@@ -45,13 +45,13 @@ ...@@ -45,13 +45,13 @@
/******************************************************************************* /*******************************************************************************
* Parallel tile LU factorization - dynamic scheduling * Parallel tile LU factorization - dynamic scheduling
**/ **/
void morse_pzgetrf_incpiv(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV, void morse_pzgetrf_incpiv( MORSE_desc_t *A, MORSE_desc_t *L, MORSE_desc_t *D, int *IPIV,
MORSE_sequence_t *sequence, MORSE_request_t *request) MORSE_sequence_t *sequence, MORSE_request_t *request )
{ {
MORSE_desc_t *DIAG = NULL;
MORSE_context_t *morse; MORSE_context_t *morse;
MORSE_option_t options; MORSE_option_t options;
size_t h_work_size, d_work_size; size_t ws_worker = 0;
size_t ws_host = 0;
int k, m, n; int k, m, n;
int ldak, ldam; int ldak, ldam;
...@@ -65,14 +65,19 @@ void morse_pzgetrf_incpiv(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV, ...@@ -65,14 +65,19 @@ void morse_pzgetrf_incpiv(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV,
RUNTIME_options_init(&options, morse, sequence, request); RUNTIME_options_init(&options, morse, sequence, request);
ib = MORSE_IB; ib = MORSE_IB;
h_work_size = sizeof(MORSE_Complex64_t)*( ib*L->nb );
d_work_size = 0;
RUNTIME_options_ws_alloc( &options, h_work_size, d_work_size ); /*
* zgetrf_incpiv = 0
* zgessm = 0
* ztstrf = A->mb * ib
* zssssm = 0
*/
ws_worker = A->mb * ib;
/* necessary to avoid dependencies between tasks regarding the diag tile */ ws_worker *= sizeof(MORSE_Complex64_t);
DIAG = (MORSE_desc_t*)malloc(sizeof(MORSE_desc_t)); ws_host *= sizeof(MORSE_Complex64_t);
morse_zdesc_alloc_diag(*DIAG, A->mb, A->nb, chameleon_min(A->m, A->n), A->nb, 0, 0, chameleon_min(A->m, A->n), A->nb, A->p, A->q);
RUNTIME_options_ws_alloc( &options, ws_worker, ws_host );
for (k = 0; k < minMNT; k++) { for (k = 0; k < minMNT; k++) {
RUNTIME_iteration_push(morse, k); RUNTIME_iteration_push(morse, k);
...@@ -94,7 +99,7 @@ void morse_pzgetrf_incpiv(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV, ...@@ -94,7 +99,7 @@ void morse_pzgetrf_incpiv(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV,
&options, &options,
MorseUpperLower, tempkm, tempkn, A->nb, MorseUpperLower, tempkm, tempkn, A->nb,
A(k, k), ldak, A(k, k), ldak,
DIAG(k), ldak); D(k), ldak);
#endif #endif
} }
...@@ -105,7 +110,7 @@ void morse_pzgetrf_incpiv(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV, ...@@ -105,7 +110,7 @@ void morse_pzgetrf_incpiv(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV,
tempkm, tempnn, tempkm, ib, L->nb, tempkm, tempnn, tempkm, ib, L->nb,
IPIV(k, k), IPIV(k, k),
L(k, k), L->mb, L(k, k), L->mb,
DIAG(k), ldak, D(k), ldak,
A(k, n), ldak); A(k, n), ldak);
} }
for (m = k+1; m < A->mt; m++) { for (m = k+1; m < A->mt; m++) {
...@@ -138,7 +143,5 @@ void morse_pzgetrf_incpiv(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV, ...@@ -138,7 +143,5 @@ void morse_pzgetrf_incpiv(MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV,
RUNTIME_options_ws_free(&options); RUNTIME_options_ws_free(&options);
RUNTIME_options_finalize(&options, morse); RUNTIME_options_finalize(&options, morse);
(void)D;
morse_desc_mat_free(DIAG);
free(DIAG);
} }
...@@ -37,8 +37,8 @@ ...@@ -37,8 +37,8 @@
/******************************************************************************* /*******************************************************************************
* Parallel forward substitution for tile LU - dynamic scheduling * Parallel forward substitution for tile LU - dynamic scheduling
**/ **/
void morse_pztrsmpl(MORSE_desc_t *A, MORSE_desc_t *B, MORSE_desc_t *L, int *IPIV, void morse_pztrsmpl( MORSE_desc_t *A, MORSE_desc_t *B, MORSE_desc_t *L, int *IPIV,
MORSE_sequence_t *sequence, MORSE_request_t *request) MORSE_sequence_t *sequence, MORSE_request_t *request )
{ {
MORSE_context_t *morse; MORSE_context_t *morse;
MORSE_option_t options; MORSE_option_t options;
......
...@@ -267,6 +267,7 @@ int MORSE_zgesv_incpiv_Tile_Async( MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV, ...@@ -267,6 +267,7 @@ int MORSE_zgesv_incpiv_Tile_Async( MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV,
MORSE_sequence_t *sequence, MORSE_request_t *request ) MORSE_sequence_t *sequence, MORSE_request_t *request )
{ {
MORSE_context_t *morse; MORSE_context_t *morse;
MORSE_desc_t D, *Dptr = NULL;
morse = morse_context_self(); morse = morse_context_self();
if (morse == NULL) { if (morse == NULL) {
...@@ -313,11 +314,28 @@ int MORSE_zgesv_incpiv_Tile_Async( MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV, ...@@ -313,11 +314,28 @@ int MORSE_zgesv_incpiv_Tile_Async( MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV,
return MORSE_SUCCESS; return MORSE_SUCCESS;
*/ */
morse_pzgetrf_incpiv( A, L, IPIV, sequence, request ); #if defined(CHAMELEON_COPY_DIAG)
{
int n = chameleon_min(A->mt, A->nt) * A->nb;
morse_zdesc_alloc(D, A->mb, A->nb, A->m, n, 0, 0, A->m, n, );
Dptr = &D;
}
#endif
morse_pzgetrf_incpiv( A, L, Dptr, IPIV, sequence, request );
morse_pztrsmpl( A, B, L, IPIV, sequence, request ); morse_pztrsmpl( A, B, L, IPIV, sequence, request );
morse_pztrsm( MorseLeft, MorseUpper, MorseNoTrans, MorseNonUnit, (MORSE_Complex64_t)1.0, A, B, sequence, request ); morse_pztrsm( MorseLeft, MorseUpper, MorseNoTrans, MorseNonUnit, (MORSE_Complex64_t)1.0, A, B, sequence, request );
if (Dptr != NULL) {
MORSE_Desc_Flush( A, sequence );
MORSE_Desc_Flush( L, sequence );
MORSE_Desc_Flush( Dptr, sequence );
MORSE_Desc_Flush( B, sequence );
morse_sequence_wait( morse, sequence );
morse_desc_mat_free( Dptr );
}
(void)D;
return MORSE_SUCCESS; return MORSE_SUCCESS;
} }
...@@ -244,6 +244,7 @@ int MORSE_zgetrf_incpiv_Tile_Async( MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV, ...@@ -244,6 +244,7 @@ int MORSE_zgetrf_incpiv_Tile_Async( MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV,
MORSE_sequence_t *sequence, MORSE_request_t *request ) MORSE_sequence_t *sequence, MORSE_request_t *request )
{ {
MORSE_context_t *morse; MORSE_context_t *morse;
MORSE_desc_t D, *Dptr = NULL;
morse = morse_context_self(); morse = morse_context_self();
if (morse == NULL) { if (morse == NULL) {
...@@ -286,7 +287,23 @@ int MORSE_zgetrf_incpiv_Tile_Async( MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV, ...@@ -286,7 +287,23 @@ int MORSE_zgetrf_incpiv_Tile_Async( MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV,
return MORSE_SUCCESS; return MORSE_SUCCESS;
*/ */
morse_pzgetrf_incpiv( A, L, IPIV, sequence, request ); #if defined(CHAMELEON_COPY_DIAG)
{
int n = chameleon_min(A->mt, A->nt) * A->nb;
morse_zdesc_alloc(D, A->mb, A->nb, A->m, n, 0, 0, A->m, n, );
Dptr = &D;
}
#endif
morse_pzgetrf_incpiv( A, L, Dptr, IPIV, sequence, request );
if (Dptr != NULL) {
MORSE_Desc_Flush( A, sequence );
MORSE_Desc_Flush( L, sequence );
MORSE_Desc_Flush( Dptr, sequence );
morse_sequence_wait( morse, sequence );
morse_desc_mat_free( Dptr );
}
(void)D;
return MORSE_SUCCESS; return MORSE_SUCCESS;
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment