【问题标题】:GPU Accelerated XML ParsingGPU 加速 XML 解析
【发布时间】:2013-07-25 21:09:01
【问题描述】:

我需要提高一个分析 XML 文件并将其内容添加到大型 SQL 数据库的软件的性能。我一直在尝试查找有关是否可以在 GPU 上实现此功能的信息。我对 CUDA 和 OpenCL 的研究让我没有任何明确的答案,除了可以使用编译器指令以启用 GPU 处理的 C/C++、FORTRAN 和许多其他语言开发软件这一事实。这导致我问这个问题:我真的需要为 GPU 加速编写的 API 或库,还是使用标准 XML 解析库用 C/C++ 编写并使用 CUDA/OpenCL 的编译器指令编译的程序会自动运行 XML GPU 上的库函数?

【问题讨论】:

  • “我是否真的需要为 GPU 加速而编写的 API 或库,或者是否需要使用标准 XML 解析库以 C/C++ 编写并使用 CUDA/OpenCL 编译器指令编译的程序自动在 GPU 上运行 XML 库函数?” - 绝对是前者,你可能需要对所涉及的算法进行重大重组,如果可能/对这样分层且不适合像 XML 这样的 GPU 计算的任务可能/有用的话 -解析(虽然我承认我不是 XML 解析方面的专家)。
  • 实际上你可以在 GPU 上进行解析,就像它是一个非常宽的单词 CPU 一样,并利用众所周知的 hack 进行 SIMD 解析:先生成一个第 1K 个字符的第零位的单词,然后首先位等,然后对它们进行并行按位运算以构建解析树。

标签: xml xml-parsing gpgpu


【解决方案1】:

一般来说,GPU 不适合 XML 处理加速...只有当预期任务具有大规模并行性以利用大量 GPU 处理单元时,GPU 才适用。另一方面,XML 处理主要是单线程状态机过渡类型的工作。

【讨论】:

    【解决方案2】:

    实际上,我认为在 GPU 上解析 XML 没有任何意义。 GPU 架构专注于海量浮点数计算,而不是文本处理等操作。我认为使用 CPU 并在线程之间拆分 XML 解析以利用多个内核要好得多。在我看来,在这样的应用程序中使用 GPU 太过分了。

    【讨论】:

    • 太糟糕了,没有知识的人试图回答一个声望点问题。我有完全相同的问题,我需要在 GPU 上解析的最佳算法,但我找不到。 -1
    【解决方案3】:

    首先看看你的xml的结构。在此链接之后,您可以找到适用于并行处理的 XML 结构的标准。 Parallel XML Parsing in Java

    如果您的 xml 结构是可并行处理的,那么有几个想法:

    据我所知,XML 解析需要堆栈结构来记住树中的当前位置并验证节点的正确打开和关闭。

    堆栈结构可以表示为带有堆栈指针的一维数组。 栈指针包含数组中栈顶元素的位置

    他们说您可以将数组存储在一维纹理中(最多 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是否有效

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-16
      • 1970-01-01
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-08
      相关资源
      最近更新 更多