Mercurial > hg > Applications > Grep
annotate regexParser/cerium/ppe/Exec.cc @ 281:b74e3b4b11d7
parallel search done
author | Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 31 Jan 2016 18:28:58 +0900 |
parents | 6cc1d9779f45 |
children | 87a801c14117 |
rev | line source |
---|---|
266 | 1 #include <stdio.h> |
2 #include <string.h> | |
3 #include "Exec.h" | |
4 #include "Func.h" | |
272 | 5 #include "regexParser.h" |
6 #include "threadedSearch.h" | |
7 #include "FileMapReduce.h" | |
279
6cc1d9779f45
add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
278
diff
changeset
|
8 #include "CeriumMain.h" |
266 | 9 |
10 /* これは必須 */ | |
11 SchedDefineTask1(Exec,blockedGrep); | |
12 | |
279
6cc1d9779f45
add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
278
diff
changeset
|
13 TSValue blockSearch(TransitionGeneratorPtr tg,Buffer buff,int task_spawned) { |
266 | 14 TSValue tsv; |
15 tsv.buff = buff; | |
16 tsv.tg = tg; | |
279
6cc1d9779f45
add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
278
diff
changeset
|
17 if (task_spawned == 0) { |
6cc1d9779f45
add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
278
diff
changeset
|
18 tsv.current = tg->stateList->tState; |
6cc1d9779f45
add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
278
diff
changeset
|
19 } else { |
6cc1d9779f45
add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
278
diff
changeset
|
20 tsv.current = tg->anyState->tState; |
6cc1d9779f45
add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
278
diff
changeset
|
21 } |
266 | 22 tsv.result = NULL; |
281
b74e3b4b11d7
parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
279
diff
changeset
|
23 ResultPtr result = NULL; |
b74e3b4b11d7
parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
279
diff
changeset
|
24 tsv.resultEnd = &result; |
b74e3b4b11d7
parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
279
diff
changeset
|
25 unsigned char *end = tsv.buff.buffend; |
b74e3b4b11d7
parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
279
diff
changeset
|
26 tsv.buff.buffend = tsv.buff.buff+1; |
b74e3b4b11d7
parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
279
diff
changeset
|
27 tsv = tSearch(tsv); |
266 | 28 tsv.blockBegin = tsv.current; |
281
b74e3b4b11d7
parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
279
diff
changeset
|
29 tsv.buff.buffend = end; |
b74e3b4b11d7
parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
279
diff
changeset
|
30 tsv = tSearch(tsv); |
266 | 31 tsv.blockEnd = tsv.current; |
272 | 32 if (tsv.blockEnd->state->bitState.bitContainer != 1) { |
281
b74e3b4b11d7
parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
279
diff
changeset
|
33 // partial match case at block end. |
266 | 34 ResultPtr r = NEW(Result); |
281
b74e3b4b11d7
parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
279
diff
changeset
|
35 r->continued = true; |
266 | 36 r->begin = tsv.buff.matchBegin; |
281
b74e3b4b11d7
parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
279
diff
changeset
|
37 r->end = tsv.buff.buffptr-1; |
266 | 38 *tsv.resultEnd = r; |
39 r->next = NULL; | |
40 tsv.resultEnd = &r->next; | |
281
b74e3b4b11d7
parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
279
diff
changeset
|
41 // printf("Exec %lx r->begin : %p r->end : %p\n",tsv.blockEnd->state->bitState.bitContainer, r->begin,r->end); |
266 | 42 } |
281
b74e3b4b11d7
parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
279
diff
changeset
|
43 tsv.result = result; |
266 | 44 return tsv; |
45 } | |
46 | |
47 static int | |
48 blockedGrep(SchedTask *s, void *rbuf, void *wbuf) | |
49 { | |
279
6cc1d9779f45
add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
278
diff
changeset
|
50 long task_spawned = (long)s->get_param(0); |
266 | 51 long division_size = (long)s->get_param(1); |
275
8879eb8c64a8
remove segmentation fault
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
272
diff
changeset
|
52 long length = (long)s->get_param(2); |
266 | 53 long out_size = (long)s->get_param(3); |
54 MapReduce *w = (MapReduce*)s->get_param(4); | |
279
6cc1d9779f45
add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
278
diff
changeset
|
55 long allocation = task_spawned + (long)s->x; |
272 | 56 unsigned char* i_data; |
57 unsigned long * o_data; | |
266 | 58 if (division_size) { |
272 | 59 i_data = (unsigned char*)s->get_input(rbuf,0) + allocation*division_size; |
60 o_data = (unsigned long *)s->get_output(wbuf,1) + allocation*out_size; | |
266 | 61 } else { |
272 | 62 i_data = (unsigned char*)s->get_input(0); |
63 o_data = (unsigned long *)s->get_output(0); | |
266 | 64 } |
65 TransitionGeneratorPtr tg = (TransitionGeneratorPtr)w->global; | |
66 Buffer buff; | |
67 buff.buff = buff.buffptr = buff.matchBegin = i_data; | |
275
8879eb8c64a8
remove segmentation fault
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
272
diff
changeset
|
68 buff.buffend = buff.buff + length; |
279
6cc1d9779f45
add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
278
diff
changeset
|
69 TSValue tsv = blockSearch(tg,buff,task_spawned); |
281
b74e3b4b11d7
parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
279
diff
changeset
|
70 // resultPrint(tsv.result,"Exec"); |
272 | 71 o_data[0] = (unsigned long)tsv.result; |
275
8879eb8c64a8
remove segmentation fault
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
272
diff
changeset
|
72 o_data[1] = (unsigned long)tsv.blockBegin->state; |
8879eb8c64a8
remove segmentation fault
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
272
diff
changeset
|
73 o_data[2] = (unsigned long)tsv.blockEnd->state; |
266 | 74 return 0; |
75 } |