1

CUDA Kepler GTX680 でボリューム レイ キャスティング アルゴリズムを作成しています。このアルゴリズムはレジスターを集中的に使用するため、レジスターのスピルが高くなるか、最大占有率の 50% が発生します。スループットを改善するために推奨される方法は、命令レベルの並列処理をサポートするように命令を並べることです。

アーキテクチャの最大スループットを達成するには、さまざまなパイプラインをビジー状態に保つ必要があります。算術ユニットのパイプの長さは cca です。したがって、完全なスループットを達成するには、各クロック サイクルで新しい算術演算をスケジュールする必要があります。ワープのスワップ (データの依存関係が満たされていないために 1 つのワープを非アクティブ化し、実行する準備ができている別のワープをアクティブ化する) は、演算装置のパイプラインに影響を与えないことを期待しています。したがって、CUDA アーキテクチャは、メモリ レイテンシを隠すのと同じ方法で複数のワープをスワップすることにより、命令の依存関係の一部を効果的に隠していると思います。この仮定は正しいですか?

命令フェッチとデコードはパイプライン化されていますか? パイプラインの長さは?データの依存関係が満たされていないために現在のワープがスワップアウトされた場合に備えて、命令パイプラインがフラッシュされると思います。したがって、ワープのスワップは完全に無料ではありませんよね? 分岐は命令処理にどのように影響しますか? 分岐命令は、分岐条件が評価されるまで命令パイプラインを停止する必要があると思います。これにより、述語評価が分岐よりも安価になるようです。そうですか?

Kepler GK104/110 アーキテクチャの命令キャッシュはどのくらいの大きさで、どのように構成されていますか? 複雑なカーネルの場合、命令フェッチの速度がボトルネックになるのでしょうか?

私が言及した領域のいずれかに光を当てる可能性のある参照に感謝します. NVidia は多数の PowerPoint 箇条書きプレゼンテーションを作成しましたが、それらは口頭プレゼンテーションを補足するものとしてのみ役立ちます。

4

1 に答える 1

3

質問ごとに 1 つの質問をするのが最善です。

したがって、CUDA アーキテクチャは、メモリ レイテンシを隠すのと同じ方法で複数のワープをスワップすることにより、命令の依存関係の一部を効果的に隠していると思います。この仮定は正しいですか?

はい、あらゆるタイプのレイテンシを隠すためのマシンの主なメカニズムは、同じまたは異なるブロックから実行する準備ができている複数のワープを持つことです。

したがって、ワープの交換は完全に無料ではありませんよね?(複数の質問をこれにまとめます)

いいえ、ワープの交換はゼロ コストです。最初のポイント (レイテンシの隠蔽) はこれに依存します。ここのCプログラミングガイドから:

マルチプロセッサによって処理される各ワープの実行コンテキスト (プログラム カウンター、レジスタなど) は、ワープの存続期間全体にわたってオンチップで維持されます。したがって、ある実行コンテキストから別の実行コンテキストへの切り替えにはコストがかかりません。命令発行のたびに、ワープ スケジューラは、次の命令を実行する準備ができているスレッド (ワープのアクティブなスレッド) を持つワープを選択し、それらのスレッドに命令を発行します。 .

一般的なアーキテクチャの理解には、Fermiホワイトペーパー、Kepler GK104 (GTX680)ホワイトペーパー、および Kepler GK110ホワイトペーパーをお勧めします。

于 2013-03-03T15:22:29.717 に答える