Mercurial > hg > Game > Cerium
comparison TaskManager/kernel/ppe/CpuThreads.cc @ 1561:e8c9a7099bcc draft
add set NDRange param
author | Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 12 Mar 2013 16:52:49 +0900 |
parents | 32305a19a380 |
children | 806b4658ced6 |
comparison
equal
deleted
inserted
replaced
1556:f71632373220 | 1561:e8c9a7099bcc |
---|---|
12 #include <fcntl.h> | 12 #include <fcntl.h> |
13 | 13 |
14 SchedExternTask(ShowTime); | 14 SchedExternTask(ShowTime); |
15 SchedExternTask(StartProfile); | 15 SchedExternTask(StartProfile); |
16 | 16 |
17 | 17 CpuThreads::CpuThreads(int num, int useRefDma, int start_id) : cpu_num(num), use_refdma(useRefDma), id_offset(start_id){ |
18 CpuThreads::CpuThreads(int num, int useRefDma, int start_id) : cpu_num(num), use_refdma(useRefDma), id_offset(start_id) { | |
19 | |
20 #ifdef __CERIUM_GPU__ | 18 #ifdef __CERIUM_GPU__ |
21 gpu = new GpuThreads(useRefDma); | 19 gpu = new GpuThreads(useRefDma); |
22 #endif | 20 #endif |
23 threads = new pthread_t[cpu_num]; | 21 threads = new pthread_t[cpu_num]; |
24 args = new cpu_thread_arg_t[cpu_num]; | 22 args = new cpu_thread_arg_t[cpu_num]; |
27 } | 25 } |
28 | 26 |
29 CpuThreads::~CpuThreads() | 27 CpuThreads::~CpuThreads() |
30 { | 28 { |
31 memaddr mail = (memaddr)MY_SPE_COMMAND_EXIT; | 29 memaddr mail = (memaddr)MY_SPE_COMMAND_EXIT; |
32 | 30 |
33 for (int i = 0; i < cpu_num; i++) { | 31 for (int i = 0; i < cpu_num; i++) { |
34 send_mail(i+id_offset, 1, &mail); | 32 send_mail(i+id_offset, 1, &mail); |
35 } | 33 } |
36 | 34 |
37 for (int i = 0; i < cpu_num; i++) { | 35 for (int i = 0; i < cpu_num; i++) { |
58 TaskManagerImpl *manager = new SpeTaskManagerImpl(); | 56 TaskManagerImpl *manager = new SpeTaskManagerImpl(); |
59 c_scheduler->init(manager,argt->useRefDma); | 57 c_scheduler->init(manager,argt->useRefDma); |
60 c_scheduler->id = (int)argt->cpuid; | 58 c_scheduler->id = (int)argt->cpuid; |
61 | 59 |
62 manager->set_scheduler(c_scheduler); | 60 manager->set_scheduler(c_scheduler); |
63 | |
64 SchedRegister(ShowTime); | 61 SchedRegister(ShowTime); |
65 SchedRegister(StartProfile); | 62 SchedRegister(StartProfile); |
66 | 63 |
67 argt->wait->sem_v(); //準備完了したスレッドができるたびに+1していく | 64 argt->wait->sem_v(); //準備完了したスレッドができるたびに+1していく |
68 | 65 |
70 c_scheduler->finish(); | 67 c_scheduler->finish(); |
71 | 68 |
72 return NULL; | 69 return NULL; |
73 } | 70 } |
74 | 71 |
72 | |
75 void | 73 void |
76 //CpuThreads::init() | |
77 CpuThreads::init() | 74 CpuThreads::init() |
78 { | 75 { |
79 #ifdef __CERIUM_GPU__ | 76 #ifdef __CERIUM_GPU__ |
80 gpu->set_wait(wait); | 77 gpu->set_wait(wait); |
81 gpu->init(); | 78 gpu->init(); |
95 } | 92 } |
96 | 93 |
97 for (int i = 0; i < cpu_num; i++) { | 94 for (int i = 0; i < cpu_num; i++) { |
98 wait->sem_p(); | 95 wait->sem_p(); |
99 } | 96 } |
97 } | |
98 | |
99 void | |
100 CpuThreads::set_NDRange(void *ndr) { | |
101 gpu->set_NDRange(ndr); | |
100 } | 102 } |
101 | 103 |
102 /** | 104 /** |
103 * このCPU からのメールを受信する。 | 105 * このCPU からのメールを受信する。 |
104 * | 106 * |