From 355f28be66d46fdd4943207d2c174043b61bebae Mon Sep 17 00:00:00 2001 From: Florent Pruvost <florent.pruvost@inria.fr> Date: Mon, 15 Oct 2018 16:02:36 +0200 Subject: [PATCH] save the exit status of kernels when possible (parsec) --- runtime/parsec/codelets/codelet_zgetrf.c | 24 ++++++++---- .../parsec/codelets/codelet_zgetrf_incpiv.c | 27 ++++++++----- .../parsec/codelets/codelet_zgetrf_nopiv.c | 22 +++++++---- runtime/parsec/codelets/codelet_zlag2c.c | 1 - runtime/parsec/codelets/codelet_zpotrf.c | 23 ++++++----- runtime/parsec/codelets/codelet_ztrtri.c | 22 +++++++---- runtime/parsec/codelets/codelet_ztstrf.c | 39 +++++++++++-------- 7 files changed, 100 insertions(+), 58 deletions(-) diff --git a/runtime/parsec/codelets/codelet_zgetrf.c b/runtime/parsec/codelets/codelet_zgetrf.c index a7eaee7f0..d13b959f5 100644 --- a/runtime/parsec/codelets/codelet_zgetrf.c +++ b/runtime/parsec/codelets/codelet_zgetrf.c @@ -31,13 +31,19 @@ CORE_zgetrf_parsec( parsec_execution_stream_t *context, int *IPIV; cham_bool_t *check_info; int iinfo; + RUNTIME_sequence_t *sequence; + RUNTIME_request_t *request; int info; parsec_dtd_unpack_args( - this_task, &m, &n, &A, &lda, &IPIV, &check_info, &iinfo ); + this_task, &m, &n, &A, &lda, &IPIV, &check_info, &iinfo, &sequence, &request ); CORE_zgetrf( m, n, A, lda, IPIV, &info ); + if ( (sequence->status == CHAMELEON_SUCCESS) && (info != 0) ) { + RUNTIME_sequence_flush( NULL, sequence, request, iinfo+info ); + } + (void)context; return PARSEC_HOOK_RETURN_DONE; } @@ -52,12 +58,14 @@ void INSERT_TASK_zgetrf(const RUNTIME_option_t *options, parsec_dtd_taskpool_insert_task( PARSEC_dtd_taskpool, CORE_zgetrf_parsec, options->priority, "getrf", - sizeof(int), &m, VALUE, - sizeof(int), &n, VALUE, - PASSED_BY_REF, RTBLKADDR( A, CHAMELEON_Complex64_t, Am, An ), chameleon_parsec_get_arena_index( A ) | INOUT | AFFINITY, - sizeof(int), &lda, VALUE, - sizeof(int)*nb, IPIV, SCRATCH, - sizeof(cham_bool_t), &check_info, VALUE, - sizeof(int), &iinfo, VALUE, + sizeof(int), &m, VALUE, + sizeof(int), &n, VALUE, + PASSED_BY_REF, RTBLKADDR( A, CHAMELEON_Complex64_t, Am, An ), chameleon_parsec_get_arena_index( A ) | INOUT | AFFINITY, + sizeof(int), &lda, VALUE, + sizeof(int)*nb, IPIV, SCRATCH, + sizeof(cham_bool_t), &check_info, VALUE, + sizeof(int), &iinfo, VALUE, + sizeof(RUNTIME_sequence_t*), &(options->sequence), VALUE, + sizeof(RUNTIME_request_t*), &(options->request), VALUE, PARSEC_DTD_ARG_END ); } diff --git a/runtime/parsec/codelets/codelet_zgetrf_incpiv.c b/runtime/parsec/codelets/codelet_zgetrf_incpiv.c index f8bae1c2b..d326342e1 100644 --- a/runtime/parsec/codelets/codelet_zgetrf_incpiv.c +++ b/runtime/parsec/codelets/codelet_zgetrf_incpiv.c @@ -86,14 +86,19 @@ CORE_zgetrf_incpiv_parsec( parsec_execution_stream_t *context, int *IPIV; cham_bool_t *check_info; int iinfo; - + RUNTIME_sequence_t *sequence; + RUNTIME_request_t *request; int info; parsec_dtd_unpack_args( - this_task, &m, &n, &ib, &A, &lda, &IPIV, &check_info, &iinfo ); + this_task, &m, &n, &ib, &A, &lda, &IPIV, &check_info, &iinfo, &sequence, &request ); CORE_zgetrf_incpiv( m, n, ib, A, lda, IPIV, &info ); + if ( (sequence->status == CHAMELEON_SUCCESS) && (info != 0) ) { + RUNTIME_sequence_flush( NULL, sequence, request, iinfo+info ); + } + (void)context; return PARSEC_HOOK_RETURN_DONE; } @@ -109,14 +114,16 @@ void INSERT_TASK_zgetrf_incpiv( const RUNTIME_option_t *options, parsec_dtd_taskpool_insert_task( PARSEC_dtd_taskpool, CORE_zgetrf_incpiv_parsec, options->priority, "getrf_inc", - sizeof(int), &m, VALUE, - sizeof(int), &n, VALUE, - sizeof(int), &ib, VALUE, - PASSED_BY_REF, RTBLKADDR( A, CHAMELEON_Complex64_t, Am, An ), chameleon_parsec_get_arena_index( A ) | INOUT | AFFINITY, - sizeof(int), &lda, VALUE, - sizeof(int*), &IPIV, VALUE, - sizeof(int), &check_info, VALUE, - sizeof(int), &iinfo, VALUE, + sizeof(int), &m, VALUE, + sizeof(int), &n, VALUE, + sizeof(int), &ib, VALUE, + PASSED_BY_REF, RTBLKADDR( A, CHAMELEON_Complex64_t, Am, An ), chameleon_parsec_get_arena_index( A ) | INOUT | AFFINITY, + sizeof(int), &lda, VALUE, + sizeof(int*), &IPIV, VALUE, + sizeof(int), &check_info, VALUE, + sizeof(int), &iinfo, VALUE, + sizeof(RUNTIME_sequence_t*), &(options->sequence), VALUE, + sizeof(RUNTIME_request_t*), &(options->request), VALUE, PARSEC_DTD_ARG_END ); (void)L; diff --git a/runtime/parsec/codelets/codelet_zgetrf_nopiv.c b/runtime/parsec/codelets/codelet_zgetrf_nopiv.c index 6d755bdad..6439294a0 100644 --- a/runtime/parsec/codelets/codelet_zgetrf_nopiv.c +++ b/runtime/parsec/codelets/codelet_zgetrf_nopiv.c @@ -77,13 +77,19 @@ CORE_zgetrf_nopiv_parsec( parsec_execution_stream_t *context, CHAMELEON_Complex64_t *A; int lda; int iinfo; + RUNTIME_sequence_t *sequence; + RUNTIME_request_t *request; int info; parsec_dtd_unpack_args( - this_task, &m, &n, &ib, &A, &lda, &iinfo ); + this_task, &m, &n, &ib, &A, &lda, &iinfo, &sequence, &request ); CORE_zgetrf_nopiv( m, n, ib, A, lda, &info ); + if ( (sequence->status == CHAMELEON_SUCCESS) && (info != 0) ) { + RUNTIME_sequence_flush( NULL, sequence, request, iinfo+info ); + } + (void)context; return PARSEC_HOOK_RETURN_DONE; } @@ -97,12 +103,14 @@ void INSERT_TASK_zgetrf_nopiv(const RUNTIME_option_t *options, parsec_dtd_taskpool_insert_task( PARSEC_dtd_taskpool, CORE_zgetrf_nopiv_parsec, options->priority, "getrf_nopiv", - sizeof(int), &m, VALUE, - sizeof(int), &n, VALUE, - sizeof(int), &ib, VALUE, - PASSED_BY_REF, RTBLKADDR( A, CHAMELEON_Complex64_t, Am, An ), chameleon_parsec_get_arena_index( A ) | INOUT | AFFINITY, - sizeof(int), &lda, VALUE, - sizeof(int), &iinfo, VALUE, + sizeof(int), &m, VALUE, + sizeof(int), &n, VALUE, + sizeof(int), &ib, VALUE, + PASSED_BY_REF, RTBLKADDR( A, CHAMELEON_Complex64_t, Am, An ), chameleon_parsec_get_arena_index( A ) | INOUT | AFFINITY, + sizeof(int), &lda, VALUE, + sizeof(int), &iinfo, VALUE, + sizeof(RUNTIME_sequence_t*), &(options->sequence), VALUE, + sizeof(RUNTIME_request_t*), &(options->request), VALUE, PARSEC_DTD_ARG_END ); (void)nb; diff --git a/runtime/parsec/codelets/codelet_zlag2c.c b/runtime/parsec/codelets/codelet_zlag2c.c index d9f17eaa5..1a1268829 100644 --- a/runtime/parsec/codelets/codelet_zlag2c.c +++ b/runtime/parsec/codelets/codelet_zlag2c.c @@ -35,7 +35,6 @@ CORE_zlag2c_parsec( parsec_execution_stream_t *context, int lda; CHAMELEON_Complex32_t *B; int ldb; - int info; parsec_dtd_unpack_args( this_task, &m, &n, &A, &lda, &B, &ldb ); diff --git a/runtime/parsec/codelets/codelet_zpotrf.c b/runtime/parsec/codelets/codelet_zpotrf.c index 32928d1b0..40caa4c84 100644 --- a/runtime/parsec/codelets/codelet_zpotrf.c +++ b/runtime/parsec/codelets/codelet_zpotrf.c @@ -31,16 +31,19 @@ CORE_zpotrf_parsec( parsec_execution_stream_t *context, { cham_uplo_t uplo; int tempkm, ldak, iinfo, info; + RUNTIME_sequence_t *sequence; + RUNTIME_request_t *request; CHAMELEON_Complex64_t *A; parsec_dtd_unpack_args( - this_task, &uplo, &tempkm, &A, &ldak, &iinfo ); + this_task, &uplo, &tempkm, &A, &ldak, &iinfo, &sequence, &request ); CORE_zpotrf( uplo, tempkm, A, ldak, &info ); - /* if ( (sequence->status == CHAMELEON_SUCCESS) && (info != 0) ) { */ - /* RUNTIME_sequence_flush( (CHAM_context_t*)quark, sequence, request, iinfo+info ); */ - /* } */ + if ( (sequence->status == CHAMELEON_SUCCESS) && (info != 0) ) { + RUNTIME_sequence_flush( NULL, sequence, request, iinfo+info ); + } + (void)context; (void)info; (void)iinfo; @@ -56,11 +59,13 @@ void INSERT_TASK_zpotrf(const RUNTIME_option_t *options, parsec_dtd_taskpool_insert_task( PARSEC_dtd_taskpool, CORE_zpotrf_parsec, options->priority, "potrf", - sizeof(int), &uplo, VALUE, - sizeof(int), &n, VALUE, - PASSED_BY_REF, RTBLKADDR( A, CHAMELEON_Complex64_t, Am, An ), chameleon_parsec_get_arena_index( A ) | INOUT | AFFINITY, - sizeof(int), &lda, VALUE, - sizeof(int), &iinfo, VALUE, + sizeof(int), &uplo, VALUE, + sizeof(int), &n, VALUE, + PASSED_BY_REF, RTBLKADDR( A, CHAMELEON_Complex64_t, Am, An ), chameleon_parsec_get_arena_index( A ) | INOUT | AFFINITY, + sizeof(int), &lda, VALUE, + sizeof(int), &iinfo, VALUE, + sizeof(RUNTIME_sequence_t*), &(options->sequence), VALUE, + sizeof(RUNTIME_request_t*), &(options->request), VALUE, PARSEC_DTD_ARG_END ); (void)nb; diff --git a/runtime/parsec/codelets/codelet_ztrtri.c b/runtime/parsec/codelets/codelet_ztrtri.c index e4eb4b3e0..3a8e8eb9d 100644 --- a/runtime/parsec/codelets/codelet_ztrtri.c +++ b/runtime/parsec/codelets/codelet_ztrtri.c @@ -30,13 +30,19 @@ CORE_ztrtri_parsec( parsec_execution_stream_t *context, CHAMELEON_Complex64_t *A; int LDA; int iinfo; + RUNTIME_sequence_t *sequence; + RUNTIME_request_t *request; int info; parsec_dtd_unpack_args( - this_task, &uplo, &diag, &N, &A, &LDA, &iinfo ); + this_task, &uplo, &diag, &N, &A, &LDA, &iinfo, &sequence, &request ); CORE_ztrtri( uplo, diag, N, A, LDA, &info ); + if ( (sequence->status == CHAMELEON_SUCCESS) && (info != 0) ) { + RUNTIME_sequence_flush( NULL, sequence, request, iinfo+info ); + } + (void)context; return PARSEC_HOOK_RETURN_DONE; } @@ -51,12 +57,14 @@ void INSERT_TASK_ztrtri( const RUNTIME_option_t *options, parsec_dtd_taskpool_insert_task( PARSEC_dtd_taskpool, CORE_ztrtri_parsec, options->priority, "trtri", - sizeof(int), &uplo, VALUE, - sizeof(int), &diag, VALUE, - sizeof(int), &n, VALUE, - PASSED_BY_REF, RTBLKADDR( A, CHAMELEON_Complex64_t, Am, An ), chameleon_parsec_get_arena_index( A ) | INOUT | AFFINITY, - sizeof(int), &lda, VALUE, - sizeof(int), &iinfo, VALUE, + sizeof(int), &uplo, VALUE, + sizeof(int), &diag, VALUE, + sizeof(int), &n, VALUE, + PASSED_BY_REF, RTBLKADDR( A, CHAMELEON_Complex64_t, Am, An ), chameleon_parsec_get_arena_index( A ) | INOUT | AFFINITY, + sizeof(int), &lda, VALUE, + sizeof(int), &iinfo, VALUE, + sizeof(RUNTIME_sequence_t*), &(options->sequence), VALUE, + sizeof(RUNTIME_request_t*), &(options->request), VALUE, PARSEC_DTD_ARG_END ); (void)nb; diff --git a/runtime/parsec/codelets/codelet_ztstrf.c b/runtime/parsec/codelets/codelet_ztstrf.c index d5ab7a779..cf63ad965 100644 --- a/runtime/parsec/codelets/codelet_ztstrf.c +++ b/runtime/parsec/codelets/codelet_ztstrf.c @@ -39,14 +39,19 @@ CORE_ztstrf_parsec( parsec_execution_stream_t *context, int ldwork; cham_bool_t *check_info; int iinfo; - + RUNTIME_sequence_t *sequence; + RUNTIME_request_t *request; int info; parsec_dtd_unpack_args( - this_task, &m, &n, &ib, &nb, &U, &ldu, &A, &lda, &L, &ldl, &IPIV, &WORK, &ldwork, &check_info, &iinfo ); + this_task, &m, &n, &ib, &nb, &U, &ldu, &A, &lda, &L, &ldl, &IPIV, &WORK, &ldwork, &check_info, &iinfo, &sequence, &request ); CORE_ztstrf( m, n, ib, nb, U, ldu, A, lda, L, ldl, IPIV, WORK, ldwork, &info ); + if ( (sequence->status == CHAMELEON_SUCCESS) && (info != 0) ) { + RUNTIME_sequence_flush( NULL, sequence, request, iinfo+info ); + } + (void)context; return PARSEC_HOOK_RETURN_DONE; } @@ -63,21 +68,23 @@ void INSERT_TASK_ztstrf(const RUNTIME_option_t *options, parsec_dtd_taskpool_insert_task( PARSEC_dtd_taskpool, CORE_ztstrf_parsec, options->priority, "tstrf", - sizeof(int), &m, VALUE, - sizeof(int), &n, VALUE, - sizeof(int), &ib, VALUE, - sizeof(int), &nb, VALUE, - PASSED_BY_REF, RTBLKADDR( U, CHAMELEON_Complex64_t, Um, Un ), chameleon_parsec_get_arena_index( U ) | INOUT, - sizeof(int), &ldu, VALUE, - PASSED_BY_REF, RTBLKADDR( A, CHAMELEON_Complex64_t, Am, An ), chameleon_parsec_get_arena_index( A ) | INOUT | AFFINITY, - sizeof(int), &lda, VALUE, - PASSED_BY_REF, RTBLKADDR( L, CHAMELEON_Complex64_t, Lm, Ln ), chameleon_parsec_get_arena_index( L ) | OUTPUT, - sizeof(int), &ldl, VALUE, - sizeof(int*), &IPIV, VALUE, + sizeof(int), &m, VALUE, + sizeof(int), &n, VALUE, + sizeof(int), &ib, VALUE, + sizeof(int), &nb, VALUE, + PASSED_BY_REF, RTBLKADDR( U, CHAMELEON_Complex64_t, Um, Un ), chameleon_parsec_get_arena_index( U ) | INOUT, + sizeof(int), &ldu, VALUE, + PASSED_BY_REF, RTBLKADDR( A, CHAMELEON_Complex64_t, Am, An ), chameleon_parsec_get_arena_index( A ) | INOUT | AFFINITY, + sizeof(int), &lda, VALUE, + PASSED_BY_REF, RTBLKADDR( L, CHAMELEON_Complex64_t, Lm, Ln ), chameleon_parsec_get_arena_index( L ) | OUTPUT, + sizeof(int), &ldl, VALUE, + sizeof(int*), &IPIV, VALUE, sizeof(CHAMELEON_Complex64_t)*ib*nb, NULL, SCRATCH, - sizeof(int), &nb, VALUE, - sizeof(int), &check_info, VALUE, - sizeof(int), &iinfo, VALUE, + sizeof(int), &nb, VALUE, + sizeof(int), &check_info, VALUE, + sizeof(int), &iinfo, VALUE, + sizeof(RUNTIME_sequence_t*), &(options->sequence), VALUE, + sizeof(RUNTIME_request_t*), &(options->request), VALUE, PARSEC_DTD_ARG_END ); (void)nb; -- GitLab