問題タブ [c++-amp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C++ AMP、for ループから parallel_for_each ループへ
C++ AMP が提供する大規模な高速化を利用するために、アルゴリズムを変換しています。私がいる段階では、for ループを既知の parallel_for_each ループに入れています。
通常、これは簡単な作業ですが、最初に考えたよりも複雑に見えます。これは、反復ごとに 4 のステップを使用してインクリメントするネストされたループです。
私が抱えている問題は、インデックスの使用です。これを parallel_for_each ループに適切に適合させる方法が見つからないようです。ランク 2 のインデックスを使用するのが最善の方法ですが、分岐を介して操作すると、パフォーマンスの向上に悪影響を及ぼします。
同様の投稿を見つけました: Controlling the index variables in C++ AMP。インデックス操作についても扱っていますが、インクリメントの側面は私の問題をカバーしていません。
よろしくお願いいたします。
フォースキャスト
c++ - CPU より遅い高速 GPU を使用する C++ AMP
私は C++ AMP を学び始めたばかりで、VS 2012 RC でビルドしたサンプルをいくつか入手しましたが、GPU のパフォーマンスが CPU よりも遅いことがわかりました。たとえば、Kate Gregory による例: http://ampbook.codeplex.com/releases/view/90595 (彼女の今後の書籍http://www.gregcons.com/cppamp/に関連するもの))。それらは、私が見た講義で彼女によって実演され、そこで彼女はラップトップの GPU (彼女は 6650 だと言ったと思います) を CPU (彼女が持っていた CPU は不明) と比較して、第 4 章の例で約 5 倍のパフォーマンス向上を得ました。この例を自分でテストしてみましたが、いくつかのシステム構成 (以下を参照) で、常に CPU の方が高速であることがわかりました。他の例もテストしましたが、同じことがわかりました。私は何か間違ったことをしていますか?パフォーマンスが予想よりも遅い理由はありますか? GPUが高速であることを確実に示す例はありますか?
- システム 1: オンボード グラフィックスを搭載した Intel i7 2600K (これは遅くなると思います)
- システム 2: AMD 6770 と切り替え可能な Intel HD を搭載した Intel i7 2630QM (パフォーマンス モードで実行しているので、6770 を使用する必要があります)
- システム 3: Intel i5 750 と 2xCrossfire AMD HD 5850
結果の例: chapter4 プロジェクトは、1.15 ミリ秒の CPU、2.57 ミリ秒の GPU、2.55 ミリ秒の GPU を並べて表示します。
編集:
ああ、私はその理由を見つけたと思います-彼女が講義で使用した行列のサイズの値が異なっていました. Web サイトのサンプルでは、M=N=W=64 を使用しています。彼女が講義で行ったように 64、512、および 256 を使用すると、対応する最大 5 倍のパフォーマンス向上が得られます。
string - GPUでの文字列処理のベストプラクティスは?
GPUで数値ではなく文字列を処理するのはどれほど現実的か疑問に思いました。具体的には、C ++ AMPを使用して、文字列の配列とターゲット文字列を比較することに関心があります。
関数にを渡すなどの基本から始めましたが、 !wchar_t* strings[]
よりも小さいタイプのビューを作成することさえできないことがわかりました。int
だから私の質問は-そこにベストプラクティスはありますか、それともこれは一般的に悪い考えですか?ワープの発散などにも興味があります。たとえば、大きな配列で文字列の長さを計算するのはどれほど効率的でしょうか。
c++-amp - C++ AMP のパフォーマンスを測定中の奇妙な結果
以下に示すコードで、この timerを使用して C++ AMP 呼び出しをラップしています。残念ながら、タイマーによると、私の C++ AMP 呼び出しには約 2 秒かかります。誰かが何が悪いのかを理解するのを手伝ってくれますか?
c++ - short を int にパック/アンパック
2 つの符号付き 16 ビット整数を 32 ビット整数にパック/アンパックしたいと考えています。しかし、私はそれをうまく機能させていません。
私が間違っているかもしれないことについてのアイデアはありますか?
関数の戻り値/引数は、私が定義したとおりでなければなりません。lo
とはhi
異なるスレッド (つまり、atomic_or) から書き込まれ、読み取りは単一の 32 ビット値を返す必要があります。
16 ビット整数演算は、ターゲット プラットフォームではサポートされていません。
例:
c++ - C++ AMP の使用時に GPU ブレークポイントがヒットしない
デバッガーの種類をGPU only
に設定し、line ステートメントを含む 8 行のparallel_for_each
ラムダのすべての行にブレークポイントを設定しましたparallel_for_each
が、ヒットすることはありません。Windows 8 Pro で Visual Studio 2012 を使用しています。
ブレークポイントを機能させるには、どのような手順を実行する必要がありますか?
c++-amp - すでにアプリケーションを手動でスレッド化している場合は、C ++ AMPを使用する必要がありますか?
C++AMPが何に適しているのかわかりません。アプリケーション(この場合はレイトレーサー)をすでにマルチスレッド化してシステム上のn個のコアすべてを使用している場合、C ++ AMPを使用する必要がありますか、それとも実際にボトルネックが増えるのでしょうか?(マルチスレッド化しようとすると、すべてのCPUコアがすでに100%使用されています)
c++ - C++ AMP を使用する必要がある場合
C++ AMP を使用する必要がある (または使用しない) 場合は?
AMP のオーバーヘッドとは何ですか? データを GPU メモリにコピーして戻すのにかかる時間は? AMP がパフォーマンスを低下させ始めるときの最小データ サイズはどれくらいですか?
c++ - 制限(amp)関数のデフォルトパラメータ
次のコードはコンパイルに失敗します。エラーメッセージは次のとおりです。
エラー1:
エラー2:
エラー3:
プログラム:
不思議なことに、restrict(amp)
onを削除し、ラムダ内のfoo()
の呼び出しを、たとえば、に置き換えると、プログラムは正常にコンパイルされます。では、amp関数のデフォルト引数での関数呼び出しのルールは何ですか?f1()
5
c++ - C++ AMP が異なる次元の array_views を反復処理する
Windows 8 の Visual Studio 2012 で C++ AMP を使用していexperimentData
ますexperimentFactors
。2D array_view の最初の次元と 1D array_view の 1 次元を反復処理したいと考えています。これは私が持っているものですが、これにはオーバーロードがないというエラーが常に発生します。numberOfTests
最初の次元であるを反復処理したいと考えています。私は行が欲しいです:
データの行全体を返します。の方法はこれを行う方法だと思いますが、section
方法array_view
がわかりません。
オブジェクトはのtest
1xN セクションである必要がありますexperimentData
array_view
。オブジェクトは からのfactors
1 つのアイテムである必要がありますexperimentFactors
array_view
。
明確化
array_viewexperimentData
には M 行と N 列があります
array_viewexperimentFactors
には M 行があります