annotate regexParser/cerium/ppe/Exec.cc @ 294:bcb3b0cd5604

fix
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 02 Feb 2016 10:42:16 +0900
parents 948428caf616
children 63213964502a
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 "Exec.h"
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
4 #include "Func.h"
272
5aa9d01926f1 Cerium version no compile errors
kono
parents: 271
diff changeset
5 #include "regexParser.h"
5aa9d01926f1 Cerium version no compile errors
kono
parents: 271
diff changeset
6 #include "threadedSearch.h"
5aa9d01926f1 Cerium version no compile errors
kono
parents: 271
diff changeset
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
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
9
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
10 /* これは必須 */
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
11 SchedDefineTask1(Exec,blockedGrep);
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
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
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
14 TSValue tsv;
292
868f01f1ba8e maximum match
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 288
diff changeset
15 BlockOutput blk;
266
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
16 tsv.buff = buff;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
17 tsv.tg = tg;
292
868f01f1ba8e maximum match
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 288
diff changeset
18 tsv.blk = &blk;
279
6cc1d9779f45 add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
19 if (task_spawned == 0) {
288
f2491681914e special state for start search
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 282
diff changeset
20 tsv.current = tg->stateStart->tState;
279
6cc1d9779f45 add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
21 } else {
6cc1d9779f45 add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
22 tsv.current = tg->anyState->tState;
6cc1d9779f45 add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
23 }
292
868f01f1ba8e maximum match
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 288
diff changeset
24 tsv.blk->result = NULL;
281
b74e3b4b11d7 parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 279
diff changeset
25 ResultPtr result = NULL;
292
868f01f1ba8e maximum match
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 288
diff changeset
26 tsv.blk->resultEnd = &result;
281
b74e3b4b11d7 parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 279
diff changeset
27 unsigned char *end = tsv.buff.buffend;
b74e3b4b11d7 parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 279
diff changeset
28 tsv.buff.buffend = tsv.buff.buff+1;
293
948428caf616 NFA maximum match worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 292
diff changeset
29 tsv.matchBegin = tsv.buff.buffptr;
292
868f01f1ba8e maximum match
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 288
diff changeset
30 tsv.matchEnd = NULL;
281
b74e3b4b11d7 parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 279
diff changeset
31 tsv = tSearch(tsv);
292
868f01f1ba8e maximum match
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 288
diff changeset
32 tsv.blk->blockBegin = tsv.current;
281
b74e3b4b11d7 parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 279
diff changeset
33 tsv.buff.buffend = end;
b74e3b4b11d7 parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 279
diff changeset
34 tsv = tSearch(tsv);
292
868f01f1ba8e maximum match
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 288
diff changeset
35 tsv.blk->blockEnd = tsv.current;
868f01f1ba8e maximum match
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 288
diff changeset
36 if (tsv.blk->blockEnd->state->bitState.bitContainer != 1) {
868f01f1ba8e maximum match
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 288
diff changeset
37 if (tsv.matchBegin != tsv.buff.buffptr) {
282
87a801c14117 fix match condition (parallel search doesn't work)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 281
diff changeset
38 // partial match case at block end.
87a801c14117 fix match condition (parallel search doesn't work)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 281
diff changeset
39 ResultPtr r = NEW(Result);
87a801c14117 fix match condition (parallel search doesn't work)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 281
diff changeset
40 r->continued = true;
292
868f01f1ba8e maximum match
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 288
diff changeset
41 r->begin = tsv.matchBegin;
294
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 293
diff changeset
42 r->end = tsv.matchEnd;
292
868f01f1ba8e maximum match
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 288
diff changeset
43 *tsv.blk->resultEnd = r;
282
87a801c14117 fix match condition (parallel search doesn't work)
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 281
diff changeset
44 r->next = NULL;
292
868f01f1ba8e maximum match
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 288
diff changeset
45 tsv.blk->resultEnd = &r->next;
281
b74e3b4b11d7 parallel search done
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 279
diff changeset
46 // printf("Exec %lx r->begin : %p r->end : %p\n",tsv.blockEnd->state->bitState.bitContainer, 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
47 }
266
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
48 }
292
868f01f1ba8e maximum match
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 288
diff changeset
49 tsv.blk->result = result;
266
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
50 return tsv;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
51 }
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
52
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
53 static int
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
54 blockedGrep(SchedTask *s, void *rbuf, void *wbuf)
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
55 {
279
6cc1d9779f45 add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
56 long task_spawned = (long)s->get_param(0);
266
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
57 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
58 long length = (long)s->get_param(2);
266
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
59 long out_size = (long)s->get_param(3);
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
60 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
61 long allocation = task_spawned + (long)s->x;
272
5aa9d01926f1 Cerium version no compile errors
kono
parents: 271
diff changeset
62 unsigned char* i_data;
5aa9d01926f1 Cerium version no compile errors
kono
parents: 271
diff changeset
63 unsigned long * o_data;
266
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
64 if (division_size) {
272
5aa9d01926f1 Cerium version no compile errors
kono
parents: 271
diff changeset
65 i_data = (unsigned char*)s->get_input(rbuf,0) + allocation*division_size;
5aa9d01926f1 Cerium version no compile errors
kono
parents: 271
diff changeset
66 o_data = (unsigned long *)s->get_output(wbuf,1) + allocation*out_size;
266
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
67 } else {
272
5aa9d01926f1 Cerium version no compile errors
kono
parents: 271
diff changeset
68 i_data = (unsigned char*)s->get_input(0);
5aa9d01926f1 Cerium version no compile errors
kono
parents: 271
diff changeset
69 o_data = (unsigned long *)s->get_output(0);
266
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
70 }
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
71 TransitionGeneratorPtr tg = (TransitionGeneratorPtr)w->global;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
72 Buffer buff;
292
868f01f1ba8e maximum match
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 288
diff changeset
73 buff.buff = buff.buffptr = i_data;
275
8879eb8c64a8 remove segmentation fault
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 272
diff changeset
74 buff.buffend = buff.buff + length;
279
6cc1d9779f45 add CeriumMain.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 278
diff changeset
75 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
76 // resultPrint(tsv.result,"Exec");
292
868f01f1ba8e maximum match
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 288
diff changeset
77 o_data[0] = (unsigned long)tsv.blk->result;
868f01f1ba8e maximum match
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 288
diff changeset
78 o_data[1] = (unsigned long)tsv.blk->blockBegin->state;
868f01f1ba8e maximum match
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 288
diff changeset
79 o_data[2] = (unsigned long)tsv.blk->blockEnd->state;
266
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
80 return 0;
e51cac73e42a CeriumGrep start
masa
parents:
diff changeset
81 }