view src/parallel_execution/worker.c @ 148:473b7d990a1f

fix data gears type enum
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Thu, 10 Nov 2016 12:07:53 +0900
parents d529c024e5a5
children 63ab65b28466
line wrap: on
line source

#include <libkern/OSAtomic.h>

#include "context.h"
#include "origin_cs.h"

__code getQueue(struct Context* context, struct Queue* queue, struct Node* node) {
    if (queue->first == 0)
        return;

    struct Element* first = queue->first;
    if (__sync_bool_compare_and_swap(&queue->first, first, first->next)) {
        queue->count--;

        context->next = GetQueue;
        node->key = ((struct Task *)(first->data))->key;

        struct Traverse *t = &context->data[D_Traverse]->traverse;
        t->next = ((struct Task *)(first->data))->code;
        goto meta(context, C_get);
    } else {
        goto meta(context, GetQueue);
    }
}

__code getQueue_stub(struct Context* context) {
    goto getQueue(context, &context->data[D_ActiveQueue]->queue, &context->data[D_Node]->node);
}

#ifdef USE_CUDA
__code twiceGpu(struct Context* context) {
    cuMemcpyHtoDAsync(context,context,context,context->stream);
    cuLaunchkanel();
    cuMemcpyDtoHAsync();
}
#endif