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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1908
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 #ifndef INCLUDE_CUDA_SCHEDULER
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 #define INCLUDE_CUDA_SCHEDULER
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 #include "MainScheduler.h"
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 #include "FifoDmaManager.h"
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 #include "CudaThreads.h"
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 #include "HTask.h"
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 extern TaskObject cuda_task_list[MAX_TASK_OBJECT];
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 class CudaScheduler : public MainScheduler {
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 public:
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 typedef struct cudabuffer {
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 int allcate_size;
1924
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 1923
diff changeset
22 int in_size;
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 1923
diff changeset
23 int out_size;
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 1923
diff changeset
24 CUdeviceptr* memin;
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 1923
diff changeset
25 CUdeviceptr* memout;
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 1923
diff changeset
26 CUstream stream;
1963
6988e5478a8c fix CudaScheduler
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 1935
diff changeset
27 void** kernelParams;
1924
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 1923
diff changeset
28 } CudaBuffer, *CudaBufferPtr;
1908
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 CudaScheduler();
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 virtual ~CudaScheduler();
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 void run();
1924
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 1923
diff changeset
34
1908
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 // platform platform;
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 // platform は OpenCL が複数のメーカーの GPU に対応してるから必要
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 // Cuda の場合、NVIDIA だけなので必要ない?
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 CUcontext context;
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 // command_queue command_queue;
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 // Cuda には command_queue に相当するものはない
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 // Closest approximation would be the CUDA Stream mechanism. らしい...
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 int ret;
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 memaddr reply;
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
6bf6450bd45a minor change
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2014
diff changeset
51 map<memaddr, CUdeviceptr*> transmitted;
6bf6450bd45a minor change
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2014
diff changeset
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
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55
1925
cd5bbd8ec5d6 fix CudaScheduler
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 1924
diff changeset
56 private:
1908
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 void initCudaBuffer(CudaBufferPtr m);
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 };
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 #define CudaSchedRegister(str, filename, functionname) \
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 cuda_register_task(str, filename, functionname);
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 #endif
1927
4eefec26e3e2 add file
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 1925
diff changeset
70
4eefec26e3e2 add file
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 1925
diff changeset
71 extern void cuda_register_task(int cmd, const char* filename, const char* functionname);