0
|
1 #pragma OPENCL EXTENSION cl_khr_byte_addressable_store : enable
|
|
2
|
|
3 __kernel void word_count(__global char* text_data, __global int* size, __global int* out_data)
|
|
4 {
|
|
5
|
|
6 //unsigned long long *head_tail_flag = o_data +2;
|
|
7
|
|
8 uint gid = get_global_id(0);
|
|
9
|
|
10 int length = *size;
|
|
11 int word_flag = 0;
|
|
12 int word_num = 0;
|
|
13 int line_num = 0;
|
|
14 int i = 0;
|
|
15
|
|
16 int start = gid*length/2;
|
|
17 int end = start + length/2;
|
|
18
|
|
19 //head_tail_flag[0] = (i_data[0] != 0x20) && (i_data[0] != 0x0A);
|
|
20 //word_num -= 1-head_tail_flag[0];
|
|
21
|
|
22 for (i = 0; i < length; i++) {
|
|
23 //for (i = start; i < end; i++) {
|
|
24 if (text_data[i] == 0x20) {
|
|
25 word_flag = 1;
|
|
26 } else if (text_data[i] == 0x0A) {
|
|
27 line_num += 1;
|
|
28 word_flag = 1;
|
|
29 } else {
|
|
30 word_num += word_flag;
|
|
31 word_flag = 0;
|
|
32 }
|
|
33 }
|
|
34
|
|
35 word_num += word_flag;
|
|
36
|
|
37 //head_tail_flag[1] = (i_data[i-1] != 0x20) && (i_data[i-1] != 0x0A);
|
|
38
|
|
39 // s->printf("SPE word %d line %d\n",word_num,line_num);
|
|
40
|
|
41 int index = gid*2;
|
|
42
|
|
43 out_data[index] = word_num;
|
|
44 out_data[index+1] = line_num;
|
|
45
|
|
46
|
|
47
|
|
48 return 0;
|
|
49
|
|
50 }
|