XML ファイルを解析し、その内容を大規模な SQL データベースに追加するソフトウェアのパフォーマンスを改善する必要があります。これを GPU に実装できるかどうかについての情報を見つけようとしています。CUDA と OpenCL の両方に関する私の調査では、C/C++、FORTRAN、およびコンパイラ ディレクティブを使用して GPU 処理を可能にする他の多くの言語でソフトウェアを開発できるという事実以外に、明確な答えがありませんでした。GPU アクセラレーション用に記述された API またはライブラリが実際に必要なのか、それとも、標準の XML 解析ライブラリを使用して C/C++ で記述され、CUDA/OpenCL 用のコンパイラ ディレクティブでコンパイルされたプログラムは、自動的に XML を実行しますか? GPU 上のライブラリ関数?
3 に答える
一般に、GPU は XML 処理の高速化には適していません...GPU は、目的のタスクが多数の GPU 処理ユニットを活用するための大規模な並列処理を備えている場合にのみ優れています.一方、XML 処理は主に単一スレッドの状態マシンの移行です。仕事の種類。
実際、GPU で XML を解析する意味はありません。GPU アーキテクチャは、大量の浮動小数点数の計算に重点を置いており、テキスト処理などの操作には重点を置いていません。複数のコアを利用するには、CPU を使用し、XML 解析をスレッド間で分割する方がはるかに優れていると思います。そのようなアプリケーションで GPU を使用することは、私の意見ではやり過ぎです。
まず、xml の構造を見てください。このリンクをたどると、並列処理に適した XML 構造の基準を見つけることができます。 Java での並列 XML 解析
xml 構造が並列処理可能な場合、いくつかのアイデアがあります。
私が知っているように、XML 解析には、ツリー内の現在の位置を記憶し、ノードの適切な開閉を確認するためのスタック構造が必要です。
スタック構造は、スタック ポインタを持つ 1 次元配列として表すことができます。スタック ポインタには、配列内のスタック トップ要素の位置が含まれます
配列を 1D テクスチャに格納できると言われています (最大 4,096 要素)。または 2D テクスチャ (最大 16,777,216 = 4,096x4,096 要素) ... 詳細については、次のリンクを参照して ください https://developer.nvidia.com/gpugems/GPUGems2/gpugems2_chapter33.html
一意の要素名ごとに個別の浮動小数点数を割り当てると、要素を数値として格納できます
入力テキストを ascii/utf-8 コードの配列として取得する場合、それらを浮動小数点数の配列として格納してみませんか?
GPU を使用する上で最後に考慮すべき重要なことは、出力構造とは何かです。
たとえば、固定長列のテーブル行が必要な場合は、浮動小数点数の 1D または 2D 配列でそのような構造を表現する方法についてのみです。
前のポイントについて確信があり、GPU が適している場合は、データをテクスチャに変換し、テクスチャをデータに戻す関数を記述します。
そしてもちろん、xmlパーサー全体...
私は GPU を使ったプログラミングをまったく試したことがありませんでしたが、すぐに何かが不可能だと言うように思えます...
誰かが最初にアルゴリズム全体を構築し、GPU を使用することが効率的かどうかを試してください。