タグ付けされた質問 「gpgpu」

1
OpenCLで再帰が禁止されているのはなぜですか?
レイトレースされた画像のレンダリングを高速化するためにOpenCLを使用したいのですが、WikipediaページではOpen CLでは再帰が禁止されていると主張しています。これは本当ですか?レイトレーシング時に再帰を広範囲に使用するため、高速化のメリットを享受するには、かなりの量の再設計が必要になります。再帰を防ぐ根本的な制限は何ですか?それを回避する方法はありますか?

1
連続したOpenGL Compute Shader呼び出しの同期
特定の順序で実行する必要があり、出力が以前の入力に依存するいくつかの計算シェーダーがあります。理想的には、クライアント側のバッファーをコピーしてGPUですべての作業を行う必要はありません。 私はコンパイルとリンクとして2つのコンピュートシェーダ持って考えてみましょうprogram_oneとしますprogram_two。GL_SHADER_STORAGE_BUFFERによって書き込まれprogram_one、読み取られるデータを含むを持っているとしますprogram_two。次のことができますか? glUseProgram(program_one); glBindBuffer(GL_SHADER_STORAGE_BUFFER, buffer); glBindBufferBase(GL_SHADER_STORAGE_BUFFER, index, buffer); glDispatchCompute(16, 16, 1); glUseProgram(program_two); glBindBuffer(GL_SHADER_STORAGE_BUFFER, buffer); glBindBufferBase(GL_SHADER_STORAGE_BUFFER, index, buffer); glDispatchCompute(16, 16, 1); 最初の計算シェーダーのすべての呼び出しが、2番目の呼び出しの前に完了することが保証されていますか(読み取りと書き込みの間のデータの競合を回避するためbuffer)?そうでない場合、どのようにそれらを同期しますか?

1
私のGPUは何を待っていますか?
AMD Radeon HD 7800シリーズGPUで使用するOpenCLプログラムを書いています。AMDのOpenCLプログラミングガイドによると、この世代のGPUには、非同期で動作できる2つのハードウェアキューがあります。 5.5.6コマンドキュー 南部諸島以降では、デバイスは少なくとも2つのハードウェアコンピューティングキューをサポートします。これにより、アプリケーションは、非同期送信と場合によっては実行のための2つのコマンドキューを使用して、小さなディスパッチのスループットを向上させることができます。ハードウェアコンピューティングキューは、最初のキュー=偶数OCLコマンドキュー、2番目のキュー=奇数OCLキューの順に選択されます。 これを行うために、2つのOpenCLコマンドキューを作成して、データをGPUにフィードしました。おおまかに言って、ホストスレッドで実行されるプログラムは次のようになります。 static const int kNumQueues = 2; cl_command_queue default_queue; cl_command_queue work_queue[kNumQueues]; static const int N = 256; cl_mem gl_buffers[N]; cl_event finish_events[N]; clEnqueueAcquireGLObjects(default_queue, gl_buffers, N); int queue_idx = 0; for (int i = 0; i < N; ++i) { cl_command_queue queue = work_queue[queue_idx]; cl_mem src …
11 gpgpu  opencl 

1
OpenGLテッセレーションでの頂点ごとの計算
ハードウェアテッセレーションを使用して、位置ベースのクロスシミュレーションを実装しようとしています。つまり、コントロールクワッドをグラフィックスカードにアップロードし、テッセレーションとジオメトリシェーディングを使用して、クロスにノードを作成します。 このアイデアは論文に従います: Huynh、David、「ハードウェアテセレーションを使用したクロスシミュレーション」(2011)。定説。ロチェスター工科大学 http://scholarworks.rit.edu/theses/265/ テッセレーションを使用してシミュレーションポイントを作成する方法を知っています。私が知らないのは、計算された情報をフレームバッファに格納する方法です。 ジオメトリとテッセレーション評価シェーダーには、頂点ごとの計算に必要な情報があります。しかし、フレームバッファに直接書き込むことはできますか? 私が知っているフラグメントシェーダーはフレームバッファーに書き込むことができますが、私の情報は補間され、どの位置に何を書き込むかがわかりません。

1
GPUでルックアップテーブルを使用する場合の最適なメモリアクセス
私は学士号プロジェクトのGPUの等値面アルゴリズムを調査しています(具体的には、実数値のフィールドではなく、バイナリの入出力ボクセルデータのみに集中しています)。したがって、OpenFrameworksで古き良きマーチングキューブのCPU実装があり、それをGLSLコンピューティングシェーダーに移植しようとしている段階で、潜入する前に落とし穴を考慮しています。vertシェーダーとfragシェーダーのみを記述しました以前はそれは私にとってすべて新しいものです。 私の最初の問題は、ワークグループ内の数十または数百のスレッドにわたってルックアップテーブルを効率的に使用する方法です。GPUにはさまざまなタスク用にさまざまな種類のメモリがあることを理解していますが、それぞれがどのように動作するか、どのタイプを使用するかは完全にはわかりません。 Paul Bourkeの古典的なcopypastaテーブルは256 * 16配列なので、スカラーバイトタイプを使用する場合、これはおそらく4kbテクスチャまたはSSBOにパックできます。 問題は、異なるスレッドが互いにつまずくのを防ぐ方法ですか?各ワークグループの多くのキューブは、同じ構成を持つ可能性があるため、バッファ内の同じ場所に同時にアクセスしようとします。これに対処するための回避策または最適化はありますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.