問題タブ [directcompute]

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.

0 投票する
1 に答える
242 参照

random - C++ AMP の乱数ライブラリを含むリンク エラー

CodeplexのC++ AMP tinymt ライブラリ使用して乱数を生成しています。ライブラリは正常に動作#include <amp_tinymt_rng.h>しますが、同じプロジェクト内の 2 つの異なるファイルで、特定の変数tinymt_lib::tinymt_dc_dataおよびtinymt_dc_data_32の再定義に言及するリンク エラーが発生することを除きます。

#pragma onceすべてのヘッダーで既に使用していることを考えると、この問題を解決するための良い修正は何でしょうか? Visual Studio 2013 Professional を使用しています。

副次的な提案として、特別なライブラリのオーバーヘッドなしで乱数を生成するより簡単な方法は何でしょうか? random()シーケンスが安全にランダムでないか、単純であるかrand()、十分ではないかについては心配していません。

0 投票する
1 に答える
257 参照

windows - 複数の GPU で directcompute を実行することは可能ですか?

DirectCompute に興味があります。CUDA のように、2 つの異なるグラフィックス アダプターをコンピューターに接続して、両方で同時に DirectCompute を使用することが可能かどうかを知りたいです。AI が知る限り、directcompute でコンピューター シェーダーをディスパッチするのは非同期ですが、異なるアダプターで作成された異なるデバイスにコンピューター シェーダーをディスパッチすることは可能でしょうか?

前もって感謝します!

0 投票する
1 に答える
404 参照

directx - 畳み込みフィルターが間違ったカラー値を出力する

DirectCompute の学習を始めたばかりで、学習目的で、テクスチャをぼかす単純な畳み込みフィルターを作成したいと考えています。テクスチャをぼかすために、次の計算シェーダーを作成しました。

次のパラメーターを使用して呼び出します。

このシェーダは、現在のピクセルとその 48 個の隣接ピクセルの平均カラー値を取得し、ぼかし効果を発生させます。

ぼかし部分は正常に動作するようになりましたが、シェーダーが出力する色が正しくないようです。シェーダーをテストするために、黒の背景に真っ白な形状のシンプルな画像を使用しています。私が期待する出力は、黒い背景にぼやけた純粋な白い形ですが、白い形はもはや白ではなく、灰色です。コードを何度も見直しましたが、どこに問題があるのか​​ わかりません。各テクスチャのサイズは同じ 512x512 ピクセルです。

これは私の入力画像です:

入力画像

そして、これは私が得る出力です:

出力画像

どんな助けでも大歓迎です。

ありがとう

0 投票する
1 に答える
679 参照

c++ - DX11 Compute Shader は 1 つのインデックスにのみ書き込みます

ここで何が起こっているのか本当にわかりません。

FFT の結果 (実際の入力から) を取り込み、各ビンのパワーを計算して別のバッファー (UAV) に格納する計算シェーダーがあります。FFT の実装は、D3DCSX ライブラリのものです。

問題のシェーダー:

バッファ作成コード:

ディスパッチコード:

最後に、CPU マッピング コード:

何が起こるかというと、このシェーダーはすべてのスレッドが出力バッファー内の同じインデックスに書き込むように見えるということです。マップされたバッファは常に最初のビンの正しい値を読み取り、次に他のビンごとに 0.0f を読み取ります。CPU 上の同等のコードは問題なく実行されます。奇妙なのは、条件を配置して、それbinが常に 0 であるだけでなく、ビン 0 の外側のすべてのビンのパワーも常に 0.0f ではないことを知っていることです。forループを使用して同じスレッド上の複数のビンに書き込もうとしましたが、同じことが起こります。私は何を間違っていますか?

問題の根底にあるのは、バッファ作成コードまたはマッピング コードであるという予感があります。GPU で正しい数のスレッドを実行していて、ディスパッチ ID が正しいことはわかっています。間違っているのは CPU 側の結果です。

0 投票する
0 に答える
196 参照

directcompute - 計算シェーダーの DispatchThreadID に関する質問はありますか?

最初の質問:

このコードでは、x のスレッド 17 と y のスレッド 17 のように、 と は同じ値ですかDispatchThreadID.x?DispatchThreadID.y

2 番目の質問:

これ書いてもいいですか?

はいまたはいいえで十分ですが、いいえの場合はその理由を簡単に説明してください。

0 投票する
1 に答える
7383 参照

c++ - DirectX 11 - コンピューティング シェーダー: 出力リソースへの書き込み

DirectX 11 で Compute シェーダー ステージを使い始めたばかりですが、Compute シェーダーで出力リソースに書き込むときに望ましくない動作に遭遇しました。私の理解では、アウト オブ バウンドの読み取りが Compute シェーダーで実行されたことを意味します。(範囲外の書き込みは no-ops になります)

Compute シェーダー コンポーネントの作成

入力リソース

まずID3D11Buffer*、入力データ用を作成します。これは、Compute シェーダー ステージへの入力に使用される SRV を作成するときに、リソースとして渡されます。入力データが変更されない場合、ID3D11Buffer*SRV はリソースへのハンドルとして機能するため、SRV の作成後にオブジェクトを解放できます。

ただし、フレームごとに入力データを更新したいので、マッピングのためにバッファを自由に使用できるようにします。


新しく作成されたバッファーをリソースとして使用して SRV を作成する


出力リソース

ここで、Compute シェーダーが書き込むリソースを作成する必要があります。また、読み取るバッファのシステム メモリ バージョンも作成します。ID3D11DeviceContext::CopyResource メソッドを使用して、UAV に接続された Compute シェーダー出力バッファーからシステム メモリ バージョンにデータをコピーして、マッピングを実行し、その内容をシステム メモリに保存します。

計算シェーダーが書き込み可能な読み取り/書き込みバッファーを作成する


結果を読み戻すバッファのシステム メモリ バージョンを作成します。


計算シェーダーが結果を書き込むための UAV を作成する


計算シェーダーの実行 (各フレーム)

C++


HLSL

この質問の内容の量について申し訳ありません。概要を把握しやすいように、慎重に構成しました。

シェーダーに渡される要素の数は 32 です。

私の問題に関する提案はありますか?ありがとうございました!

0 投票する
1 に答える
1936 参照

c++ - DirectX 11 - Compute Shader、GPU から CPU へのデータのコピー

取り組んでいる流体シミュレーションを GPU に移行するために、ダイレクト コンピューティングの使用を開始したところです。ここで非常によく似た(同一ではないにしても)質問を見つけましたが、私の問題の解決策は彼らのものと同じではないようです。私は自分の CopyResource を確実に正しい方法で持っています! 貼り付けた質問と同様に、GPU からコピーしたときに 0 で満たされたバッファーしか取得しません。範囲外の制限に到達する方法がわからないため、エラーが実際に表示されません。大量のコードの貼り付けが発生することをお詫びしますが、セットアップが間違っていないことを確認したいと思います。

出力バッファ、UAV、およびシステム バッファのセットアップ

フレーム ループでシェーダーを実行する

HLSL

フレームを開始した後、フレームを終了する前に Compute シェーダーをディスパッチします。シェーダー ディスパッチ コールを終了シーンの外で現在の ect の前に移動して遊んでみましたが、プロセスに影響はないようです。これを理解できないようです!