Mercurial > hg > Game > Cerium
annotate example/many_task/main.cc @ 1264:5153ce1b2001 draft
change option
author | Daichi Toma <toma@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 19 Nov 2011 14:35:03 +0900 |
parents | 7823233584da |
children | a7895ab4d0e3 |
rev | line source |
---|---|
109 | 1 #include <stdio.h> |
2 #include <string.h> | |
3 #include <stdlib.h> | |
4 #include <sys/time.h> | |
5 #include "TaskManager.h" | |
945
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
6 #include "SchedTask.h" |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
7 |
109 | 8 #include "Func.h" |
220 | 9 #include "sort.h" |
109 | 10 |
945
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
11 extern void task_init(); |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
12 extern int get_split_num(int len, int num); |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
13 |
109 | 14 |
220 | 15 // sort.cc |
16 extern int data_length; | |
17 extern DataPtr data; | |
935 | 18 extern int all; |
19 int all = 0; | |
220 | 20 |
945
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
21 static int sort_task = SortSimple; |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
22 |
220 | 23 // 計測用 |
24 static double st_time; | |
25 static double ed_time; | |
26 | |
27 static int length = 1200; | |
28 | |
29 // prototype | |
400 | 30 void TMend(TaskManager *); |
220 | 31 |
32 static double | |
945
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
33 getTime() |
220 | 34 { |
35 struct timeval tv; | |
36 gettimeofday(&tv, NULL); | |
37 return tv.tv_sec + (double)tv.tv_usec*1e-6; | |
38 } | |
256 | 39 /* |
220 | 40 static void |
41 show_data(void) | |
42 { | |
43 puts("-----------------------------------------------"); | |
44 for(int i = 0; i < data_length; i++) { | |
45 printf("data[%02d].index = %d\n", i, data[i].index); | |
46 } | |
47 puts("-----------------------------------------------"); | |
48 } | |
256 | 49 */ |
109 | 50 |
256 | 51 const char *usr_help_str = "Usage: ./sort [option]\n \ |
217 | 52 options\n\ |
53 -cpu Number of SPE used (default 1)\n\ | |
54 -l, --length Sorted number of data (default 1200)\n\ | |
55 -h, --help Print this message"; | |
109 | 56 |
57 int | |
58 init(int argc, char **argv) | |
59 { | |
60 for (int i = 1; argv[i]; ++i) { | |
217 | 61 if (strcmp(argv[i], "--length") == 0 || strcmp(argv[i], "-l") == 0) { |
220 | 62 length = atoi(argv[++i]); |
109 | 63 } |
935 | 64 if (strcmp(argv[i], "-a") == 0 ) { |
65 all = 1; | |
66 } | |
945
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
67 if (strcmp(argv[i], "-c") == 0 ) { |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
68 sort_task = SortCompat; |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
69 } |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
70 if (strcmp(argv[i], "-s") == 0 ) { |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
71 sort_task = SortSimple; |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
72 } |
256 | 73 |
109 | 74 } |
75 | |
76 return 0; | |
77 } | |
78 | |
945
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
79 Sort sorter; |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
80 |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
81 static void |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
82 check_data() |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
83 { |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
84 for(int i=0; i< sorter.data_length-1;i++) { |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
85 if (sorter.data[i].index>sorter.data[i+1].index) { |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
86 printf("Data are not sorted at %d. %d > %d \n",i, sorter.data[i].index,sorter.data[i+1].index); |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
87 return; |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
88 } |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
89 } |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
90 printf("Data are sorted\n"); |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
91 } |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
92 |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
93 |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
94 static void |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
95 sort_init(SchedTask *manager, void *a, void *b) |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
96 { |
1079 | 97 sorter.cpuNum = (long)a; |
98 long length = (long)b; | |
945
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
99 |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
100 sorter.data = (DataPtr)manager->allocate(sizeof(Data)*length); |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
101 sorter.data_length = length; |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
102 |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
103 sorter.split_num = get_split_num(sorter.data_length, sorter.cpuNum); // data の分割数 |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
104 int half_num = sorter.split_num-1; |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
105 sorter.fsort = (HTaskPtr*)manager->allocate(sizeof(HTaskPtr)*sorter.split_num); |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
106 sorter.bsort = (HTaskPtr*)manager->allocate(sizeof(HTaskPtr)*half_num); |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
107 memset((void*)sorter.bsort,0, sizeof(HTaskPtr)*half_num); |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
108 |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
109 for (int i = 0; i < length; i++) { |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
110 sorter.data[i].index = manager->get_random()%10000; |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
111 sorter.data[i].ptr = i; |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
112 } |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
113 |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
114 HTaskPtr restart = manager->create_task(sort_task,0,0,0,0); |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
115 restart->set_param(0,(memaddr)&sorter); |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
116 restart->spawn(); |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
117 } |
9ed1c4a877ca
sort example fix ( simple task accepts one param and more compatible with old task)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
935
diff
changeset
|
118 |
220 | 119 unsigned int ts, te; |
120 | |
109 | 121 int |
400 | 122 TMmain(TaskManager *manager, int argc, char *argv[]) |
109 | 123 { |
124 if (init(argc, argv) < 0) { | |
125 return -1; | |
126 } | |
127 | |
128 task_init(); | |
129 | |
674
07351a5a51c9
fix many task example (sort).
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
400
diff
changeset
|
130 int cpu = manager->get_cpuNum(); |
675 | 131 |
132 // in case of -cpu 0 | |
674
07351a5a51c9
fix many task example (sort).
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
400
diff
changeset
|
133 if (cpu==0) cpu = 1; |
932
53ad3a61b40b
sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
675
diff
changeset
|
134 if (1) { |
53ad3a61b40b
sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
675
diff
changeset
|
135 HTask *dummy = manager->create_task(Dummy); |
53ad3a61b40b
sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
675
diff
changeset
|
136 dummy->set_post(sort_init, (void*)cpu, (void*)length); |
53ad3a61b40b
sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
675
diff
changeset
|
137 dummy->spawn(); |
53ad3a61b40b
sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
675
diff
changeset
|
138 } else { |
53ad3a61b40b
sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
675
diff
changeset
|
139 sort_init(manager->get_schedTask(),(void*)cpu, (void*)length); |
53ad3a61b40b
sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
675
diff
changeset
|
140 } |
109 | 141 |
142 st_time = getTime(); | |
143 | |
227 | 144 // 全ての Task が終了した後に実行する関数をセット |
220 | 145 manager->set_TMend(TMend); |
109 | 146 |
147 return 0; | |
148 } | |
149 | |
220 | 150 void |
400 | 151 TMend(TaskManager *manager) |
109 | 152 { |
220 | 153 ed_time = getTime(); |
230 | 154 //show_data(); |
934
83b64b7a51bd
sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
932
diff
changeset
|
155 check_data(); |
220 | 156 printf("Time: %0.6f\n",ed_time-st_time); |
109 | 157 } |
674
07351a5a51c9
fix many task example (sort).
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
400
diff
changeset
|
158 |
07351a5a51c9
fix many task example (sort).
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
400
diff
changeset
|
159 /* end */ |