Mercurial > hg > Game > Cerium
annotate TaskManager/Cuda/CudaScheduler.h @ 1925:cd5bbd8ec5d6 draft
fix CudaScheduler
author | Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 31 Jan 2014 05:56:23 +0900 |
parents | 14f9fc88872c |
children | 4eefec26e3e2 |
rev | line source |
---|---|
1908 | 1 #ifndef INCLUDE_CUDA_SCHEDULER |
2 #define INCLUDE_CUDA_SCHEDULER | |
3 | |
4 #include "MainScheduler.h" | |
5 #include "FifoDmaManager.h" | |
6 #include "CudaThreads.h" | |
7 #include "HTask.h" | |
8 #include "TaskManager.h" | |
1915
effb5653fd5c
update cuda, yet running
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
1908
diff
changeset
|
9 #include <cuda.h> |
1908 | 10 |
11 extern TaskObject cuda_task_list[MAX_TASK_OBJECT]; | |
12 | |
13 class CudaScheduler : public MainScheduler { | |
14 public: | |
15 typedef struct cudabuffer { | |
16 int allcate_size; | |
1924 | 17 int in_size; |
18 int out_size; | |
19 CUdeviceptr* memin; | |
20 CUdeviceptr* memout; | |
1908 | 21 CUevent* event; |
1924 | 22 CUstream stream; |
23 } CudaBuffer, *CudaBufferPtr; | |
1908 | 24 CudaScheduler(); |
25 virtual ~CudaScheduler(); | |
26 void init_gpu(); | |
27 void wait_for_event(CUevent* event, CudaBufferPtr m, TaskListPtr taskList, int cur); | |
28 void run(); | |
1924 | 29 |
1908 | 30 // platform platform; |
31 // platform は OpenCL が複数のメーカーの GPU に対応してるから必要 | |
32 // Cuda の場合、NVIDIA だけなので必要ない? | |
33 CUdevice device; | |
34 unsigned int ret_num_platforms; // たぶん要らない | |
1925
cd5bbd8ec5d6
fix CudaScheduler
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
1924
diff
changeset
|
35 int ret_num_devices; |
1908 | 36 CUcontext context; |
37 // command_queue command_queue; | |
38 // Cuda には command_queue に相当するものはない | |
39 // Closest approximation would be the CUDA Stream mechanism. らしい... | |
40 int ret; | |
41 memaddr reply; | |
42 // cl_kernel に相当 | |
43 // 変数名は function にすべきか kernel にすべきか | |
44 // とりあえず、kernel で | |
45 CUfunction kernel[2]; | |
46 CUevent kernel_event[2]; | |
1924 | 47 CudaBuffer* cudabuffer; |
1925
cd5bbd8ec5d6
fix CudaScheduler
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
1924
diff
changeset
|
48 HTask::htask_flag flag[2]; |
1908 | 49 |
1925
cd5bbd8ec5d6
fix CudaScheduler
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
1924
diff
changeset
|
50 private: |
1908 | 51 int load_kernel(int cmd); |
1925
cd5bbd8ec5d6
fix CudaScheduler
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
1924
diff
changeset
|
52 CUdeviceptr createBuffer(CudaBufferPtr cudabuffer, CUdeviceptr* mem, int i, size_t size, int* error); |
1908 | 53 void initCudaBuffer(CudaBufferPtr m); |
54 void destroyCudaBuffer(CudaBufferPtr m); | |
1925
cd5bbd8ec5d6
fix CudaScheduler
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
1924
diff
changeset
|
55 void CudaTaskError(CudaBufferPtr cudabuffer, int cur, TaskListPtr taskList, int ret); |
1908 | 56 }; |
57 | |
58 #define CudaSchedRegister(str, filename, functionname) \ | |
59 cuda_register_task(str, filename, functionname); | |
60 #endif |