何が良いですか?いくつかのステップでデータを処理する必要があり、2つのオプションがあるように見えます:1)1つの大きなカーネルを使用する2)各ステップに1つのカーネルでストリームを使用する
カーネルが実行されるまでにある程度の待ち時間がありますが、この場合は本当に重要ですか?大きなカーネルのレイテンシーは、いくつかの小さなカーネルのレイテンシーの合計と同じですか?
他の方法と比較して、一方の方法に利点はありますか?
みんなありがとう。
何が良いですか?いくつかのステップでデータを処理する必要があり、2つのオプションがあるように見えます:1)1つの大きなカーネルを使用する2)各ステップに1つのカーネルでストリームを使用する
カーネルが実行されるまでにある程度の待ち時間がありますが、この場合は本当に重要ですか?大きなカーネルのレイテンシーは、いくつかの小さなカーネルのレイテンシーの合計と同じですか?
他の方法と比較して、一方の方法に利点はありますか?
みんなありがとう。
Fermiカードのカーネルの起動遅延は10usのオーダーであるため、心配する必要はありません。それは理にかなっています-ゲームでシーンをレンダリングするには、多くの異なるシェーダー(カーネル)を実行する必要があります。
カーネルは、処理するデータをグローバルメモリから読み取り、結果をグローバルメモリに書き戻す必要があります。したがって、それぞれの個別のカーネルは、完全な読み取り/書き込みサイクルを意味します。単一の読み取り/書き込みサイクルで囲まれたまま、大きなカーネルで複数のステップをチェーンできる場合は、処理を高速化できる可能性があります。
例として、操作A、B、Cを実行する必要がある場合、それらをチェーンするとREAD --A --B --C --WRITEが得られ、別々のカーネルではREAD --A --WRITE --READ --B --WRITE--READ-が得られます。 C-書き込み。
単一のカーネルを実行している場合でも、個別のステップを個別のデバイス機能に分割することで、コードを読みやすくすることができます。