view TaskManager/Gpu/GpuScheduler.h @ 1633:fbb4757d82ee draft

refactor GpuScheduler
author Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
date Tue, 11 Jun 2013 16:32:17 +0900
parents 39a381fec1e7
children 4baed436fc58
line wrap: on
line source

#ifndef INCLUDED_GPU_SCHEDULER
#define INCLUDED_GPU_SCHEDULER

#include "Scheduler.h"
#include "FifoDmaManager.h"
#include "GpuThreads.h"
#include "HTask.h"
#include "TaskManager.h"

#ifdef __APPLE__
#include <OpenCL/opencl.h>
#else
#include <CL/cl.h>
#endif

extern TaskObject gpu_task_list[MAX_TASK_OBJECT];

class GpuScheduler : public Scheduler {
 public:
    GpuScheduler();
    virtual ~GpuScheduler();
    void init_impl(int useRefDma);
    void init_gpu();
    void wait_for_event(cl_event* event,memaddr* reply,int cur);
    void run();
    
    void mail_write_from_host(memaddr data) {
        fifoDmaManager->mail_write_from_host(data);
    }

    memaddr mail_read_from_host() {
        return fifoDmaManager->mail_read_from_host();
    }

    int has_mail_from_host() {
        return fifoDmaManager->has_mail_from_host();
    }

    cl_platform_id platform_id;
    cl_device_id device_id;
    cl_uint ret_num_platforms;
    cl_uint ret_num_devices;
    cl_context context;
    cl_command_queue command_queue;
    cl_int ret;
private:
    FifoDmaManager *fifoDmaManager;
    void load_kernel(int cmd);

};

#define GpuSchedRegister(str, filename, functionname)   \
    gpu_register_task(str, filename, functionname);
#endif

extern void gpu_register_task(int cmd,const char* filename,const char* functionname);