Mercurial > hg > Members > kono > Cerium
comparison example/Bulk/main.cc @ 700:d3afc8777daa
fix fix ...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 14 Dec 2009 12:16:52 +0900 |
parents | 7e937a1cd121 |
children | 226d95fa2691 |
comparison
equal
deleted
inserted
replaced
699:7e937a1cd121 | 700:d3afc8777daa |
---|---|
62 printf("ListData %d %d %lx\n",i,t[i].size,(unsigned long)t[i].addr); | 62 printf("ListData %d %d %lx\n",i,t[i].size,(unsigned long)t[i].addr); |
63 } | 63 } |
64 } | 64 } |
65 | 65 |
66 void | 66 void |
67 twice_init(TaskManager *manager) | 67 twice_init(TaskManager *manager,int *data, int length) |
68 { | 68 { |
69 | 69 |
70 int *data = (int*)manager->allocate(sizeof(int)*length); | |
71 | 70 |
72 for (int i = 0; i < length; i++) { | 71 for (int i = 0; i < length; i++) { |
73 data[i] = i; | 72 data[i] = i; |
74 } | 73 } |
75 | 74 |
77 | 76 |
78 /** | 77 /** |
79 * Create Task | 78 * Create Task |
80 * create_task(Task ID); | 79 * create_task(Task ID); |
81 */ | 80 */ |
82 int size = Task::calc_size(2,2,2); | |
83 printf("allocate task size 0x%0x\n",size); | |
84 printf("allocate task total size 0x%0x\n",(size *= count)); | |
85 | 81 |
86 memaddr task_buf = (memaddr)manager->allocate(size); | 82 HTask *twice_main = manager->create_task_array(Twice,count,2,2,2); |
87 HTask *twice_main = manager->create_task(TaskArray, task_buf, size, 0, 0); | 83 Task *t = twice_main->next_task_array(Twice, 0); |
84 printf("allocate task size 0x%0x\n",t->size()); | |
85 printf("allocate task total size 0x%0x = 0x%0x * %d\n",twice_main->r_size, | |
86 t->size(), count); | |
87 void *task_buf = twice_main->rbuf; | |
88 twice_main->set_post(twice_result, (void*)data, task_buf); | |
88 | 89 |
89 int pos = 0; | 90 t = 0; |
90 for(int i = 0;i<count;i++) { | 91 for(int i = 0;i<count;i++) { |
91 Task *t = twice_main->create_task_array(Twice,pos); | 92 t = twice_main->next_task_array(Twice, t); |
92 int length2 = length/2; | 93 int length2 = length/2; |
93 // 以下の順序でデータを追加する必要がある。 | 94 // 以下の順序でデータを追加する必要がある。 |
94 // length を先に指定すればsetは後からでも良い。 | 95 // length を先に指定すればsetは後からでも良い。 |
95 /** | 96 /** |
96 * Set 32bits parameter | 97 * Set 32bits parameter |
97 * add_param(32bit parameter); | 98 * add_param(32bit parameter); |
98 */ | 99 */ |
99 t->set_param_length(2); | |
100 t->set_param(0, (memaddr)length2); | 100 t->set_param(0, (memaddr)length2); |
101 t->set_param(1, (memaddr)length2); | 101 t->set_param(1, (memaddr)length2); |
102 /** | 102 /** |
103 * Set of Input Data | 103 * Set of Input Data |
104 * add_inData(address of input data, size of input data); | 104 * add_inData(address of input data, size of input data); |
105 */ | 105 */ |
106 t->set_inData_length(2); | |
107 t->set_inData(0,data, sizeof(int)*length2); | 106 t->set_inData(0,data, sizeof(int)*length2); |
108 t->set_inData(1,data+length2, sizeof(int)*length2); | 107 t->set_inData(1,data+length2, sizeof(int)*length2); |
109 print_ListData(2,t->inListData()); | 108 print_ListData(2,t->inData(0)); |
110 /** | 109 /** |
111 * Set of Output area | 110 * Set of Output area |
112 * add_outData(address of output area, size of output area); | 111 * add_outData(address of output area, size of output area); |
113 */ | 112 */ |
114 t->set_outData_length(2); | |
115 t->set_outData(0,data, sizeof(int)*length2); | 113 t->set_outData(0,data, sizeof(int)*length2); |
116 t->set_outData(1,data+length2, sizeof(int)*length2); | 114 t->set_outData(1,data+length2, sizeof(int)*length2); |
117 print_ListData(2,t->outListData()); | 115 print_ListData(2,t->outData(0)); |
118 pos += t->size(); | 116 data += length; |
119 printf("pos 0x%0x size 0x%0x\n",pos, t->size()); | 117 printf("pos 0x%0lx size 0x%0x\n",(unsigned long)t, t->size()); |
120 } | 118 } |
121 twice_main->spawn_task_array(pos); | 119 twice_main->spawn_task_array(t->next()); |
122 | 120 |
123 twice_main->set_cpu(SPE_ANY); | 121 twice_main->set_cpu(SPE_ANY); |
124 /* | 122 /* |
125 * set_post() で ppe task を渡せるようにしたい | 123 * set_post() で ppe task を渡せるようにしたい |
126 */ | 124 */ |
127 twice_main->set_post(twice_result, (void*)data, (void*)task_buf); | |
128 // add Active Queue | 125 // add Active Queue |
129 twice_main->spawn(); | 126 twice_main->spawn(); |
130 } | 127 } |
131 | 128 |
132 int | 129 int |
139 // Task Register | 136 // Task Register |
140 // ppe/task_init.cc | 137 // ppe/task_init.cc |
141 task_init(); | 138 task_init(); |
142 | 139 |
143 for (int i = 0; i < task; ++i) { | 140 for (int i = 0; i < task; ++i) { |
144 twice_init(manager); | 141 int *data = (int*)manager->allocate(sizeof(int)*length*count); |
142 twice_init(manager, data, length); | |
145 } | 143 } |
146 | 144 |
147 return 0; | 145 return 0; |
148 } | 146 } |