2012-04-11 10 views
2

私はNvidia Cudaについて読んできましたが、「あなたの問題はGPUで実行するのが適切ではない」というコメントを人々が答えたので、いくつかの質問がありました。Nvidia Cuda Program - Cudaアーキテクチャーに適していますか?

私のオフィスには、膨大な数のレコードを持つデータベースがあり、永遠にかかることがあります。 SELECT DISTINCTというSQLクエリを実装しているか、値に対して大文字の関数を適用しています。 Cudaの紹介として、私はすべての文字列をGPU上で大文字にすることができるプログラムを書くことを考えました。

私は、PCIバスを介してデータを読み込む時間を隠すため、またはグローバルメモリにデータを入れるために、GPUコアをできるだけ多く実行しようとしていることについて著者が語ったCudaに関する本を読んできました。メモリのサイズはかなり小さく、数百万の異なる単語があるので、当然、私はバスを飽和させてGPUコアを枯渇させます。

これは、CPUとは対照的に、グラフィックスカードから素晴らしい性能向上を受けない問題ですか?

おかげで、

MJ

+2

ほとんどのクエリ時間はディスクI/Oの速度によるものではありませんか?答えが「はい」の場合、問合せ時間を短縮する唯一の方法はI/Oスループットを向上させることです。 GPUはそれを手助けすることはできません。 – talonmies

+0

あなたはそれについて絶対に正しいです。私は64ギガのRAMを搭載したサーバ上にいるという別の前提を追加し、すべてのデータをメモリに保存しようとします。 –

+2

まだありません。あなたの仕事は計算上高価ではありませんが、メモリは高価です。したがって、GPUは良い選択肢ではありません。 OpenMPは、すでにデータをメモリに格納している方が適しています。 – Azrael3000

答えて

1

SELECT DISTINCTというSQLクエリを実装しているか、値に対して大文字の関数を適用しています。

文字列の大文字の計算済みの列をテーブルに追加することを検討しましたか?

あなたのデータベースが完全にRAMであり、依然として「永遠」になっていると、データベースが適切に構造化され、索引付けされていない可能性があります。クエリプランを調べます。

私は、あなたの選択がきちんとインデックスでカバーされている通常の場合、GPUで最適化することはできないと思います。しかし、ワイルドカードを使用したLIKEクエリや、計算に基づいて行を選択するクエリ(値がより小さい値など)など、テーブルスキャンを必要とするクエリのように、GPUに最適化できるものがあるかもしれません。ジョイン・カラムに重複した値が多い場合、ジョインが多いクエリのようなものさえあるかもしれません。

このような実装の鍵は、データベースの一部のデータをGPUに保持し、データベースと同期させておくことです。そして、行IDを思いつくためにそのデータのパラレル削減などの操作を実行してから、通常のデータベースに対して選択するために使用します。

このような手順を実行する前に、時空間のトレードオフを使用するデータベースベースのクエリ最適化について、無数の可能性を検討します。

+0

私はLIKEクエリを計算するとGPU上で非常に多くの分岐が非常に効果的であると言います。 –

1

あなたの操作/転送比はO(1)であるので、あなたは、グローバルメモリアクセスに非常に大きなボトルネックになります。

GPUでの比較は、操作/転送率がはるかに大きいため、おそらくもっと価値があるでしょう。

これを行うために文字列を共有メモリにロードしている間に、前にやったことを効果的に含む文字列を大文字にすることができます。

私は、CPUベースの実装がおそらくより良いパフォーマンスをもたらすだろうと感じることはできません。少なくとも頭痛が減ります。

関連する問題