annotate example/word_count3/main.cc @ 906:becd6fad3ae0 draft

coord_pack is stuffed with infomation of create polygon at spe.
author Yutaka_Kinjyo
date Mon, 19 Jul 2010 23:40:53 +0900
parents 94d82f2c842f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
508
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
1 #include <stdio.h>
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
2 #include <stdlib.h>
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
3 #include <string.h>
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
4 #include <sys/mman.h>
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
5 #include <sys/types.h>
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
6 #include <sys/stat.h>
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
7 #include <fcntl.h>
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
8 #include <unistd.h>
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
9 #include "TaskManager.h"
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
10 #include "Func.h"
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
11
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
12 #define TASKBUFF (1)
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
13
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
14 extern void task_init(void);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
15
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
16 static TaskManager *manager;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
17
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
18 static int count = 1;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
19 static char *file = NULL;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
20
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
21 const char *usr_help_str = "Usage: ./post [-cpu spe_num] [-count N]\n\
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
22 -count Number of print \"Hello, World!!\"";
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
23
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
24
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
25 struct task_list_t {
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
26 HTaskPtr task;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
27 task_list_t *next;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
28 };
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
29
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
30 typedef struct {
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
31 caddr_t file_mmap;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
32 off_t size;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
33 } st_mmap_t;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
34
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
35
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
36 typedef struct {
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
37
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
38 /*16task毎に回す為に必要な変数*/
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
39 task_list_t *task_list;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
40 HTaskPtr run_wait_task;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
41 int *task_num;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
42 int *sum_task_num;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
43
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
44 /*dataを分割する際に必要な変数*/
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
45 int *file_size;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
46 int *division_size;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
47 int *division_out_size;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
48 int *status_num;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
49 int *out_task_num;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
50 int *out_size;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
51 int *sum_i;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
52 int *word_flag;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
53 caddr_t file_mmap;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
54 unsigned long long *o_data;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
55
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
56 } data_list_t;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
57
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
58 /*与えられたsizeをfix_byte_sizeの倍数にする(丸め込むっていうのかな?)*/
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
59 int
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
60 fix_byte(int size,int fix_byte_size)
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
61 {
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
62 size = (size/fix_byte_size)*fix_byte_size + ((size%fix_byte_size)!= 0)*fix_byte_size;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
63
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
64 return size;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
65 }
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
66
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
67 void
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
68 create_data(char *filename, data_list_t *data)
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
69 {
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
70
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
71 data->file_size = (int*)manager->allocate(sizeof(int));
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
72 data->division_size = (int*)manager->allocate(sizeof(int));
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
73 data->division_out_size = (int*)manager->allocate(sizeof(int));
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
74 data->status_num = (int*)manager->allocate(sizeof(int));
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
75 data->out_size = (int*)manager->allocate(sizeof(int));
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
76 data->out_task_num = (int*)manager->allocate(sizeof(int));
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
77 data->task_num = (int*)manager->allocate(sizeof(int));
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
78 data->sum_task_num = (int*)manager->allocate(sizeof(int));
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
79 data->sum_i = (int*)manager->allocate(sizeof(int));
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
80 *data->sum_i = 0;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
81 data->word_flag = (int*)manager->allocate(sizeof(int));
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
82 *data->word_flag = 0;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
83 data->run_wait_task = (HTaskPtr)manager->allocate(sizeof(HTask));
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
84 data->run_wait_task = manager->create_task(WAIT_TASK);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
85
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
86
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
87
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
88 /*マッピングだよ!*/
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
89 int fd = -1;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
90 int map = MAP_PRIVATE;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
91 off_t size;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
92 struct stat sb;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
93
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
94 if ((fd=open(filename,O_RDONLY,0666))==0) {
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
95 fprintf(stderr,"can't open %s\n",filename);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
96 }
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
97
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
98 if (fstat(fd,&sb)) {
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
99 fprintf(stderr,"can't fstat %s\n",filename);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
100 }
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
101
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
102 printf("file size %d\n",(int)sb.st_size);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
103
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
104 /*sizeをページングサイズの倍数にあわせる*/
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
105 size = fix_byte(sb.st_size,4096);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
106
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
107 printf("fix 4096byte file size %d\n",(int)size);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
108
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
109 data->file_mmap = (char*)mmap(NULL,size,PROT_READ,map,fd,(off_t)0);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
110 if (data->file_mmap == (caddr_t)-1) {
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
111 fprintf(stderr,"Can't mmap file\n");
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
112 perror(NULL);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
113 exit(0);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
114 }
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
115
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
116 if (size >= 4096*4) {
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
117 *data->division_size = 4096 * 4; /*16kbyte*/
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
118 }
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
119 else {
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
120 *data->division_size = size;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
121 }
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
122
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
123 *data->file_size = size;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
124
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
125 /* status が 2つなので、8 * 2 = 16; 8 は unsinged long long*/
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
126 *data->division_out_size = 16;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
127
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
128 /*"word num" and "line num"*/
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
129 *data->status_num = 2;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
130 *data->sum_task_num = size / (*data->division_size);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
131
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
132 if (*data->sum_task_num < TASKBUFF) {
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
133 *data->task_num = *data->sum_task_num;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
134 }
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
135 else {
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
136 *data->task_num = TASKBUFF;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
137 }
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
138
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
139 *data->out_task_num = *data->sum_task_num + ( (*data->division_size) * (*data->sum_task_num) < size);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
140
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
141 *data->out_size = (*data->division_out_size) * (*data->out_task_num);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
142 data->o_data = (unsigned long long*)manager->allocate(*data->out_size);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
143
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
144
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
145 }
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
146
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
147 void
619
278db3ca751d RenewTask removal
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 508
diff changeset
148 func2(SchedTask *s, void *p, void *q)
508
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
149 {
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
150 data_list_t *data = (data_list_t*)p;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
151
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
152 int in_off_set = 0;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
153 int out_off_set = 0;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
154
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
155 if (*data->file_size > 0) {
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
156
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
157 in_off_set = (*data->sum_i) * (*data->division_size);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
158 out_off_set = (*data->sum_i) * (*data->status_num);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
159 *data->division_size = *data->file_size;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
160
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
161 HTaskPtr task = (HTaskPtr)manager->allocate(sizeof(HTask));
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
162 task = manager->create_task(EXEC_TASK);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
163 task->add_inData(data->file_mmap + in_off_set, *data->division_size);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
164 task->add_outData(data->o_data + out_off_set, *data->division_out_size);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
165 task->add_param(*data->division_size);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
166 task->add_param(*data->word_flag);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
167 data->run_wait_task->wait_for(task);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
168 task->set_cpu(SPE_ANY);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
169 task->spawn();
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
170
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
171 }
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
172
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
173 data->run_wait_task->spawn();
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
174
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
175 }
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
176
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
177 void
619
278db3ca751d RenewTask removal
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 508
diff changeset
178 func1(SchedTask *s, void *p, void *q)
508
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
179 {
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
180
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
181 /*receive*/
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
182 HTaskPtr wait_task = manager->create_task(WAIT_TASK);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
183 data_list_t *data = (data_list_t*)p;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
184
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
185
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
186 if (*data->sum_task_num < *data->task_num) {
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
187 *data->task_num = *data->sum_task_num;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
188 }
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
189
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
190
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
191 /*run*/
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
192 task_list_t *t = data->task_list;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
193
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
194 for (;t != NULL; t = t->next) {
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
195 wait_task->wait_for(t->task);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
196 t->task->spawn();
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
197 }
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
198
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
199 task_list_t *now = NULL;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
200 task_list_t *next = (task_list_t*)manager->allocate(sizeof(task_list_t));
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
201 next = NULL;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
202
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
203 *data->sum_task_num -= *data->task_num;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
204 if (*data->sum_task_num < TASKBUFF) {
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
205 *data->task_num = *data->sum_task_num;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
206 } else {
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
207 *data->task_num = TASKBUFF;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
208 }
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
209
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
210
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
211 /*for (int i = 0; i < *data->task_num; i++) {
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
212
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
213 now = (task_list_t*)manager->allocate(sizeof(task_list_t));
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
214 now->task = (HTaskPtr)manager->allocate(sizeof(HTask));
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
215 now->task = manager->create_task(HELLO_TASK);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
216 now->task->set_cpu(SPE_ANY);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
217 now->next = next;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
218
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
219 next = now;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
220
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
221 }*/
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
222
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
223
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
224 int in_off_set = 0;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
225 int out_off_set = 0;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
226 char next_word = 0;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
227
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
228 for (int i = 0; i < *data->task_num; i++) {
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
229
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
230 in_off_set = (*data->sum_i) * (*data->division_size);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
231 out_off_set = (*data->sum_i) * (*data->status_num);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
232 next_word = data->file_mmap[(*data->sum_i + 1) * (*data->division_size) - 1];
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
233
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
234 now = (task_list_t*)manager->allocate(sizeof(task_list_t));
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
235 now->task = (HTaskPtr)manager->allocate(sizeof(HTask));
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
236 now->task = manager->create_task(EXEC_TASK);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
237 now->task->add_inData(data->file_mmap + in_off_set, *data->division_size);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
238 now->task->add_outData(data->o_data + out_off_set, *data->division_out_size);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
239 now->task->add_param(*data->division_size);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
240 now->task->add_param(*data->word_flag);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
241 now->task->set_cpu(SPE_ANY);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
242 now->next = next;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
243
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
244 next = now;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
245
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
246 *data->word_flag = ((next_word != 0x20) && (next_word != 0x0A));
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
247 *data->file_size -= *data->division_size;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
248 *data->sum_i += 1;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
249
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
250 }
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
251
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
252
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
253
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
254 data->task_list = now;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
255
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
256
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
257 if (*data->sum_task_num > 0) {
619
278db3ca751d RenewTask removal
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 508
diff changeset
258 wait_task->set_post(func1,p, 0);
508
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
259 }
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
260
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
261 /* すべての task が終了するのを待つ。*/
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
262 else {
619
278db3ca751d RenewTask removal
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 508
diff changeset
263 wait_task->set_post(func2,p, 0);
508
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
264 }
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
265
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
266 /* 16task が終了するのを待つ */
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
267 wait_task->spawn();
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
268
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
269 }
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
270
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
271
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
272 int
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
273 init(int argc, char **argv)
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
274 {
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
275 for (int i = 1; argv[i]; ++i) {
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
276 if (strcmp(argv[i], "-count") == 0) {
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
277 count = atoi(argv[++i]);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
278 } else if (strcmp(argv[i], "-file") == 0) {
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
279 file = argv[++i];
625
94d82f2c842f 64bit mode worked on Mac OS X.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 619
diff changeset
280 }
94d82f2c842f 64bit mode worked on Mac OS X.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 619
diff changeset
281 }
94d82f2c842f 64bit mode worked on Mac OS X.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 619
diff changeset
282 if (!file) {
94d82f2c842f 64bit mode worked on Mac OS X.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 619
diff changeset
283 printf("usage: %s [-count 10] -file filename\n",argv[0]);
94d82f2c842f 64bit mode worked on Mac OS X.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 619
diff changeset
284 exit(0);
508
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
285 }
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
286
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
287 return 0;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
288 }
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
289
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
290 void
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
291 run_init(TaskManager *manager)
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
292 {
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
293
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
294 data_list_t *data = (data_list_t*)manager->allocate(sizeof(data_list_t));;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
295
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
296 /*data create from input file*/
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
297 create_data(file,data);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
298
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
299 HTaskPtr t_print = manager->create_task(PRINT_TASK);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
300 t_print->add_inData(data->o_data, *data->out_size);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
301 t_print->add_param(*data->out_task_num);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
302 t_print->add_param(*data->status_num);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
303 t_print->wait_for(data->run_wait_task);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
304
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
305 /*task create*/
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
306 task_list_t *now = NULL;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
307 task_list_t *next = (task_list_t*)manager->allocate(sizeof(task_list_t));
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
308 next = NULL;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
309
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
310 int in_off_set = 0;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
311 int out_off_set = 0;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
312 char next_word = 0;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
313
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
314 for (int i = 0; i < *data->task_num; i++) {
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
315
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
316 in_off_set = (*data->sum_i) * (*data->division_size);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
317 out_off_set = (*data->sum_i) * (*data->status_num);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
318 next_word = data->file_mmap[(*data->sum_i + 1) * (*data->division_size) - 1];
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
319
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
320 now = (task_list_t*)manager->allocate(sizeof(task_list_t));
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
321 now->task = (HTaskPtr)manager->allocate(sizeof(HTask));
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
322 now->task = manager->create_task(EXEC_TASK);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
323 now->task->add_inData(data->file_mmap + in_off_set, *data->division_size);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
324 now->task->add_outData(data->o_data + out_off_set, *data->division_out_size);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
325 now->task->add_param(*data->division_size);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
326 now->task->add_param(*data->word_flag);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
327 now->task->set_cpu(SPE_ANY);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
328 now->next = next;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
329
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
330 next = now;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
331
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
332 *data->word_flag = ((next_word != 0x20) && (next_word != 0x0A));
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
333 *data->file_size -= *data->division_size;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
334 *data->sum_i += 1;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
335
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
336 }
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
337
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
338 data->task_list = now;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
339
619
278db3ca751d RenewTask removal
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 508
diff changeset
340 func1(0, (void*)data, 0);
508
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
341
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
342 t_print->spawn();
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
343
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
344 }
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
345
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
346 int
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
347 TMmain(TaskManager *manager_, int argc, char *argv[])
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
348 {
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
349 manager = manager_;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
350
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
351 if (init(argc, argv) < 0) {
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
352 return -1;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
353 }
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
354
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
355 task_init();
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
356 run_init(manager);
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
357
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
358 return 0;
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
359 }
217d7c53442b add word_count3
yutaka@henri.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
360