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 *