19

nVidia CUDAなどを使用してGPGPUを利用するアプリケーションを作成した人がいるかどうか知りたいです。もしそうなら、どのような問題を発見し、標準の CPU と比較してどのようなパフォーマンスの向上を達成しましたか?

4

10 に答える 10

29

Cuda の代わりにATI のストリーム SDKを使用して gpgpu 開発を行っています。どのようなパフォーマンスの向上が得られるかは多くの要因に依存しますが、最も重要なのは数値強度です。(つまり、メモリ参照に対する計算操作の比率です。)

2 つのベクトルを追加するような BLAS レベル 1 または BLAS レベル 2 関数は、3 つのメモリ参照ごとに 1 つの数学演算しか実行しないため、NI は (1/3) です。これは、CPUで実行するよりも、CALまたはCudaで常に遅く実行されます。主な理由は、CPU から GPU へのデータ転送とその逆の転送にかかる時間です。

FFT のような関数の場合、O(N log N) の計算と O(N) のメモリ参照があるため、NI は O(log N) です。N が非常に大きい場合、たとえば 1,000,000 の場合、GPU で実行する方が高速になる可能性があります。N が小さい場合、たとえば 1,000 の場合、ほぼ確実に遅くなります。

行列の LU 分解や固有値の検出などの BLAS レベル 3 または LAPACK 関数の場合、O( N^3) の計算と O(N^2) のメモリ参照があるため、NI は O(N) です。非常に小さな配列の場合、たとえば N がいくつかのスコアであるとします。これは CPU で実行する方が高速ですが、N が増加すると、アルゴリズムはメモリ バウンドからコンピューティング バウンドに急速に移行し、GPU のパフォーマンスが非常に向上します。早く。

複雑な算術演算を含むものは、通常、NI を 2 倍にし、GPU パフォーマンスを向上させるスカラー算術よりも多くの計算を行います。


(出典:earthlink.net

CGEMM のパフォーマンスは次のとおりです。Radeon 4870 で実行された複雑な単精度行列 - 行列乗算です。

于 2008-11-25T22:18:40.460 に答える
12

単純なアプリケーションを作成しましたが、浮動小数点計算を並列化できると非常に役立ちます。

イリノイ大学アーバナ シャンペーン校の教授と NVIDIA のエンジニアが一緒に教えてくれた次のコースは、私が始めたときに非常に役に立ちまし。すべての講義の録音が含まれます)。

于 2008-09-11T04:03:27.467 に答える
10

いくつかの画像処理アルゴリズムに CUDA を使用しました。もちろん、これらのアプリケーションは CUDA (または任意の GPU 処理パラダイム) に非常に適しています。

IMO によると、アルゴリズムを CUDA に移植する際には、次の 3 つの典型的な段階があります。

  1. 初期移植: CUDA の非常に基本的な知識があれば、数時間以内に単純なアルゴリズムを移植できます。運が良ければ、パフォーマンスが 2 ~ 10 倍向上します。
  2. 自明な最適化:これには、入力データのテクスチャの使用と多次元配列のパディングが含まれます。経験があれば、これは 1 日で実行でき、パフォーマンスがさらに 10 倍向上する可能性があります。結果のコードはまだ読み取り可能です。
  3. ハードコア最適化:これには、データを共有メモリにコピーしてグローバル メモリ レイテンシを回避すること、コードを裏返して使用されるレジスタの数を減らすことなどが含まれます。このステップで数週間を費やすことができますが、パフォーマンスの向上はそれほど価値がありませんほとんどの場合。このステップの後、コードは非常に難読化され、誰も (あなたも含めて) 理解できなくなります。

これは、CPU 向けにコードを最適化するのと非常によく似ています。ただし、パフォーマンスの最適化に対する GPU の応答は、CPU よりもさらに予測しにくいものです。

于 2009-05-12T14:11:51.517 に答える
7

