Mercurial > hg > Game > Cerium
diff TaskManager/Cuda/CudaScheduler.h @ 1908:bd5152f8fe3a draft
cuda
author | Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 17 Jan 2014 10:21:08 +0900 |
parents | |
children | effb5653fd5c |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TaskManager/Cuda/CudaScheduler.h Fri Jan 17 10:21:08 2014 +0900 @@ -0,0 +1,60 @@ +#ifndef INCLUDE_CUDA_SCHEDULER +#define INCLUDE_CUDA_SCHEDULER + +#include "MainScheduler.h" +#include "FifoDmaManager.h" +#include "CudaThreads.h" +#include "HTask.h" +#include "TaskManager.h" + +extern TaskObject cuda_task_list[MAX_TASK_OBJECT]; + +class CudaScheduler : public MainScheduler { + public: + typedef struct cudabuffer { + int allcate_size; + int size; + CUdeviceptr* buf; + CUevent* event; + } CudaBuffer; + cudabuffer* CudaBufferPtr; + CudaScheduler(); + virtual ~CudaScheduler(); + void init_gpu(); + void wait_for_event(CUevent* event, CudaBufferPtr m, TaskListPtr taskList, int cur); + void run(); + + // platform platform; + // platform は OpenCL が複数のメーカーの GPU に対応してるから必要 + // Cuda の場合、NVIDIA だけなので必要ない? + // Cuda で CPU 使うとき要るんじゃね? + // そもそも CPU 使えたっけ? + CUdevice device; + unsigned int ret_num_platforms; // たぶん要らない + unsigned int ret_num_devices; + CUcontext context; + // command_queue command_queue; + // Cuda には command_queue に相当するものはない + // Closest approximation would be the CUDA Stream mechanism. らしい... + int ret; + memaddr reply; + // cl_kernel に相当 + // 変数名は function にすべきか kernel にすべきか + // とりあえず、kernel で + CUfunction kernel[2]; + CUevent kernel_event[2]; + CudaBuffer memin[2]; + CudaBuffer memout[2]; + HTask::htask_flag[2]; + + privete: + int load_kernel(int cmd); + CUdeviceptr createBuffer(CudaBufferPtr m, int i, CUcontext context, /* mem_flag mem_flag, */size_t size, int* error); + void initCudaBuffer(CudaBufferPtr m); + void destroyCudaBuffer(CudaBufferPtr m); + void CudaTaskError(int cur, TaskListPtr taskList, int ret); +}; + +#define CudaSchedRegister(str, filename, functionname) \ + cuda_register_task(str, filename, functionname); +#endif