ここで考慮すべき点がいくつかあります。
2つが互いにどのように影響するかを知る方法はありますか?
直接的にはいいえですが、間接的にはそうです。WPF と AMP の両方がレンダリングに GPU を利用しています。アプリケーションの AMP 部分が GPU のリソースを使いすぎると、フレーム レートに干渉します。C++ AMP ブックのCartoonizer のケース スタディでは、 MFC と C++ AMP を使用して、説明したとおりに実行します。画像処理の負荷が高い低速のハードウェアでは、アプリケーションの応答性が低下することがわかります。ただし、ほとんどの場合、GPU で画像を漫画化する方がはるかに高速で、ビデオ フレーム レートを達成できます。
うまくいけば素晴らしいスピードアップが見られるかどうか疑問に思っています
どの GPU アプリケーションでも、パフォーマンスの向上を確認するための鍵は、CPU ではなく GPU で計算を実行することによるスピードアップが、GPU との間でデータをコピーする追加のオーバーヘッドを補う必要があるということです。
この場合、ネイティブ (C++ AMP) からマネージド (WPF) 環境にデータをマーシャリングする必要があるため、追加のオーバーヘッドがあります。データ型が blitable であり、明示的なマーシャリングを必要としないことを確認して、これを効率的に行うように注意する必要があります。WPF とネイティブ コードを使用したN 体モデリング アプリケーションを実装しました。
理想的には、GPU 計算の結果を CPU 経由で移動せずにレンダリングする必要があります。これは可能ですが、明示的に WPF を使用する場合はできません。N-body の例では、DirectX レンダー エリアを WPF に直接埋め込み、AMP 配列から直接データをレンダリングすることでこれを実現しています。これは主に、WPF viewport3D が私のパフォーマンス ニーズを実際に満たしていなかったためです。イメージのレンダリングには WPF が適している場合があります。
VS 2013 で状況が変わっていない限り、C++/CLI プロジェクトでネイティブ コードを使用する場合にはいくつかの制限があるため、C++ AMP コードを別の DLL に入れる必要があります。
@stijn が提案するように、小さなプロトタイプを作成して、計算の一部を GPU に移動することで得られる利益が、GPU との間だけでなく WPF にもデータを移動するオーバーヘッドのために失われないようにします。