annotate example/word_count3/main.cc @ 639:70c5c2d2eb24

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