Mercurial > hg > Members > kono > Cerium
comparison example/Bulk/main.cc @ 679:14d179ff1e9f
adding Array Task.
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 06 Dec 2009 11:33:09 +0900 |
parents | dbe137505f2e |
children | b976bed4e46a |
comparison
equal
deleted
inserted
replaced
677:fd3492a767c7 | 679:14d179ff1e9f |
---|---|
5 #include "Func.h" | 5 #include "Func.h" |
6 | 6 |
7 extern void task_init(void); | 7 extern void task_init(void); |
8 | 8 |
9 static int length = DATA_NUM; | 9 static int length = DATA_NUM; |
10 static int task = 1; | 10 static int task = 10; |
11 static int count = 1; | 11 static int count = 10; |
12 | 12 |
13 const char *usr_help_str = "Usage: ./twice [-length data_length] [-count task_num]\n\ | 13 const char *usr_help_str = "Usage: ./twice [-length data_length] [-count task_num]\n\ |
14 -length Number of data (default DATA_NUM (Func.h))\n\ | 14 -length Number of data (default DATA_NUM (Func.h))\n\ |
15 -count Number of task (default 1)\n"; | 15 -count Number of task (default 1)\n"; |
16 | 16 |
53 } | 53 } |
54 | 54 |
55 void | 55 void |
56 twice_init(TaskManager *manager) | 56 twice_init(TaskManager *manager) |
57 { | 57 { |
58 TaskArray *twice; | |
59 | 58 |
60 int *data = (int*)manager->allocate(sizeof(int)*length); | 59 int *data = (int*)manager->allocate(sizeof(int)*length); |
61 | 60 |
62 for (int i = 0; i < length; i++) { | 61 for (int i = 0; i < length; i++) { |
63 data[i] = i; | 62 data[i] = i; |
67 | 66 |
68 /** | 67 /** |
69 * Create Task | 68 * Create Task |
70 * create_task(Task ID); | 69 * create_task(Task ID); |
71 */ | 70 */ |
72 twice = manager->create_bulk_task(count); | 71 int size = count*(SizeOfParam(2) + SizeOfData(sizeof(int)*length) + |
72 SizeOfData(sizeof(int)*length)); | |
73 HTask *twice_main = manager->create_task_array(size); | |
74 int pos = 0; | |
73 for(int i = 0;i<count;i++) { | 75 for(int i = 0;i<count;i++) { |
74 Task t = twice_main->create_stask(Twice); | 76 Task t = twice_main->create_task(Twice,pos); |
75 int length2 = length/2; | 77 int length2 = length/2; |
78 // 以下の順序でデータを追加する必要がある。 | |
79 // length を先に指定すればsetは後からでも良い。 | |
76 /** | 80 /** |
77 * Set 32bits parameter | 81 * Set 32bits parameter |
78 * add_param(32bit parameter); | 82 * add_param(32bit parameter); |
79 */ | 83 */ |
84 t->set_param_length(2); | |
80 t->set_param(0, (memaddr)length2); | 85 t->set_param(0, (memaddr)length2); |
81 t->set_param(1, (memaddr)length2); | 86 t->set_param(1, (memaddr)length2); |
82 /** | 87 /** |
83 * Set of Input Data | 88 * Set of Input Data |
84 * add_inData(address of input data, size of input data); | 89 * add_inData(address of input data, size of input data); |
85 */ | 90 */ |
86 t->add_inData(data, sizeof(int)*length2); | 91 t->set_inData_length(2); |
87 t->add_inData(data+length2, sizeof(int)*length2); | 92 t->set_inData(0,data, sizeof(int)*length2); |
93 t->set_inData(1,data+length2, sizeof(int)*length2); | |
88 /** | 94 /** |
89 * Set of OutPut area | 95 * Set of Output area |
90 * add_outData(address of output area, size of output area); | 96 * add_outData(address of output area, size of output area); |
91 */ | 97 */ |
92 t->add_outData(data, sizeof(int)*length2); | 98 t->set_outData_length(2); |
93 t->add_outData(data+length2, sizeof(int)*length2); | 99 t->set_outData(0,data, sizeof(int)*length2); |
100 t->set_outData(1,data+length2, sizeof(int)*length2); | |
101 pos += t->size(); | |
102 | |
103 delete t; // Wao! | |
94 } | 104 } |
95 twice_main->set_cpu(SPE_ANY); | 105 twice_main->set_cpu(SPE_ANY); |
96 | |
97 /* | 106 /* |
98 * set_post() で ppe task を渡せるようにしたい | 107 * set_post() で ppe task を渡せるようにしたい |
99 */ | 108 */ |
100 twice->set_post(twice_result, (void*)data, 0); | 109 twice_main->set_post(twice_result, (void*)data, 0); |
101 | |
102 // add Active Queue | 110 // add Active Queue |
103 twice->spawn_bulk(); | 111 twice_main->spawn(); |
104 } | 112 } |
105 | 113 |
106 int | 114 int |
107 TMmain(TaskManager *manager,int argc, char *argv[]) | 115 TMmain(TaskManager *manager,int argc, char *argv[]) |
108 { | 116 { |