GPU加速的XML解析
我需要提高分析XML文件并将其内容添加到大型SQL数据库的软件的性能。 我一直在试图找到关于是否可以在GPU上实现这一点的信息。 我对CUDA和OpenCL的研究给我留下了任何明确的答案,除了可以用C / C ++,FORTRAN和许多其他语言使用编译器指令来开发GPU处理的软件之外。 这导致我问这个问题:我是否真的需要一个为GPU加速编写的API或库,或者使用标准XML解析库编写的使用CUDA / OpenCL编译器指令编译的程序是否会自动运行XML GPU上的库函数?
我实际上在解析GPU上的XML时看不到任何意义。 GPU架构专注于大量浮点数计算,而不是文本处理等操作。 我认为使用CPU并在线程之间拆分XML分析以利用多个内核会更好。 在这样的应用程序中使用GPU在我看来是矫枉过正。
一般而言,GPU不适合用于XML处理加速...... GPU只有在预期任务具有大量并行性才能利用大量GPU处理单元时才是非常好的。另一方面,XML处理主要是单线程状态机过渡工作类型。
首先看看你的XML的结构。 在此链接之后,您可以找到适用于并行处理的XML结构标准。 Java中的并行XML解析
如果你的XML结构是可并行处理的,那么有几点想法:
据我所知,XML解析需要堆栈结构来记住树中的当前位置并验证节点的正确打开和关闭。
堆栈结构可以表示为一个带有堆栈指针的一维数组。 堆栈指针包含数组中堆栈顶部元素的位置
他们说你可以将数组存储在1D纹理中(最多4,096个元素)。 或者在2D纹理中(最多16,777,216 = 4,096x4,096个元素)...查看以下链接以获得更多信息https://developer.nvidia.com/gpugems/GPUGems2/gpugems2_chapter33.html
如果将单独的浮点数分配给每个唯一元素名称,则可以将元素存储为数字
如果将输入文本作为ascii / utf-8代码的数组,那么为什么不将它们存储为浮点数的数组?
最后一件重要考虑使用GPU的是输出结构。
如果你需要例如固定长度列的表格行,那么它只是关于如何在浮点数的一维或二维数组中表示这样的结构
如果您确定以前的观点并且GPU适合您,那么只需编写函数即可将您的数据转换为纹理和纹理,然后转换回数据
然后当然整个XML解析器......
我从来没有尝试过使用GPU进行编程,但似乎很快就会说,有些事情是不可能的。
有人应该首先构建整个算法,并尝试使用GPU是否有效
链接地址: http://www.djcxy.com/p/72949.html