Mentions légales du service

Skip to content
Snippets Groups Projects
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;
}