annotate example/many_task/sort.cc @ 934:da657af64afd

sort fix ( not working now )
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 31 Jul 2010 02:45:21 +0900
parents f4d7cf77ec3d
children e54842e4d97b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
227
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
1 #include "TaskManager.h"
573
2f4b5ce2a515 example fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 567
diff changeset
2 #include "SchedTask.h"
227
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
3 #include "sort.h"
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
4 #include "Func.h"
934
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
5 #include <string.h>
227
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
6
934
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
7 static void sort_start(SchedTask *);
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
8 extern void check_data();
227
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
9
934
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
10 static DataPtr data;
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
11 static int data_length;
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
12 static int cpuNum;
227
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
13
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
14 /**
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
15 * 一つの block にある data の数が MAX_BLOCK_SIZE 超えないような
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
16 * len の分割数を返す
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
17 *
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
18 * @param len sort する data の総数
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
19 * @param num 使用する SPE の数
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
20 *
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
21 * @return data の分割数
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
22 *
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
23 * TODO:
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
24 * len が num 以下とか考えてません
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
25 */
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
26 static int
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
27 get_split_num(int len, int num)
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
28 {
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
29 if (len / num < MAX_BLOCK_SIZE) {
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
30 return num;
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
31 } else {
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
32 // 切り上げ
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
33 return (len + MAX_BLOCK_SIZE - 1) / MAX_BLOCK_SIZE;
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
34 }
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
35 }
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
36
934
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
37
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
38 HTaskPtr *fsort;
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
39 HTaskPtr *bsort;
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
40
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
41 #define ALL_TASK
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
42
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
43 #ifdef ALL_TASK
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
44
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
45 static void
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
46 sort_start(SchedTask *manager)
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
47 {
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
48 int split_num = get_split_num(data_length, cpuNum); // data の分割数
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
49 int half_num = split_num-1;
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
50 static int sort_count = split_num; // sort 完了に必要な回数
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
51
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
52 // 一つのタスクで sort する data 数
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
53 int block_num = (data_length + split_num -1)/split_num;
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
54 int half_block_num = block_num/2;
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
55
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
56 int last_block_num = data_length - (split_num-1)*block_num;
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
57 int last_half_block_num = half_block_num+(last_block_num/2);
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
58
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
59 while (--sort_count > 0) {
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
60
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
61 for (int i = 0; i < split_num-1; i++) {
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
62 fsort[i] = manager->create_task(QUICK_SORT,
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
63 (memaddr)&data[i*block_num], sizeof(Data)*block_num,
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
64 (memaddr)&data[i*block_num], sizeof(Data)*block_num);
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
65 if (i>0 && bsort[i-1]) {
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
66 fsort[i]->wait_for(bsort[i-1]);
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
67 }
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
68 if (i<split_num-2 && bsort[i]) {
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
69 fsort[i]->wait_for(bsort[i]);
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
70 }
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
71 fsort[i]->set_cpu(SPE_ANY);
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
72 }
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
73
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
74 // 最後の block は端数なので last_block_num を使う
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
75 {
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
76 int i = split_num-1;
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
77
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
78 fsort[i] = manager->create_task(QUICK_SORT,
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
79 (memaddr)&data[i*block_num], sizeof(Data)*last_block_num,
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
80 (memaddr)&data[i*block_num], sizeof(Data)*last_block_num);
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
81 if (i>0 && bsort[i-1]) {
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
82 fsort[i]->wait_for(bsort[i-1]);
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
83 }
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
84 fsort[i]->set_cpu(SPE_ANY);
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
85 }
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
86
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
87 if (split_num > 1) {
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
88
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
89 for (int i = 0; i < half_num-1; i++) {
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
90 bsort[i] = manager->create_task(QUICK_SORT,
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
91 (memaddr)&data[i*block_num+half_block_num], sizeof(Data)*block_num,
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
92 (memaddr)&data[i*block_num+half_block_num], sizeof(Data)*block_num);
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
93 bsort[i]->set_cpu(SPE_ANY);
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
94 }
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
95
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
96 {
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
97 int i = half_num-1;
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
98
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
99 bsort[i] = manager->create_task(QUICK_SORT,
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
100 (memaddr)&data[i*block_num+half_block_num], sizeof(Data)*last_half_block_num,
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
101 (memaddr)&data[i*block_num+half_block_num], sizeof(Data)*last_half_block_num);
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
102 bsort[i]->set_cpu(SPE_ANY);
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
103 }
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
104
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
105 for (int i = 0; i < half_num; i++) {
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
106 bsort[i]->wait_for(fsort[i]);
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
107 bsort[i]->wait_for(fsort[i+1]);
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
108 bsort[i]->spawn();
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
109 }
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
110 }
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
111
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
112 for (int i = 0; i < split_num; i++) {
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
113 fsort[i]->spawn();
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
114 }
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
115 }
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
116 }
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
117
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
118 #else
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
119
227
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
120 /**
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
121 * btask が全て終了したら、再び sort_start を実行する
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
122 * @param d 生成された btask の数
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
123 */
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
124 static void
573
2f4b5ce2a515 example fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 567
diff changeset
125 sort_restart(SchedTask *s, void *d, void *e)
227
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
126 {
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
127 static int cnt = 0;
934
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
128 static int ccc = 0;
625
60aa3f241b10 64bit mode worked on Mac OS X.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 573
diff changeset
129 long max = (long)d;
227
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
130
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
131 if (++cnt == max) {
934
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
132 printf("restarted %d %% %ld\n",ccc++,max);
227
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
133 cnt = 0;
674
bde5f13adf10 fix many task example (sort).
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 651
diff changeset
134 sort_start(s);
227
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
135 }
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
136 }
932
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
137 #ifdef USE_SIMPLE_TASK
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
138
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
139 static void
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
140 sort_start(SchedTask *manager)
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
141 {
934
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
142 int split_num = get_split_num(data_length, cpuNum); // data の分割数
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
143 int half_num = split_num-1;
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
144 static int sort_count = split_num; // sort 完了に必要な回数
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
145
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
146 // 一つのタスクで sort する data 数
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
147 int block_num = (data_length + split_num -1)/split_num;
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
148 int half_block_num = block_num/2;
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
149
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
150 int last_block_num = data_length - (split_num-1)*block_num;
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
151 int last_half_block_num = half_block_num+(last_block_num/2);
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
152
932
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
153 if (--sort_count < 0) {
934
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
154 check_data();
932
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
155 return;
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
156 }
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
157
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
158
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
159 for (int i = 0; i < split_num-1; i++) {
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
160 fsort[i] = manager->create_task(QUICK_SORT,
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
161 (memaddr)&data[i*block_num], sizeof(Data)*block_num,
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
162 (memaddr)&data[i*block_num], sizeof(Data)*block_num);
934
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
163 if (i>0 && bsort[i-1]) {
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
164 fsort[i]->wait_for(bsort[i-1]);
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
165 }
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
166 if (i<split_num-2 && bsort[i]) {
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
167 fsort[i]->wait_for(bsort[i]);
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
168 }
932
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
169 fsort[i]->set_cpu(SPE_ANY);
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
170 }
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
171
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
172 // 最後の block は端数なので last_block_num を使う
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
173 {
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
174 int i = split_num-1;
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
175
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
176 fsort[i] = manager->create_task(QUICK_SORT,
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
177 (memaddr)&data[i*block_num], sizeof(Data)*last_block_num,
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
178 (memaddr)&data[i*block_num], sizeof(Data)*last_block_num);
934
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
179 if (i>0 && bsort[i-1]) {
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
180 fsort[i]->wait_for(bsort[i-1]);
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
181 }
932
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
182 fsort[i]->set_cpu(SPE_ANY);
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
183 }
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
184
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
185 if (split_num > 1) {
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
186
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
187 for (int i = 0; i < half_num-1; i++) {
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
188 bsort[i] = manager->create_task(QUICK_SORT,
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
189 (memaddr)&data[i*block_num+half_block_num], sizeof(Data)*block_num,
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
190 (memaddr)&data[i*block_num+half_block_num], sizeof(Data)*block_num);
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
191 bsort[i]->set_cpu(SPE_ANY);
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
192 }
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
193
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
194 {
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
195 int i = half_num-1;
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
196
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
197 bsort[i] = manager->create_task(QUICK_SORT,
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
198 (memaddr)&data[i*block_num+half_block_num], sizeof(Data)*last_half_block_num,
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
199 (memaddr)&data[i*block_num+half_block_num], sizeof(Data)*last_half_block_num);
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
200 bsort[i]->set_cpu(SPE_ANY);
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
201 }
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
202
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
203 for (int i = 0; i < half_num; i++) {
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
204 bsort[i]->wait_for(fsort[i]);
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
205 bsort[i]->wait_for(fsort[i+1]);
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
206 bsort[i]->spawn();
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
207 }
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
208 }
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
209
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
210 for (int i = 0; i < split_num; i++) {
934
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
211 fsort[i]->set_post(sort_restart, (void*)(half_num),(void*)manager);
932
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
212 fsort[i]->spawn();
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
213 }
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
214 }
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
215
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
216 #else
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
217
227
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
218 static void
674
bde5f13adf10 fix many task example (sort).
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 651
diff changeset
219 sort_start(SchedTask *manager)
227
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
220 {
934
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
221 int split_num = get_split_num(data_length, cpuNum); // data の分割数
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
222 int half_num = split_num-1;
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
223 static int sort_count = split_num; // sort 完了に必要な回数
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
224
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
225 // 一つのタスクで sort する data 数
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
226 int block_num = (data_length + split_num -1)/split_num;
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
227 int half_block_num = block_num/2;
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
228
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
229 int last_block_num = data_length - (split_num-1)*block_num;
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
230 int last_half_block_num = half_block_num+(last_block_num/2);
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
231
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
232
227
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
233 if (--sort_count < 0) {
934
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
234 check_data();
227
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
235 return;
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
236 }
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
237
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
238
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
239 for (int i = 0; i < split_num-1; i++) {
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
240 fsort[i] = manager->create_task(QUICK_SORT);
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
241 fsort[i]->add_inData(&data[i*block_num], sizeof(Data)*block_num);
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
242 fsort[i]->add_outData(&data[i*block_num], sizeof(Data)*block_num);
625
60aa3f241b10 64bit mode worked on Mac OS X.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 573
diff changeset
243 fsort[i]->set_param(0,(memaddr)block_num);
934
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
244 if (i>0 && bsort[i-1]) {
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
245 fsort[i]->wait_for(bsort[i-1]);
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
246 }
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
247 if (i<split_num-2 && bsort[i]) {
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
248 fsort[i]->wait_for(bsort[i]);
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
249 }
227
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
250 fsort[i]->set_cpu(SPE_ANY);
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
251 }
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
252
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
253 // 最後の block は端数なので last_block_num を使う
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
254 {
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
255 int i = split_num-1;
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
256
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
257 fsort[i] = manager->create_task(QUICK_SORT);
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
258 fsort[i]->add_inData(&data[i*block_num], sizeof(Data)*last_block_num);
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
259 fsort[i]->add_outData(&data[i*block_num], sizeof(Data)*last_block_num);
625
60aa3f241b10 64bit mode worked on Mac OS X.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 573
diff changeset
260 fsort[i]->set_param(0,(memaddr)last_block_num);
934
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
261 if (i>0 && bsort[i-1]) {
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
262 fsort[i]->wait_for(bsort[i-1]);
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
263 }
227
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
264 fsort[i]->set_cpu(SPE_ANY);
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
265 }
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
266
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
267 if (split_num > 1) {
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
268 HTaskPtr bsort[half_num];
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
269
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
270 for (int i = 0; i < half_num-1; i++) {
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
271 bsort[i] = manager->create_task(QUICK_SORT);
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
272 bsort[i]->add_inData(&data[i*block_num+half_block_num],
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
273 sizeof(Data)*block_num);
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
274 bsort[i]->add_outData(&data[i*block_num+half_block_num],
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
275 sizeof(Data)*block_num);
625
60aa3f241b10 64bit mode worked on Mac OS X.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 573
diff changeset
276 bsort[i]->set_param(0,(memaddr)block_num);
227
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
277 bsort[i]->set_cpu(SPE_ANY);
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
278 }
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
279
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
280 {
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
281 int i = half_num-1;
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
282
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
283 bsort[i] = manager->create_task(QUICK_SORT);
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
284 bsort[i]->add_inData(&data[i*block_num+half_block_num],
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
285 sizeof(Data)*last_half_block_num);
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
286 bsort[i]->add_outData(&data[i*block_num+half_block_num],
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
287 sizeof(Data)*last_half_block_num);
625
60aa3f241b10 64bit mode worked on Mac OS X.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 573
diff changeset
288 bsort[i]->set_param(0,(memaddr)last_half_block_num);
227
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
289 bsort[i]->set_cpu(SPE_ANY);
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
290 }
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
291
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
292 for (int i = 0; i < half_num; i++) {
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
293 bsort[i]->wait_for(fsort[i]);
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
294 bsort[i]->wait_for(fsort[i+1]);
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
295 bsort[i]->spawn();
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
296 }
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
297 }
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
298
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
299 for (int i = 0; i < split_num; i++) {
934
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
300 fsort[i]->set_post(sort_restart, (void*)(half_num),(void*)manager);
227
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
301 fsort[i]->spawn();
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
302 }
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
303 }
932
f4d7cf77ec3d sort test (add swap())
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 674
diff changeset
304 #endif
934
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
305 #endif
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
306
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
307 void check_data()
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
308 {
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
309 int flag = 1;
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
310 for(int i=0; i< data_length-1;i++) {
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
311 if (data[i].index>data[i+1].index) {
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
312 printf("Data are not sorted at %d. %d > %d \n",i, data[i].index,data[i+1].index);
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
313 flag = 0;
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
314 break;
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
315 }
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
316 }
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
317 if (flag) printf("Data are sorted\n");
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
318 }
227
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
319
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
320 void
674
bde5f13adf10 fix many task example (sort).
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 651
diff changeset
321 sort_init(SchedTask *manager, void *a, void *b)
227
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
322 {
934
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
323 cpuNum = (int)a;
674
bde5f13adf10 fix many task example (sort).
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 651
diff changeset
324 int length = (int)b;
400
00fe05184a02 Fix examples.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 230
diff changeset
325
227
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
326 data = (DataPtr)manager->allocate(sizeof(Data)*length);
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
327 data_length = length;
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
328
934
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
329 int split_num = get_split_num(data_length, cpuNum); // data の分割数
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
330 int half_num = split_num-1;
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
331 fsort = (HTaskPtr*)manager->allocate(sizeof(HTaskPtr)*split_num);
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
332 bsort = (HTaskPtr*)manager->allocate(sizeof(HTaskPtr)*half_num);
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
333 memset((void*)bsort,0, sizeof(HTaskPtr)*half_num);
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
334
227
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
335 for (int i = 0; i < length; i++) {
230
2b114977852d fix Random
gongo@localhost.localdomain
parents: 227
diff changeset
336 data[i].index = manager->get_random()%10000;
934
da657af64afd sort fix ( not working now )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 932
diff changeset
337 data[i].ptr = i;
227
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
338 }
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
339
674
bde5f13adf10 fix many task example (sort).
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 651
diff changeset
340 sort_start(manager);
227
d54cbfafcb82 add sort
gongo@localhost.localdomain
parents:
diff changeset
341 }
400
00fe05184a02 Fix examples.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 230
diff changeset
342
651
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 625
diff changeset
343 /* end */