view TaskManager/Gpu/GpuThreads.cc @ 1483:f402f6444237 draft

create gpuTaskinit
author Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
date Mon, 06 Aug 2012 19:55:47 +0900
parents 85a848d7f181
children 5517f93e2706
line wrap: on
line source

#include "GpuThreads.h"
#include "GpuScheduler.h"
#include "TaskManagerImpl.h"
#include "SpeTaskManagerImpl.h"


GpuThreads::GpuThreads(int useRefDma) : use_refdma(useRefDma)
{
    threads = new pthread_t;
    args = new gpu_thread_arg_t;
}

GpuThreads::~GpuThreads()
{
    delete threads;
    delete args;

}

void
GpuThreads::set_wait(SemPtr wait)
{
    args->wait=wait;
}

void
GpuThreads::init()
{
    args->scheduler = new GpuScheduler();    
    args->useRefDma = use_refdma;

    pthread_create(threads, NULL, &gpu_thread_run, args);
    
    
}

void *
GpuThreads::gpu_thread_run(void *args)
{
    gpu_thread_arg_t *argt = (gpu_thread_arg_t *) args;
    Scheduler *g_scheduler = argt->scheduler;
    
    TaskManagerImpl *manager = new SpeTaskManagerImpl();
    g_scheduler->init(manager, argt->useRefDma);
    
    manager->set_scheduler(g_scheduler);

    argt->wait->sem_v();

    g_scheduler->run();
    g_scheduler->finish();

    return NULL;
}

int
GpuThreads::get_mail(int speid, int count, memaddr *ret)
{
    *ret = args->scheduler->mail_read_from_host();
    return 1;
}

int
GpuThreads::has_mail(int speid, int count, memaddr *ret)
{
    if (args->scheduler->has_mail_from_host() != 0) {
        return get_mail(0, 0, ret);
    } else {
        return 0;
    }
}

void
GpuThreads::send_mail(int speid, int num, memaddr *data)
{
    args->scheduler->mail_write_from_host(*data);
}

void
GpuThreads::add_output_tasklist(int command, memaddr buff, int alloc_size)
{
}