私は最近、計算シェーダーで遊んでいて、[numthreads(x,y,z)] をセットアップして呼び出しをディスパッチするための最適な方法を決定しようとしています。私のデモ ウィンドウは 800x600 で、ピクセルごとに 1 つのスレッドを起動しています。2D テクスチャの修正を行っています - 重すぎることはありません。
私の最初の試みは指定することでした
[numthreads(32,32,1)]
私の Dispatch() 呼び出しは常に
Dispatch(ceil(screenWidth/numThreads.x),ceil(screenHeight/numThreads.y),1)
したがって、最初のインスタンスは
Dispatch(25,19,1)
これは 25 ~ 26 fps で実行されました。次に、16 fps で実行される [numthreads(4,4,1)] に減らしました。それを [numthreads(16,16,1)] に増やすと、約 30 fps の優れた結果が得られ始めました。Y スレッド グループ番号 [numthreads(16,8,1)] をいじって、なんとか 32 fps に押し上げました。
私の質問は、GPU を最も効果的に利用できるようにスレッド数を決定する最適な方法はありますか、それとも古き良き試行錯誤ですか?