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 }