使用 OpenCL 加速 Web 应用程序(4)使用 WebCL 搜索文本
 
- UID
- 1066743
|

使用 OpenCL 加速 Web 应用程序(4)使用 WebCL 搜索文本
使用 WebCL 搜索文本许多 Web 应用程序需要尽快检测大文本集中的模式。这类应用程序对 GPU 来说非常完美,专门用于庞大数据的高强度处理。在 Amy Lowell 的叙事诗 “The Great Adventure of Max Breuck” 中,文本搜索项搜索四个词(that、very、time 和 more)。图 2 显示了其运行情况。
图 2. 使用 OpenCL 向量搜索文本 这一算法使用了 3 个文件来实现,这 3 个文件都包含在本文的可下载档案中:
- text_search.html:包含 Web 页面的 HTML 和部署内核的 JavaScript。
- text_search.cl:包含 Web 页面的 HTML 和部署内核的 JavaScript。
- poem.txt:包含诗歌的原始文本(在开头和结尾都插入了额外的字符)。
每个工作项读取 16 个诗歌字符,并检查要搜索的四个词是否出现过。如果发现匹配项,工作项就会自动地增加四个计数器中的一个,将结果返回给主机。这个函数如 清单 10 所示。
清单 10. 增加文本搜索计数器的函数1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| __kernel void text_search(__global char* text,
__global int* match_count) {
char16 pattern = (char16)('t', 'h', 'a', 't', 'v', 'e', 'r', 'y',
't', 'i', 'm', 'e', 'm', 'o', 'r', 'e');
char16 test_vector, check_vector;
/* load global text into private buffer */
test_vector = vload16(0, text + get_global_id(0));
/* compare test vector and pattern */
check_vector = test_vector == pattern;
/* Check for 'that,' 'very,' 'time,' and 'more' */
if(all(check_vector.s0123))
atomic_inc(match_count);
if(all(check_vector.s4567))
atomic_inc(match_count + 1);
if(all(check_vector.s89AB))
atomic_inc(match_count + 2);
if(all(check_vector.sCDEF))
atomic_inc(match_count + 3);
}
|
Firefox 的内核输出如 图 3 所示。
图 3. 文本搜索结果 使用 grep 功能对结果进行验证。例如,指令 grep -o time poem.txt 返回了词语 time 在文件 poem.txt 中出现的次数。
文本搜索主机应用程序生成 30,865 个工作项来执行内核。不是所有项都同时执行,具体情况取决于 GPU。这不是主要问题。只要一个工作项组完成执行,另一个组就会开始。因此,对 “我能执行多少个工作项?” 这一常见问题,答案是 ”您想要多少都可以“。
结束语:WebCL 的未来当您考虑 WebCL 提供的功能有多强大时,可用的浏览器扩展寥寥无几,这看起来可能有些奇怪。问题在于安全性方面。内核执行可能会产生错误,比如无限循环或死锁。这对 CPU 来说不是什么大问题,但从我的经验来讲,GPU 错误会导致计算机死机。使用 Ctrl-C 和 Ctrl-Alt-Delete 无法解决问题,必须重启系统。
为了解决这一问题,GPU 制造商保证在其产品中添加了更好的安全性。这意味着用户可以中断或者中止 GPU 的执行,而不会导致系统崩溃。如果这是常见用法,WebCL 将会从古怪的东西变为必需的东西。通过 WebCL 的高速执行,浏览器应用能够提供与台式计算机应用程序相同的性能来处理数据和显示图像。 |
|
|
|
|
|