非常に小さいサイズの行列(サイズ - 10x10)にベクトルを何倍か50000〜100000倍(それ以上でもかまいません)しなければなりません。これは1000個の異なる行列で起こります(はるかに多いかもしれません)。 CUDAでこの操作を行うことで、パフォーマンスが大幅に向上しますか?ここでCUDAを使うべきですか?
答えて
はい、これはGPUにとって理想的な作業です。
単一の行列にベクトルを50K倍乗算し、各乗算が前提条件となる場合は、CUDAを使用しないでください。これはシリアルの問題で、CPUに最適なスイートです。ただし、各乗算が独立している場合は、CUDAで同時に乗算することができます。
プログラムが非常に高速化する唯一のケースは、各ベクトル乗算の反復が他の反復のデータとは独立している場合です。これにより、同じ数のスレッドを起動することで、50K回以上の繰り返しを同時に開始することができます。
行列の乗算は結合的です。 –
これはdownvote IMOに値するものではありませんでした。 Jawadは、 "もし"と言った。私は自分の答えで、BLAS型のベクトル行列の乗算についての質問であると仮定しました。もちろん、実際には、同じベクトルで50k回行列を掛ける必要がある場合は、ベクトルの指数関数を取得して1回の乗算を行うことができます。 –
正確に何をしているのかによって、これはGPU上で非常に速く行うことができますが、自分のカーネルを使ってパフォーマンスを向上させる必要があります。
あなたの問題について詳しく知りませんが、あまりにも多くのアドバイスをすることはできません。しかし、私は解を推測することができます:
ベクトルを1つ取り、それを同じ行列で数千倍にすると、閉じた行列の形を任意の力で見つける方がはるかに良いでしょう。これは、Cayley-Hamilton定理またはJordan正規形式を使用して行うことができます。
私は速いグーグル・グーグルからこの実装を見つけることはできませんが、私は初年度の線形代数でこれを行ったと考えても、それほど悪くはありません。ヨルダンの正規形に関するいくつかの情報は、それを力に上げることはhttp://en.wikipedia.org/wiki/Jordan_normal_form#Powersにあり、その変換行列は単なる固有ベクトルの行列とその行列の逆行列です。
を使用すると、行列Aを有し、そしてあなたがジョルダン標準形のJを見つけると言う、そして変換がP、P^-1行列は、
A^N = PJ^N P^-1
を見つけます。私はこの実装に適したリンクを見つけることはできませんが、10x10の行列の閉じた形式の計算は、50,000の行列の乗算よりも大幅に時間がかかりません。そして、これはおそらくCPU上でより速く実行されます。
これが問題ならば、これを調べる必要があります。
- 1. ここではどのイベントを使うべきですか?
- 2. 私は&&または||を使うべきですか?ここで
- 3. 私はここでどのデザインパターンを使うべきですか
- 4. CUDA cutil.hここはどこですか?
- 5. clojureでどこでdefrecordを使うべきですか?
- 6. どこでstd ::とboost :: prefixesを使うべきですか?
- 7. WatiN DomContainerクラスはどこで使うべきですか?
- 8. どこでデータベースを使うべきですか?また、mysqlのどこでテーブルを使用しますか?
- 9. ここで.setAdapterを使うべきですか?/ListActivityを拡張しない方法はどうですか?
- 10. これはUmbracoを使うべきですか?
- 11. cudaデバイスを使用せずにcudaプログラムをコンパイルすることはできますか?
- 12. CUDA:グローバルメモリ合体があるかどうか調べることはできますか?
- 13. アプリケーションを終了するにはどこでfinish()を使うべきですか?
- 14. Java:このシナリオでマルチスレッドを使用すべきですか?
- 15. ので、ここで私は何をすべきか、パラメータ
- 16. * shared_ptrを使って*これを返すべきですか?
- 17. setUpClassはいつ使うべきですか?__init__を使うべきですか?
- 18. これに対してキューを使用すべきですか?
- 19. これにフィールドセットを使用すべきですか?
- 20. これにはBlazeDSを使用すべきですか?
- 21. 私のサーバー側のGUIはどこですか?(pyqtを使って)スレッドを使うべきでしょうか?
- 22. lxml.etreeの逆ツリートラバーサルをどこで調べるべきですか?
- 23. このような状況でgotoを使うことができますか?
- 24. どこからCUDA SDKをダウンロードするのですか
- 25. LINQで式をどこで使うことができますか?
- 26. Sqliteでこのクエリをどのように行うべきですか?
- 27. このクエリはどのように書くべきですか?
- 28. これは悪いようです。これはどのように行うべきですか? Asp.Net MVCとドロップダウン
- 29. オブジェクト指向プログラミングにCUDA Cを使用することは可能ですか?
- 30. WCFデュプレックスサービスでSignalRを使用することを検討すべきですか?
複数のgemv操作を同時に実行できますか?これは、GPUが何らかの利益をもたらすかどうかを知るための鍵となります。 – talonmies