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