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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
266
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
1 #include <stdio.h>
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
2 #include <string.h>
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
3 #include "Print.h"
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
4 #include "Func.h"
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
5 #include "FileMapReduce.h"
272
5aa9d01926f1 Cerium version no compile errors
kono
parents: 266
diff changeset
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
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
9
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
10 #define STATUS_NUM 2
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
11 /* これは必須 */
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
12 SchedDefineTask1(Print,run_print);
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
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
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
24 static int
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
25 run_print(SchedTask *s, void *rbuf, void *wbuf)
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
26 {
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
27 MapReduce *w = (MapReduce*)s->get_input(0);
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
28
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
29 int out_size = w->division_out_size / sizeof(unsigned long long);
272
5aa9d01926f1 Cerium version no compile errors
kono
parents: 266
diff changeset
30 int out_task_num = w->task_num;
266
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
31 ResultPtr prev = NULL;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
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
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
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
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
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
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
77 }
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
78 return 0;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
79 }