2013-07-25 67 views
7

我需要改善解析XML文件並將其內容添加到大型SQL數據庫的軟件的性能。我一直在試圖找到關於是否可以在GPU上實現這一點的信息。我對CUDA和OpenCL的研究給我留下了任何明確的答案,除了可以用C/C++,FORTRAN和許多其他語言使用編譯器指令來開發GPU處理的軟件之外。這導致我問這個問題:我是否真的需要一個爲GPU加速編寫的API或庫,或者使用標準XML解析庫編寫的使用CUDA/OpenCL編譯器指令編譯的程序是否會自動運行XML GPU上的庫函數?GPU加速的XML解析

+1

*「我是不是真的需要GPU加速編寫的API或庫,或將一個程序用C語言編寫/ C++使用標準的XML解析庫並使用CUDA/OpenCL的編譯器指令進行編譯時,會自動在GPU上運行XML庫函數?「* - 絕對是前者,您可能需要重大調整所涉及的算法,有用的任務如此分層,不適合像GPU解析那樣的GPU計算(儘管我不是XML解析的專家,我承認)。 –

回答

2

我實際上在解析GPU上的XML時看不到任何意義。 GPU架構專注於大量浮點數計算,而不是文本處理等操作。我認爲使用CPU並在線程之間拆分XML分析以利用多個內核會更好。在這樣的應用程序中使用GPU在我看來是矯枉過正。

+1

太壞的人沒有知識試圖回答一個問題的聲望點。我有完全相同的問題,我需要最好的算法解析GPU,我找不到一個。 -1 – Nulik

2

一般情況下,GPU不適合XML處理加速... GPU是,如果預期的任務有大規模並行利用,另一方面大量的GPU處理單元.. XML處理僅偉大在很大程度上是一種單線程狀態機過渡類型的工作。

0

首先看看你的xml的結構。在此鏈接之後,您可以找到適用於並行處理的XML結構標準。 Parallel XML Parsing in Java

如果你的XML結構是並行處理的,然後幾個想法:

我所知,XML解析需要堆疊結構記在樹當前位置,並驗證正確的開放和節點關閉。

堆棧結構可以表示爲帶有堆棧指針的一維數組。 堆棧指針包含陣列中棧頂元素的位置

他們說您可以將數組存儲在1D紋理中(最多4,096個元素)。 還是以2D紋理(最大16777216 = 4,096x4,096元素)...看看下面的鏈接瞭解更多 https://developer.nvidia.com/gpugems/GPUGems2/gpugems2_chapter33.html

如果分配獨立的浮點數到每一個獨特的元素名稱,那麼你就可以存儲元素數字

如果您將輸入文本作爲ascii/utf-8代碼的數組,那麼爲什麼不將它們存儲爲浮點數的數組?

最重要考慮使用GPU的事情是輸出結構是什麼。

如果您需要例如表格的固定長度列,那麼它只是關於如何表示這樣的結構在一維或二維數組中的浮點數

當您確定以前的點和GPU是適合您的時候,那麼只需編寫函數您的數據轉換成紋理和紋理回到你的數據

然後當然整個XML解析器...

我從來沒有嘗試過與GPU編程所有,但很快在我看來,說某樣東西不可能...

有人應該是第一個建全的算法,並看是否能夠有效地使用GPU或不