Example #1
0
static inline void check_out_finish(finish_t *finish) {
    if (finish) {
        // hc_atomic_dec returns true when finish->counter goes to zero
        const int old = hc_atomic_dec(&(finish->counter));
        if (old == 1) {
            // If old was 1 and we decremented to 0
            hclib_promise_put(finish->finish_dep->owner, finish);
        }
    }
}
Example #2
0
void fib_ddt_res(void * raw_args) {
    FibDDtArgs *args = raw_args;
    FibDDtArgs *lhs = promise_get(args->subres[0]);
    FibDDtArgs *rhs = promise_get(args->subres[1]);
    args->resval =  lhs->resval + rhs->resval;
    hclib_promise_put(args->res, args);
    // cleanup
    free_ddt_args(lhs);
    free_ddt_args(rhs);
}
Example #3
0
void fib_ddt(void * raw_args) {
    FibDDtArgs *args = raw_args;
    if (args->n < 2) {
        args->resval = args->n;
        hclib_promise_put(args->res, args);
    }
    else {
        FibDDtArgs *lhsArgs = setup_fib_ddt_args(args->n - 1);
        FibDDtArgs *rhsArgs = setup_fib_ddt_args(args->n - 2);
        args->subres[0] = lhsArgs->res;
        args->subres[1] = rhsArgs->res;
        // sub-computation asyncs
        hclib_async(fib_ddt, lhsArgs, NO_FUTURE, NO_PHASER, ANY_PLACE, MY_ESCAPE_PROP);
        hclib_async(fib_ddt, rhsArgs, NO_FUTURE, NO_PHASER, ANY_PLACE, MY_ESCAPE_PROP);
        // async-await for sub-results
        hclib_async(fib_ddt_res, args, ps2fs(args->subres), NO_PHASER, ANY_PLACE, MY_ESCAPE_PROP);
    }
}
Example #4
0
static void future_caller(void *in) {
    future_args_wrapper *args = in;
    void *user_result = (args->fp)(args->actual_in);
    hclib_promise_put(&args->event, user_result);
}
Example #5
0
void shmem_satisfy_promise(shmem_promise_t *promise, void* datum) {
  hclib_promise_put((hclib_promise_t *) promise, datum);
}