意味のあるダイレクト/コンピューティング/コピーキューはいくつありますか?


11

DirectX 12は、グラフィックス(「Direct」と呼ばれます)、計算、またはコピータスクのいずれかのコマンドキューを公開します。提供される機能に関しては、それぞれが次の機能のスーパーセットです。この仕様では、コマンドキューはデバイスで同時に実行できると記載されています。ただし、APIはコマンドキューの数を決して制限しません(少なくとも、私は制限を認識していません)。

どうやら、さまざまなベンダーがこれを非常に異なって処理します:

  • Intelは最近のプレゼンテーション(スライド23)で、現在GPUはグラフィックスとコンピューティングを並行して処理することができず、コピーエンジンのスループットが弱いと述べています。彼らは、複数のグラフィックス/計算キューの使用を推奨していません。
  • AMDは、Mantleと現在のgenコンソールから始まるキュー/「非同期シェーダー」の使用を宣伝するためにずっと前に始めました。また、計算タスクとグラフィックスタスクを並行して実行することで大幅なパフォーマンスの向上を確認する開発者()もいます。
  • 最近、ハードウェアでNvidiaが非同期シェーダーをサポートしていないという大騒ぎがありました。一度に個別のグラフィックスキューと計算キューを使用すると、動作が遅くなり、ドライバーのエミュレーションを示しています。一方、並行コピー操作は非常に長い間CUDAによってサポートされており、DMAエンジンが独立して動作できることは明らかです。

CommandListを1つではなく複数のCommandQueueにコミットすることが意味があるかどうかを実行時に決定する方法はありますか?(前者のケースにはエンジニアリングのオーバーヘッドがあまりないことを前提とする)

メモリー操作を計算/グラフィックス操作と並行して実行することがどのように役立つかは簡単にわかりますが、複数の計算とグラフィックスプロセスを並行して実行することは不必要に複雑であると思います(大きなパフォーマンス上の利点がない限り)。また、これがどのようにしてパフォーマンスを大幅に向上させることができるかについても、私には明らかではありません。多くの小さな順次タスクが十分なGPU負荷を生成できない病理学的な場合を除きます。


1
現時点では、誰がGPUを作成するかを確認する以外に、そのような判断を下す意味のある方法はないと思います。結局のところ、「ハードウェアが複数のキューから同時にコマンドを実行できる」以外にも多くの要素があり、D3D12はそれらの詳細を抽象化します。実際、D3D12は、キューを同時に実行する可能性のあるハードウェアと、順次実行する可能性のあるハードウェアを区別していません。ドキュメントでは、抽象化により同時実行が可能であると述べています
MJP、2015

1
良い質問 !また、計算とシェーディングを同時に実行するためにパフォーマンスを向上させることは特別だと思います。ハイパースレッディングをいくらか高速にする同じ事実のおかげで、おそらく利益が発生する可能性があります。一部のユニットが他のキューでビジー状態のときのインターリーブ操作。コンピューティングステージでは使用されないテクスチャユニットを詰まらせるシェーダーのように、それ自体がFPUまたはDPUを詰まらせます。
v.oddou 2015

残念です。おそらく、「GPUの作成者を確認することは別として」は、GPUにそれ以上ない場合はすでに回答としてカウントされます。これらすべてのAMDマーケティング資料を読んだ後、混乱しているのは私だけではないことを聞いてうれしく思います。
Wumpf、2015

1
この問題の重要性(実際にはUNimportance)を少し重視するだけで十分です。PS4 SDKには、キュー0以外のキューへの発行を許可しないバグがあります。それが非常に重要であった場合、より速く修正されたと思います。
v.oddou

回答:


1

実際のプラットフォームをテストするベンチマークシーケンスでアプリケーションを出荷します。(私が推測する多くの質問に対する可能な答え...)

パフォーマンスはハードウェアの使い方に大きく依存していると思います。ハードウェアが何らかの方法でアプリケーションを逆にインストルメント化して、何をすべきかを指示することはほとんどないので、デザインの見栄えの良いものを使用します。

「...コマンドキューはデバイスで同時に実行できます...」

キーワードはCANです。ベンダーがこれを台無しにする理由は見当たらない。結局のところ、ベンダーの切り替えを考慮しないように十分なドライバーを提供するのは、プラットフォームプロバイダー(Intel / AMD / Nvidia)です。この機能に「既知の問題」がある場合(ちなみにこれは機能的な意味はなく、パフォーマンスのみです)、彼らまた、彼らが知っていることを使用してそれを解決する必要があります。大声で叫ぶことを意味しますが、フォールバックはすでに実装されています。同期実行。

ハードウェアは私たちの開発者にとって十分なブードゥーです。


AMDのGCNは、グラフィックスキューで両方が発行された場合でも、グラフィックスとコンピューティングを同時に実行しますが、通常、複数のコマンドバッファーでは実行されません(複数の描画呼び出しは大まかな場合もあります)。ドライバー(またはアプリケーション-私はDX12またはVulkanで考える)は、データの依存関係をチェックし、必要に応じて描画(グラフィック)とディスパッチ(計算)の間をブロックする必要があります。複数のコマンドキューは、グラフィックス(次のフレームの物理演算など)から完全に非同期の計算を行う場合におそらく役立ちますが、これに関する直接の経験はありません。
Daniel M Gessel 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.