109
|
1 #include <stdio.h>
|
|
2 #include <stdlib.h>
|
|
3 #include <string.h>
|
|
4 #include "TaskManager.h"
|
|
5 #include "Func.h"
|
|
6
|
|
7 extern void task_init(void);
|
|
8
|
|
9 int *idata;
|
|
10 int length = DATA_NUM;
|
|
11 int depend_flg = 1;
|
|
12
|
258
|
13 const char *usr_help_str = "Usage: ./dependency [-cpu spe_num] [-nodepend]\n\
|
109
|
14 -nodepend No Depenendcy";
|
|
15
|
|
16 void
|
400
|
17 run_start(TaskManager *manager)
|
109
|
18 {
|
|
19 HTaskPtr t_exec;
|
|
20 HTaskPtr t_print;
|
|
21
|
258
|
22 idata = (int*)manager->allocate(sizeof(int)*length*2);
|
109
|
23 for (int i = 0; i < length*2; i++) {
|
|
24 idata[i] = 0;
|
|
25 }
|
|
26
|
298
|
27 // exec1,2 が計算した配列を見る
|
109
|
28 t_print = manager->create_task(TASK_PRINT);
|
|
29 t_print->add_inData(idata, sizeof(int)*length*2);
|
|
30 t_print->add_param(length*2);
|
|
31
|
298
|
32 // idata を二つに分けて計算する
|
109
|
33 for (int i = 0; i < 2; i++) {
|
|
34 t_exec = manager->create_task(TASK_EXEC);
|
|
35 t_exec->add_inData(&idata[length*i], sizeof(int)*length);
|
|
36 t_exec->add_outData(&idata[length*i], sizeof(int)*length);
|
|
37 t_exec->add_param(length);
|
|
38 t_exec->add_param(13*(i+1));
|
|
39 t_exec->set_cpu(SPE_ANY);
|
|
40
|
|
41 if (depend_flg)
|
|
42 t_print->wait_for(t_exec);
|
|
43
|
|
44 t_exec->spawn();
|
|
45 }
|
|
46
|
|
47 // add Active Queue
|
|
48 t_print->spawn();
|
|
49 }
|
|
50
|
|
51 int
|
|
52 init(int argc, char **argv)
|
|
53 {
|
|
54 for (int i = 1; argv[i]; ++i) {
|
|
55 if (strcmp(argv[i], "-nodepend") == 0) {
|
|
56 depend_flg = 0;
|
|
57 }
|
|
58 }
|
|
59
|
|
60 return 0;
|
|
61 }
|
|
62
|
|
63 int
|
400
|
64 TMmain(TaskManager *manager, int argc, char *argv[])
|
109
|
65 {
|
|
66 if (init(argc, argv) < 0) {
|
|
67 return -1;
|
|
68 }
|
|
69
|
|
70 task_init();
|
400
|
71 run_start(manager);
|
109
|
72
|
|
73 return 0;
|
|
74 }
|