annotate TaskManager/test/GpuThreadTest/GpuThreads.cc @ 1444:9de96bded518 draft

change GpuThreadsTest
author Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
date Mon, 23 Apr 2012 21:58:29 +0900
parents d66dcb067c89
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1440
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
1 #include "GpuScheduler.h"
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
2 #include "GpuThreads.h"
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
3 #include "TaskManagerImpl.h"
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
4
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
5 GpuThreads::GpuThreads()
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
6 {
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
7 threads = new pthread_t;
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
8 args = new gpu_arg;
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
9 }
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
10
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
11 GpuThreads::~GpuThreads()
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
12 {
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
13 delete threads;
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
14 delete args;
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
15 }
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
16
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
17 void
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
18 GpuThreads::init()
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
19 {
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
20 clGetPlatformIDs(1, &platfrom_id, &ret_num_platforms);
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
21 clGetDeviceIds(platform_id, CL_DEVICE_TYPE_GPU, 1, &device_id, &ret_num_devices);
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
22
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
23 // unavailable GPU
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
24 if( ret_num_devices == 0) {
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
25 exit(EXIT_FAILURE);
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
26 }
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
27 context = clCreateContext(NULL, 1, &device_id, NULL, NULL, &ret);
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
28 command_queue = clCreateCommandQueue(context, device_id, 0, &ret);
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
29
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
30 args.scheduler = new GpuScheduler();
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
31 args.useRefDma = use_refdma;
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
32
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
33 pthread_create(&threads, NULL, &cpu_thread_run, (void*)&args);
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
34
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
35 }
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
36
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
37 void *
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
38 GpuThreads::gpu_thread_run(void *args)
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
39 {
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
40 gpu_arg *argt = (gpu_arg *) args;
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
41 Scheduler *g_scheduler = argt->scheduler;
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
42
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
43 TaskManagerImpl *manager = new GpuTaskManagerImpl();
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
44 g_scheduler->init(manager, argt->useRefDma);
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
45
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
46 manager->set_scheduler(g_scheduler);
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
47
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
48 g_scheduler->run();
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
49 g_scheduler->finish();
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
50
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
51 return NULL
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
52 }
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
53
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
54 int
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
55 GpuThreads::get_mail(memaddr *ret)
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
56 {
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
57 *ret = args.scheduler->mail_read_from_host();
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
58 return 1;
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
59 }
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
60
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
61 int
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
62 GpuThreads::has_mail(memaddr *ret)
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
63 {
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
64 if (args.scheduler->has_mail_from_host() != 0) {
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
65 return get_mail(ret);
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
66 } else {
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
67 return 0;
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
68 }
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
69 }
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
70
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
71 void
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
72 CpuThreads::send_mail(int cpuid, int num, memaddr *data)
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
73 {
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
74 args.scheduler->mail_write_from_host(*data);
d66dcb067c89 create test program
YuuhiTOMARI
parents:
diff changeset
75 }