私は GPGPU をモーション検出 (元は CG を使用し、現在は CUDA を使用) と画像処理による安定化 (CUDA を使用) に使用しています。これらの状況では、約 10 倍から 20 倍のスピードアップが得られています。

私が読んだことから、これはデータ並列アルゴリズムのかなり典型的なものです。

于 2008-09-10T22:05:43.473 に答える
2

いくつかの経済的用途のために、CUDAでモンテカルロ計算を実装しました。最適化されたCUDAコードは、「もっと頑張ったかもしれないが、実際にはそうではなかった」マルチスレッドCPU実装よりも約500倍高速です。(ここでは、GeForce 8800GTとQ6600を比較しています)。ただし、モンテカルロ問題が驚異的並列であることはよく知られています。

発生する主な問題は、G8xおよびG9xチップのIEEE単精度浮動小数点数への制限による精度の低下です。GT200チップのリリースにより、パフォーマンスをいくらか犠牲にして、倍精度ユニットを使用することでこれをある程度軽減することができました。まだ試していません。

また、CUDAはC拡張機能であるため、別のアプリケーションに統合することは簡単ではありません。

于 2008-10-23T09:21:24.490 に答える
2

CUDAの実際の経験はまだありませんが、このテーマを研究していて、GPGPU API(すべてCUDAを含む)を使用して肯定的な結果を文書化した多くの論文を見つけました。

このホワイトペーパーでは、効率的なアルゴリズムに組み合わせることができる多数の並列プリミティブ(マップ、スキャッター、ギャザーなど)を作成することにより、データベース結合を並列化する方法について説明します。

このホワイトペーパーでは、AES暗号化標準の並列実装が、目立たない暗号化ハードウェアと同等の速度で作成されています。

最後に、このペーパーでは、CUDAが構造化グリッドと非構造化グリッド、組み合わせロジック、動的計画法、データマイニングなどの多くのアプリケーションにどの程度適用できるかを分析します。

于 2008-09-15T11:34:18.067 に答える
1

私はGPUに遺伝的アルゴリズムを実装し、約7のスピードアップを得ました。他の誰かが指摘したように、より高い数値強度でより多くのゲインが可能です。そうです、アプリケーションが正しければ、利益はそこにあります

于 2009-05-21T22:15:10.867 に答える
1

ATI Stream SDKを使用してGPUで大きな線形方程式を解くために、コレスキー分解を実装しました。私の観察は

代替テキスト

パフォーマンスが最大10倍高速化されました。

複数のGPUにスケーリングすることで、同じ問題に取り組んでさらに最適化します。

于 2009-09-09T15:25:12.497 に答える
1

私は、使用していたアプリケーションで cuBLAS 実装を約 30% 上回る複素数値行列乗算カーネルを作成しました。問題。

最終年度のプロジェクトでした。丸一年かかりました。

http://www.maths.tcd.ie/~oconbhup/Maths_Project.pdf

于 2013-02-11T22:32:00.207 に答える
0

はい。CUDA API を使用して非線形異方性拡散フィルターを実装しました。

これは、与えられた入力画像に対して並行して実行する必要があるフィルターであるため、かなり簡単です。必要なのは単純なカーネルだけだったので、これに関して多くの問題に遭遇したことはありません。スピードアップは約300倍でした。これは、CS に関する私の最後のプロジェクトでした。プロジェクトはここにあります(ポルトガル語で書かれています)。

Mumford&Shahセグメンテーション アルゴリズムも書いてみましたが、CUDA はまだ始まったばかりで、奇妙なことがたくさん起こるので、書くのは大変でした。if (false){}コード O_O にa を追加すると、パフォーマンスが向上することさえありました。

このセグメンテーション アルゴリズムの結果は良くありませんでした。CPU アプローチと比較して 20 倍のパフォーマンス損失がありました (ただし、CPU であるため、同じ結果が得られる別のアプローチを採用できます)。まだ途中ですが、残念ながら所属していた研究室を離れてしまったので、いつか完成するかもしれません。

于 2009-05-12T14:35:02.627 に答える