Mercurial > hg > Applications > Grep
annotate regexParser/cerium/ppe/Print.cc @ 303:cc770cd8d000
parallel retrying seach worked
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 08 Feb 2016 11:56:13 +0900 |
parents | 27414e6fb33c |
children |
rev | line source |
---|---|
266 | 1 #include <stdio.h> |
2 #include <string.h> | |
3 #include "Print.h" | |
4 #include "Func.h" | |
5 #include "FileMapReduce.h" | |
272 | 6 #include "regexParser.h" |
279
6cc1d9779f45
add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
275
diff
changeset
|
7 #include "CeriumMain.h" |
302
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
297
diff
changeset
|
8 #include "threadedSearch.h" |
266 | 9 |
10 #define STATUS_NUM 2 | |
11 /* これは必須 */ | |
12 SchedDefineTask1(Print,run_print); | |
13 | |
302
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
297
diff
changeset
|
14 static |
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
297
diff
changeset
|
15 TSValue stateSkipOnce(TSValue tsv) { |
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
297
diff
changeset
|
16 if (tsv.matchEnd) { |
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
297
diff
changeset
|
17 addResult(tsv,false,tsv.matchBegin,tsv.matchEnd); |
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
297
diff
changeset
|
18 } |
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
297
diff
changeset
|
19 tsv.buff.buffend = tsv.buff.buffptr; // end search |
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
297
diff
changeset
|
20 return tsv; |
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
297
diff
changeset
|
21 } |
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
297
diff
changeset
|
22 |
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
297
diff
changeset
|
23 |
266 | 24 static int |
25 run_print(SchedTask *s, void *rbuf, void *wbuf) | |
26 { | |
27 MapReduce *w = (MapReduce*)s->get_input(0); | |
28 | |
29 int out_size = w->division_out_size / sizeof(unsigned long long); | |
272 | 30 int out_task_num = w->task_num; |
266 | 31 ResultPtr prev = NULL; |
32 for (int i = 0; i < out_task_num ; i++) { | |
275
8879eb8c64a8
remove segmentation fault
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
272
diff
changeset
|
33 ResultPtr r = (ResultPtr)w->o_data[i*out_size+0]; |
302
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
297
diff
changeset
|
34 // first reply contains block begin and block end |
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
297
diff
changeset
|
35 unsigned char *begin = r->begin; |
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
297
diff
changeset
|
36 unsigned char *end = r->end; |
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
297
diff
changeset
|
37 r = r->next; |
281
b74e3b4b11d7
parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
279
diff
changeset
|
38 if (r == NULL) { |
b74e3b4b11d7
parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
279
diff
changeset
|
39 prev = NULL; |
b74e3b4b11d7
parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
279
diff
changeset
|
40 continue; |
b74e3b4b11d7
parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
279
diff
changeset
|
41 } |
303
cc770cd8d000
parallel retrying seach worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
302
diff
changeset
|
42 // StatePtr blockBegin = (StatePtr)w->o_data[i*out_size+1]; |
281
b74e3b4b11d7
parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
279
diff
changeset
|
43 if (prev) { |
b74e3b4b11d7
parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
279
diff
changeset
|
44 if (i >= out_task_num) break; |
282
87a801c14117
fix match condition (parallel search doesn't work)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
281
diff
changeset
|
45 // 最後のブロックでなく、前の prevBlockEnd が state 1 でない場合) |
87a801c14117
fix match condition (parallel search doesn't work)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
281
diff
changeset
|
46 StatePtr prevBlockEnd = (StatePtr)w->o_data[i*out_size-1]; |
281
b74e3b4b11d7
parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
279
diff
changeset
|
47 #if 0 |
b74e3b4b11d7
parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
279
diff
changeset
|
48 printf("task %d prev begin : %p r->begin : %p r->end : %p\n", i,prev->begin,r->begin,r->end); |
282
87a801c14117
fix match condition (parallel search doesn't work)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
281
diff
changeset
|
49 printf("nextblockBegin : %lx prevBlockEnd : %lx : string ",blockBegin->bitState.bitContainer,prevBlockEnd->bitState.bitContainer); |
281
b74e3b4b11d7
parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
279
diff
changeset
|
50 fwrite(r->begin,r->end - r->begin-1,1,stdout); |
282
87a801c14117
fix match condition (parallel search doesn't work)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
281
diff
changeset
|
51 printf(" match %d\n", ((prevBlockEnd->bitState.bitContainer & ~blockBegin->bitState.bitContainer)==0)? 1 : 0 ); |
281
b74e3b4b11d7
parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
279
diff
changeset
|
52 #endif |
302
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
297
diff
changeset
|
53 if (prevBlockEnd->bitState.bitContainer !=1) { |
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
297
diff
changeset
|
54 // そこから最初の stateSkip までやり直し。マッチしたら表示。 |
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
297
diff
changeset
|
55 TransitionGeneratorPtr tg = (TransitionGeneratorPtr)w->global; |
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
297
diff
changeset
|
56 tg->stateSkip = stateSkipOnce; |
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
297
diff
changeset
|
57 Buffer buff; |
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
297
diff
changeset
|
58 buff.buff = buff.buffptr = begin; |
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
297
diff
changeset
|
59 buff.buffend = end; |
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
297
diff
changeset
|
60 TSValue tsv = createTSValue(tg,buff); |
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
297
diff
changeset
|
61 BlockOutput blk; |
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
297
diff
changeset
|
62 tsv.blk = &blk; |
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
297
diff
changeset
|
63 tsv.current = prevBlockEnd->tState; |
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
297
diff
changeset
|
64 tsv.blk->result = NULL; |
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
297
diff
changeset
|
65 ResultPtr result = NULL; |
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
297
diff
changeset
|
66 tsv.blk->resultEnd = &result; |
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
297
diff
changeset
|
67 tsv.matchBegin = prev->begin; |
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
297
diff
changeset
|
68 tsv.matchEnd = prev->end; |
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
297
diff
changeset
|
69 tsv = tSearch(tsv); |
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
297
diff
changeset
|
70 if (result) { |
303
cc770cd8d000
parallel retrying seach worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
302
diff
changeset
|
71 resultPrint(result,"Print"); |
302
27414e6fb33c
retrying blocked search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
297
diff
changeset
|
72 } |
266 | 73 } |
282
87a801c14117
fix match condition (parallel search doesn't work)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
281
diff
changeset
|
74 // printf("%p\n",r); |
266 | 75 } |
279
6cc1d9779f45
add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
275
diff
changeset
|
76 prev = resultPrint(r,"Print"); |
266 | 77 } |
78 return 0; | |
79 } |