問題タブ [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 で並列化されたいくつかの算術演算
C++Amp を使用して畳み込みフィルターを並列化しようとしています。次の関数が機能するようにしたいと思います (適切に実行する方法がわかりません)。
}
主な問題は、ピクセル構造を適切に使用する方法がわからないことです ( 16 個の要素すべてが必要ないため、ここで使用する同時データ構造はどれですか)。この方法で値を安全に追加できるかどうかはわかりません。次のコードは機能しません。ピクセル [0] に適切な値が追加されません。私も定義したいと思います
メソッドの外側 (ヘッダー ファイルなど) に置き、コストラクタまたはその他の関数で初期化します (これはボトルネックであり、CPU と GPU の間でデータをコピーするのに多くの時間がかかるため)。誰もこれを行う方法を知っていますか?
c++ - C++Amp でのポインターの使用
次の問題があります。
非常に基本的な操作を行うコードがあります。マルチスレッドを使用する関数のボトルネックを回避するために、以前に値を格納したかったため、concurrency::array_view へのポインターを渡しています。問題は、次の構造がコンパイルされないことです。
このケースを解決する方法を知っている人はいますか?メソッドを実行する前にデータを準備する必要があるため、RAM とアクセラレータのメモリ間でデータをコピーするのに時間を費やす余裕がないため、このようにする唯一の方法です。
//編集:
ヘッダー ファイルに関するいくつかの問題を解決した後、次の問題が残ります。
上記のコードは機能しません (例外が発生します)。たとえば、クラスのコンストラクターが一度だけコピーを処理できるように、以前にデータを準備する方法はありますか? ヘッダー ファイルに array_view へのポインターが必要であり、次のようにコンストラクターで初期化する必要があります。
cci_subset.h:
そして、subset.cpp で:
//編集 2:
parallel_for_each のパラメーターは、値でのみ渡すことができることがわかりました。そのため、クラスを初期化するとき、またはいくつかの引数 (画像データなど) をクラスに渡すときに、CPU から GPU に値をコピーする方法をまだ探しています。
multithreading - OpenCL/C++Amp での GPU メモリへのアクセス
ユニファイド シェーダー アレイが GPU メモリにアクセスする方法に関する情報を見つけて、それを効果的に使用する方法を理解する必要があります。私のグラフィックス カードのアーキテクチャのイメージでは、はっきりとはわかりません。
C++Amp を使用して大きな画像を GPU メモリにロードし、それを小さな断片 (4x4 ピクセルなど) に分割する必要があります。すべてのピースは、異なるスレッドで計算する必要があります。スレッドが画像へのアクセスを共有する方法がわかりません。
イメージへのアクセス中にスレッドが互いにブロックされないようにする方法はありますか? 排他的にアクセスできる独自のメモリを持っているのでしょうか?
それとも、ユニファイド メモリへのアクセスが非常に高速であるため、気にする必要がないのでしょうか (ただし、私はそれを信じていません)。画像ごとに約 10,000 のサブセットを計算する必要があるため、これは非常に重要です。
multithreading - C++ AMP の 1D および 2D 配列に対する operator[] の動作。
C++Amp でコードを書いているときに、非常に奇妙な例外が発生しました。次のように 2 つの concurrency::array オブジェクトを定義します。
それらの最初の要素にアクセスしたいとき
すべてが正常に動作しますが、2 番目のものにアクセスしたい場合
次の例外が発生します。
例外: (アレイは CPU でアクセスできません)
2次元以上の配列にアクセスでき、1次元配列のみにアクセスすることは禁止されているため、これは非常に奇妙な状況ですか? 何か案は?
multithreading - C++AMP での関数の定義
特定の関数を使用してピクセルの正確な出力色を決定する畳み込みフィルターを作成しようとしています。parallel_for_each
ブロックで使用できる関数を定義できるかどうかは誰にもわかりませんか?
c++ - MSVC++ 2012 で C++Amp を使用してプログラムをライブラリにリンクすると、シンボルが解決されない
次の問題を解決しようとしています: C++Amp を使用するライブラリを持っています。ライブラリは警告なしでコンパイルされ、単体テストはすべてが機能していることを示しています。このライブラリの GUI である QT ベースのプロジェクトがあり、ここで問題が始まります。GUI をコンパイルするたびに、リンク段階で次のエラーが発生します。
widgets.obj : エラー LNK2019: 未解決の外部シンボル "__declspec(dllimport) プライベート: unsigned short const * __cdecl Concurrency::accelerator::_Get_device_path(void)const" (_ imp ?_Get_device_path@accelerator@Concurrency@@AEBAPEBGXZ) が関数で参照されています"void __cdecl `public: static class std::_Future_error_category std::_Future_error_object::_Future_object''(void) の動的イニシャライザ" (??__E?_Future_object@?$_Future_error_object@H@std@@2V_Future_error_category@2@A @@YAXXZ)
ライブラリは、dll ではなく、lib ファイルにリンクされています。
プロジェクト内の他のオブジェクト ファイルについても同じことが言えます。C++Amp を使用しているときに、リンク段階で同様の問題が発生した人はいますか。解決するのは非常に簡単な問題だと確信していますが、現時点ではどうすれば解決できるのかわかりません。前もって感謝します。
更新: MSVC++ の QT プロジェクトに含めようとすると、同じことが起こります。
c++ - 原子値の変更に対処する方法
データの入力ベクトルに基づいていくつかの計算を行う簡単なコードを書きたかったのです。値を 1 つだけ返す必要があります。これを達成する方法がわかりません。どのように動作するかを確認する簡単なテストを書いたところ、コンパイル エラーが発生しました。コードは次のとおりです。
このコードをコンパイルしようとすると、次のエラーが発生します。
エラー C3590: 'sum': ラムダが amp 制限されている場合、参照によるキャプチャまたは 'this' キャプチャはサポートされません エラー C3581: 'cci::Subset::parallel_tests::': amp 制限されたコードでサポートされていない型です