Commit 2e8a8bb2 authored by Mathieu Faverge's avatar Mathieu Faverge
Browse files

Merge branch 'interface/parsec' into 'master'

PaRSEC DTD Interface

See merge request solverstack/chameleon!72
parents 1ff90ef1 59361c0a
...@@ -37,6 +37,10 @@ if ( CHAMELEON_SCHED_QUARK ) ...@@ -37,6 +37,10 @@ if ( CHAMELEON_SCHED_QUARK )
# No need for those extra diagonale tiles # No need for those extra diagonale tiles
set( CHAMELEON_COPY_DIAG OFF ) set( CHAMELEON_COPY_DIAG OFF )
endif() endif()
if ( CHAMELEON_SCHED_PARSEC )
# Actual DIAG can not be used with PaRSEC
set( CHAMELEON_COPY_DIAG OFF )
endif()
mark_as_advanced(CHAMELEON_COPY_DIAG) mark_as_advanced(CHAMELEON_COPY_DIAG)
......
...@@ -31,8 +31,8 @@ ...@@ -31,8 +31,8 @@
**/ **/
#include "control/common.h" #include "control/common.h"
#define A(m,n) A, (m), (n) #define A(m,n) A, (m), (n)
#define T(m,n) T, (m), (n) #define T(m,n) T, (m), (n)
#define T2(m,n) T, (m), ((n)+A->nt) #define T2(m,n) T, (m), ((n)+A->nt)
#if defined(CHAMELEON_COPY_DIAG) #if defined(CHAMELEON_COPY_DIAG)
#define D(m,n) D, ((m)/BS), 0 #define D(m,n) D, ((m)/BS), 0
......
...@@ -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;
......
...@@ -132,6 +132,7 @@ int MORSE_zgelqf( int M, int N, ...@@ -132,6 +132,7 @@ int MORSE_zgelqf( int M, int N,
/* Submit the matrix conversion back */ /* Submit the matrix conversion back */
morse_ztile2lap( morse, &descAl, &descAt, morse_ztile2lap( morse, &descAl, &descAt,
MorseDescInout, MorseUpperLower, sequence, &request ); MorseDescInout, MorseUpperLower, sequence, &request );
MORSE_Desc_Flush( descT, sequence );
morse_sequence_wait( morse, sequence ); morse_sequence_wait( morse, sequence );
......
...@@ -129,6 +129,8 @@ int MORSE_zgelqf_param( const libhqr_tree_t *qrtree, int M, int N, ...@@ -129,6 +129,8 @@ int MORSE_zgelqf_param( const libhqr_tree_t *qrtree, int M, int N,
/* Submit the matrix conversion back */ /* Submit the matrix conversion back */
morse_ztile2lap( morse, &descAl, &descAt, morse_ztile2lap( morse, &descAl, &descAt,
MorseDescInout, MorseUpperLower, sequence, &request ); MorseDescInout, MorseUpperLower, sequence, &request );
MORSE_Desc_Flush( descTS, sequence );
MORSE_Desc_Flush( descTT, sequence );
morse_sequence_wait( morse, sequence ); morse_sequence_wait( morse, sequence );
......
...@@ -152,6 +152,7 @@ int MORSE_zgelqs( int M, int N, int NRHS, ...@@ -152,6 +152,7 @@ int MORSE_zgelqs( int M, int N, int NRHS,
MorseDescInput, MorseUpperLower, sequence, &request ); MorseDescInput, MorseUpperLower, sequence, &request );
morse_ztile2lap( morse, &descBl, &descBt, morse_ztile2lap( morse, &descBl, &descBt,
MorseDescInout, MorseUpperLower, sequence, &request ); MorseDescInout, MorseUpperLower, sequence, &request );
MORSE_Desc_Flush( descT, sequence );
morse_sequence_wait( morse, sequence ); morse_sequence_wait( morse, sequence );
......
...@@ -154,6 +154,8 @@ int MORSE_zgelqs_param( const libhqr_tree_t *qrtree, int M, int N, int NRHS, ...@@ -154,6 +154,8 @@ int MORSE_zgelqs_param( const libhqr_tree_t *qrtree, int M, int N, int NRHS,
MorseDescInput, MorseUpperLower, sequence, &request ); MorseDescInput, MorseUpperLower, sequence, &request );
morse_ztile2lap( morse, &descBl, &descBt, morse_ztile2lap( morse, &descBl, &descBt,
MorseDescInout, MorseUpperLower, sequence, &request ); MorseDescInout, MorseUpperLower, sequence, &request );
MORSE_Desc_Flush( descTS, sequence );
MORSE_Desc_Flush( descTT, sequence );
morse_sequence_wait( morse, sequence ); morse_sequence_wait( morse, sequence );
......
...@@ -194,6 +194,7 @@ int MORSE_zgels( MORSE_enum trans, int M, int N, int NRHS, ...@@ -194,6 +194,7 @@ int MORSE_zgels( MORSE_enum trans, int M, int N, int NRHS,
MorseDescInout, MorseUpperLower, sequence, &request ); MorseDescInout, MorseUpperLower, sequence, &request );
morse_ztile2lap( morse, &descBl, &descBt, morse_ztile2lap( morse, &descBl, &descBt,
MorseDescInout, MorseUpperLower, sequence, &request ); MorseDescInout, MorseUpperLower, sequence, &request );
MORSE_Desc_Flush( descT, sequence );
morse_sequence_wait( morse, sequence ); morse_sequence_wait( morse, sequence );
......
...@@ -195,6 +195,8 @@ int MORSE_zgels_param( const libhqr_tree_t *qrtree, MORSE_enum trans, int M, int ...@@ -195,6 +195,8 @@ int MORSE_zgels_param( const libhqr_tree_t *qrtree, MORSE_enum trans, int M, int
MorseDescInout, MorseUpperLower, sequence, &request ); MorseDescInout, MorseUpperLower, sequence, &request );
morse_ztile2lap( morse, &descBl, &descBt, morse_ztile2lap( morse, &descBl, &descBt,
MorseDescInout, MorseUpperLower, sequence, &request ); MorseDescInout, MorseUpperLower, sequence, &request );
MORSE_Desc_Flush( descTS, sequence );
MORSE_Desc_Flush( descTT, sequence );
morse_sequence_wait( morse, sequence ); morse_sequence_wait( morse, sequence );
......
...@@ -131,6 +131,7 @@ int MORSE_zgeqrf( int M, int N, ...@@ -131,6 +131,7 @@ int MORSE_zgeqrf( int M, int N,
/* Submit the matrix conversion back */ /* Submit the matrix conversion back */
morse_ztile2lap( morse, &descAl, &descAt, morse_ztile2lap( morse, &descAl, &descAt,
MorseDescInout, MorseUpperLower, sequence, &request ); MorseDescInout, MorseUpperLower, sequence, &request );
MORSE_Desc_Flush( descT, sequence );
morse_sequence_wait( morse, sequence ); morse_sequence_wait( morse, sequence );
......
...@@ -134,6 +134,8 @@ int MORSE_zgeqrf_param( const libhqr_tree_t *qrtree, int M, int N, ...@@ -134,6 +134,8 @@ int MORSE_zgeqrf_param( const libhqr_tree_t *qrtree, int M, int N,
/* Submit the matrix conversion back */ /* Submit the matrix conversion back */
morse_ztile2lap( morse, &descAl, &descAt, morse_ztile2lap( morse, &descAl, &descAt,
MorseDescInout, MorseUpperLower, sequence, &request ); MorseDescInout, MorseUpperLower, sequence, &request );
MORSE_Desc_Flush( descTS, sequence );
MORSE_Desc_Flush( descTT, sequence );
morse_sequence_wait( morse, sequence ); morse_sequence_wait( morse, sequence );
......
...@@ -152,6 +152,7 @@ int MORSE_zgeqrs( int M, int N, int NRHS, ...@@ -152,6 +152,7 @@ int MORSE_zgeqrs( int M, int N, int NRHS,
MorseDescInput, MorseUpperLower, sequence, &request ); MorseDescInput, MorseUpperLower, sequence, &request );
morse_ztile2lap( morse, &descBl, &descBt, morse_ztile2lap( morse, &descBl, &descBt,
MorseDescInout, MorseUpperLower, sequence, &request ); MorseDescInout, MorseUpperLower, sequence, &request );
MORSE_Desc_Flush( descT, sequence );
morse_sequence_wait( morse, sequence ); morse_sequence_wait( morse, sequence );
......
...@@ -147,6 +147,8 @@ int MORSE_zgeqrs_param( const libhqr_tree_t *qrtree, int M, int N, int NRHS, ...@@ -147,6 +147,8 @@ int MORSE_zgeqrs_param( const libhqr_tree_t *qrtree, int M, int N, int NRHS,
MorseDescInput, MorseUpperLower, sequence, &request ); MorseDescInput, MorseUpperLower, sequence, &request );
morse_ztile2lap( morse, &descBl, &descBt, morse_ztile2lap( morse, &descBl, &descBt,
MorseDescInout, MorseUpperLower, sequence, &request ); MorseDescInout, MorseUpperLower, sequence, &request );
MORSE_Desc_Flush( descTS, sequence );
MORSE_Desc_Flush( descTT, sequence );
morse_sequence_wait( morse, sequence ); morse_sequence_wait( morse, sequence );
......
...@@ -151,6 +151,7 @@ int MORSE_zgesv_incpiv( int N, int NRHS, ...@@ -151,6 +151,7 @@ int MORSE_zgesv_incpiv( int N, int NRHS,
MorseDescInout, MorseUpperLower, sequence, &request ); MorseDescInout, MorseUpperLower, sequence, &request );
morse_ztile2lap( morse, &descBl, &descBt, morse_ztile2lap( morse, &descBl, &descBt,
MorseDescInout, MorseUpperLower, sequence, &request ); MorseDescInout, MorseUpperLower, sequence, &request );
MORSE_Desc_Flush( descL, sequence );
morse_sequence_wait( morse, sequence ); morse_sequence_wait( morse, sequence );
...@@ -267,6 +268,7 @@ int MORSE_zgesv_incpiv_Tile_Async( MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV, ...@@ -267,6 +268,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 +315,28 @@ int MORSE_zgesv_incpiv_Tile_Async( MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV, ...@@ -313,11 +315,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;
} }
...@@ -133,6 +133,7 @@ int MORSE_zgetrf_incpiv( int M, int N, ...@@ -133,6 +133,7 @@ int MORSE_zgetrf_incpiv( int M, int N,
/* Submit the matrix conversion back */ /* Submit the matrix conversion back */
morse_ztile2lap( morse, &descAl, &descAt, morse_ztile2lap( morse, &descAl, &descAt,
MorseDescInout, MorseUpperLower, sequence, &request ); MorseDescInout, MorseUpperLower, sequence, &request );
MORSE_Desc_Flush( descL, sequence );
morse_sequence_wait( morse, sequence ); morse_sequence_wait( morse, sequence );
...@@ -244,6 +245,7 @@ int MORSE_zgetrf_incpiv_Tile_Async( MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV, ...@@ -244,6 +245,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 +288,23 @@ int MORSE_zgetrf_incpiv_Tile_Async( MORSE_desc_t *A, MORSE_desc_t *L, int *IPIV, ...@@ -286,7 +288,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;
} }
...@@ -157,6 +157,7 @@ int MORSE_zgetrs_incpiv( MORSE_enum trans, int N, int NRHS, ...@@ -157,6 +157,7 @@ int MORSE_zgetrs_incpiv( MORSE_enum trans, int N, int NRHS,
MorseDescInput, MorseUpperLower, sequence, &request ); MorseDescInput, MorseUpperLower, sequence, &request );
morse_ztile2lap( morse, &descBl, &descBt, morse_ztile2lap( morse, &descBl, &descBt,
MorseDescInout, MorseUpperLower, sequence, &request ); MorseDescInout, MorseUpperLower, sequence, &request );
MORSE_Desc_Flush( descL, sequence );
morse_sequence_wait( morse, sequence ); morse_sequence_wait( morse, sequence );
......
...@@ -232,6 +232,8 @@ int MORSE_ztpgqrt( int M, int N, int K, int L, ...@@ -232,6 +232,8 @@ int MORSE_ztpgqrt( int M, int N, int K, int L,
MorseDescInout, MorseUpperLower, sequence, &request ); MorseDescInout, MorseUpperLower, sequence, &request );
morse_ztile2lap( morse, &descQ2l, &descQ2t, morse_ztile2lap( morse, &descQ2l, &descQ2t,
MorseDescInout, MorseUpperLower, sequence, &request ); MorseDescInout, MorseUpperLower, sequence, &request );
MORSE_Desc_Flush( descT1, sequence );
MORSE_Desc_Flush( descT2, sequence );
morse_sequence_wait( morse, sequence ); morse_sequence_wait( morse, sequence );
......
...@@ -200,6 +200,7 @@ int MORSE_ztpqrt( int M, int N, int L, ...@@ -200,6 +200,7 @@ int MORSE_ztpqrt( int M, int N, int L,
MorseDescInout, MorseUpper, sequence, &request ); MorseDescInout, MorseUpper, sequence, &request );
morse_ztile2lap( morse, &descBl, &descBt, morse_ztile2lap( morse, &descBl, &descBt,
MorseDescInout, MorseUpperLower, sequence, &request ); MorseDescInout, MorseUpperLower, sequence, &request );
MORSE_Desc_Flush( descT, sequence );
morse_sequence_wait( morse, sequence ); morse_sequence_wait( morse, sequence );
......
...@@ -151,6 +151,7 @@ int MORSE_zunglq( int M, int N, int K, ...@@ -151,6 +151,7 @@ int MORSE_zunglq( int M, int N, int K,
MorseDescInput, MorseUpper, sequence, &request ); MorseDescInput, MorseUpper, sequence, &request );
morse_ztile2lap( morse, &descQl, &descQt, morse_ztile2lap( morse, &descQl, &descQt,
MorseDescInout, MorseUpperLower, sequence, &request ); MorseDescInout, MorseUpperLower, sequence, &request );
MORSE_Desc_Flush( descT, sequence );
morse_sequence_wait( morse, sequence ); morse_sequence_wait( morse, sequence );
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment