Mercurial > hg > Game > Cerium
annotate TaskManager/Cuda/CudaScheduler.h @ 2022:fac44ad2867d draft
make a sound
author | Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 16 Jul 2014 02:50:32 +0900 |
parents | 6bf6450bd45a |
children |
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> |
2012
9360e782a431
Optimization data transfer. not running
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
1983
diff
changeset
|
10 #include <map> |
1908 | 11 |
12 extern TaskObject cuda_task_list[MAX_TASK_OBJECT]; | |
13 | |
2012
9360e782a431
Optimization data transfer. not running
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
1983
diff
changeset
|
14 using namespace std; |
9360e782a431
Optimization data transfer. not running
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
1983
diff
changeset
|
15 |
1935
67e50779feb4
CudaScheduler is runnig.
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
1927
diff
changeset
|
16 #define STAGE 8 |
67e50779feb4
CudaScheduler is runnig.
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
1927
diff
changeset
|
17 |
1908 | 18 class CudaScheduler : public MainScheduler { |
19 public: | |
20 typedef struct cudabuffer { | |
21 int allcate_size; | |
1924 | 22 int in_size; |
23 int out_size; | |
24 CUdeviceptr* memin; | |
25 CUdeviceptr* memout; | |
26 CUstream stream; | |
1963
6988e5478a8c
fix CudaScheduler
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
1935
diff
changeset
|
27 void** kernelParams; |
1924 | 28 } CudaBuffer, *CudaBufferPtr; |
1908 | 29 CudaScheduler(); |
30 virtual ~CudaScheduler(); | |
31 void init_gpu(); | |
1965
59105550c175
fix CudaScheduler. remove event.
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
1963
diff
changeset
|
32 void wait_for_event(CudaBufferPtr m, TaskListPtr taskList, int cur); |
1908 | 33 void run(); |
1924 | 34 |
1908 | 35 // platform platform; |
36 // platform は OpenCL が複数のメーカーの GPU に対応してるから必要 | |
37 // Cuda の場合、NVIDIA だけなので必要ない? | |
38 CUdevice device; | |
1925
cd5bbd8ec5d6
fix CudaScheduler
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
1924
diff
changeset
|
39 int ret_num_devices; |
1908 | 40 CUcontext context; |
41 // command_queue command_queue; | |
42 // Cuda には command_queue に相当するものはない | |
43 // Closest approximation would be the CUDA Stream mechanism. らしい... | |
44 int ret; | |
45 memaddr reply; | |
46 // cl_kernel に相当 | |
1935
67e50779feb4
CudaScheduler is runnig.
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
1927
diff
changeset
|
47 CUfunction kernel[STAGE]; |
67e50779feb4
CudaScheduler is runnig.
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
1927
diff
changeset
|
48 CudaBuffer cudabuffer[STAGE]; |
67e50779feb4
CudaScheduler is runnig.
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
1927
diff
changeset
|
49 |
2012
9360e782a431
Optimization data transfer. not running
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
1983
diff
changeset
|
50 // record transmitted data. |
2015 | 51 map<memaddr, CUdeviceptr*> transmitted; |
52 map<CUdeviceptr*, memaddr> reverse_map; | |
2012
9360e782a431
Optimization data transfer. not running
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
1983
diff
changeset
|
53 |
1935
67e50779feb4
CudaScheduler is runnig.
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
1927
diff
changeset
|
54 HTask::htask_flag flag[STAGE]; |
1908 | 55 |
1925
cd5bbd8ec5d6
fix CudaScheduler
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
1924
diff
changeset
|
56 private: |
1908 | 57 int load_kernel(int cmd); |
1935
67e50779feb4
CudaScheduler is runnig.
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
1927
diff
changeset
|
58 void createBuffer(CudaBufferPtr cudabuffer, CUdeviceptr* mem, int i, size_t size); |
1908 | 59 void initCudaBuffer(CudaBufferPtr m); |
60 void destroyCudaBuffer(CudaBufferPtr m); | |
1925
cd5bbd8ec5d6
fix CudaScheduler
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
1924
diff
changeset
|
61 void CudaTaskError(CudaBufferPtr cudabuffer, int cur, TaskListPtr taskList, int ret); |
1983
c3b4083c4467
fix CudaScheduler
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
1965
diff
changeset
|
62 int read(TaskPtr nextTask, TaskListPtr tasklist); |
c3b4083c4467
fix CudaScheduler
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
1965
diff
changeset
|
63 void exec(TaskListPtr tasklist, int cur); |
c3b4083c4467
fix CudaScheduler
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
1965
diff
changeset
|
64 TaskPtr write(TaskPtr nextTask, TaskListPtr tasklist); |
1908 | 65 }; |
66 | |
67 #define CudaSchedRegister(str, filename, functionname) \ | |
68 cuda_register_task(str, filename, functionname); | |
69 #endif | |
1927 | 70 |
71 extern void cuda_register_task(int cmd, const char* filename, const char* functionname); |