CUDA Kepler GTX680 でボリューム レイ キャスティング アルゴリズムを作成しています。このアルゴリズムはレジスターを集中的に使用するため、レジスターのスピルが高くなるか、最大占有率の 50% が発生します。スループットを改善するために推奨される方法は、命令レベルの並列処理をサポートするように命令を並べることです。
アーキテクチャの最大スループットを達成するには、さまざまなパイプラインをビジー状態に保つ必要があります。算術ユニットのパイプの長さは cca です。したがって、完全なスループットを達成するには、各クロック サイクルで新しい算術演算をスケジュールする必要があります。ワープのスワップ (データの依存関係が満たされていないために 1 つのワープを非アクティブ化し、実行する準備ができている別のワープをアクティブ化する) は、演算装置のパイプラインに影響を与えないことを期待しています。したがって、CUDA アーキテクチャは、メモリ レイテンシを隠すのと同じ方法で複数のワープをスワップすることにより、命令の依存関係の一部を効果的に隠していると思います。この仮定は正しいですか?
命令フェッチとデコードはパイプライン化されていますか? パイプラインの長さは?データの依存関係が満たされていないために現在のワープがスワップアウトされた場合に備えて、命令パイプラインがフラッシュされると思います。したがって、ワープのスワップは完全に無料ではありませんよね? 分岐は命令処理にどのように影響しますか? 分岐命令は、分岐条件が評価されるまで命令パイプラインを停止する必要があると思います。これにより、述語評価が分岐よりも安価になるようです。そうですか?
Kepler GK104/110 アーキテクチャの命令キャッシュはどのくらいの大きさで、どのように構成されていますか? 複雑なカーネルの場合、命令フェッチの速度がボトルネックになるのでしょうか?
私が言及した領域のいずれかに光を当てる可能性のある参照に感謝します. NVidia は多数の PowerPoint 箇条書きプレゼンテーションを作成しましたが、それらは口頭プレゼンテーションを補足するものとしてのみ役立ちます。