-
Mathieu Faverge authoredMathieu Faverge authored
runtime_async.c 2.40 KiB
/**
*
* @copyright (c) 2009-2015 The University of Tennessee and The University
* of Tennessee Research Foundation.
* All rights reserved.
* @copyright (c) 2012-2015 Inria. All rights reserved.
* @copyright (c) 2012-2015 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
*
**/
#include <stdlib.h>
#include "runtime/parsec/include/morse_parsec.h"
/*******************************************************************************
* Create a sequence
**/
int RUNTIME_sequence_create(MORSE_context_t *morse, MORSE_sequence_t *sequence)
{
dague_context_t *dague = (dague_context_t *)morse->schedopt;
dague_dtd_handle_t *dague_dtd_handle = dague_dtd_handle_new((dague_context_t *)morse->schedopt, 1);
dague_enqueue(dague, (dague_handle_t*) dague_dtd_handle);
sequence->schedopt = dague_dtd_handle;
#if defined (OVERLAP)
dague_context_start(dague);
#endif
return MORSE_SUCCESS;
}
/*******************************************************************************
* Destroy a sequence
**/
int RUNTIME_sequence_destroy(MORSE_context_t *morse, MORSE_sequence_t *sequence)
{
dague_context_t *dague = (dague_context_t *)morse->schedopt;
dague_dtd_handle_t *dague_dtd_handle = (dague_dtd_handle_t *) sequence->schedopt;
(void)morse;
assert( dague_dtd_handle );
dague_dtd_context_wait_on_handle(dague, dague_dtd_handle);
dague_dtd_handle_destruct(dague_dtd_handle);
sequence->schedopt = NULL;
return MORSE_SUCCESS;
}
/*******************************************************************************
* Wait for the completion of a sequence
**/
int RUNTIME_sequence_wait(MORSE_context_t *morse, MORSE_sequence_t *sequence )
{
dague_context_t *dague = (dague_context_t *)morse->schedopt;
dague_dtd_handle_t *dague_dtd_handle = (dague_dtd_handle_t *) sequence->schedopt;
assert( dague_dtd_handle );
dague_dtd_handle_wait(dague, dague_dtd_handle);
return MORSE_SUCCESS;
}
/*******************************************************************************
* Terminate a sequence
**/
void RUNTIME_sequence_flush(void *schedopt, MORSE_sequence_t *sequence, MORSE_request_t *request, int status)
{
dague_context_t *dague = (dague_context_t *)schedopt;
(void)schedopt;
sequence->request = request;
sequence->status = status;
request->status = status;
return;
}