我需要提高一款解析XML文件并将其内容添加到大型SQL数据库的软件的性能。我一直在努力寻找关于是否有可能在GPU上实现这一点的信息。我对CUDA和OpenCL的研究给我留下了任何明确的答案,除了一个事实,即软件可以用C/C++,FORTRAN和许多其他语言开发,使用编译器指令来启用图形处理器处理。这就引出了我的问题:我是否真的需要为GPU加速而编写的API或库,或者使用标准XML解析库并使用CUDA/OpenCL编译器指令编译的C/C++编写的程序是否会自动在GPU上运行XML库函数?
发布于 2016-05-05 14:50:53
一般而言,图形处理器不适合于XML处理,只有当预期任务具有大规模并行性以利用大量图形处理器处理单元时,acceleration...GPU才是伟大的。另一方面,XML处理在很大程度上是单线程状态机过渡类型的作业。
发布于 2013-10-14 22:59:03
实际上,我看不出在GPU上解析XML有什么意义。GPU架构专注于大规模浮点数计算,而不是像文本处理那样的操作。我认为使用CPU和在线程之间拆分XML解析来利用多核要好得多。在我看来,在这样的应用程序中使用GPU有点过头了。
发布于 2018-01-31 20:11:59
首先看一下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是否有效
https://stackoverflow.com/questions/17868786
复制相似问题