view src/parallel_execution/worker.c @ 98:d400948dbbab

add Cuda infomation to context
author ikkun
date Mon, 01 Feb 2016 18:03:43 +0900
parents 3e28ee215c0e
children 8987cf13d5bb
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)) {
    if (OSAtomicCompareAndSwapPtr(first, first->next, (void*)&queue->first)) {
        queue->count--;
        
        context->next = GetQueue;
        stack_push(context->code_stack, &context->next);
        
        context->next = first->task->code;
        node->key = first->task->key;
        
        goto meta(context, Get);
    } else {
        goto meta(context, GetQueue);
    }
}

__code getQueue_stub(struct Context* context) {
    goto getQueue(context, &context->data[ActiveQueue]->queue, &context->data[Node]->node);
}
__code twiceGpu(struct Context* context) {
    cuMemcpyHtoDAsync(context,context,context,context->stream);
    cuLaunchkanel();
    cuMemcpyDtoHAsync();
}