私は gpgpu コンピューティング シェーダーを最もひどいスタイル (つまり、1 つのモノリシック プロシージャのみ) で作成してきました。問題は、このようではない仮想コードを読んだことがないことだと思うので、誰かがスタイルを学ぶためのコードを教えてくれることを望んでいました.
私はより機能的なスタイルでプログラミングすることを望んでおり (並列削減、バタフライなど)、マクロを使用して何かを達成できるかどうか疑問に思っていました。(スキャンは gpgpu のプリミティブであると想定されています)
私が探しているものは次のとおりです。
- hlsli インクルード ファイルを使用して、重複を防ぎます。
- グループ共有メモリのキャスティング。最初は c 配列を適切にキャストできなかったのであきらめました。
groupshared uint4 UInt4Array[4];
void main(...)
{
float Float1Array[16] = (float[16])UInt4Array;
}
- 出力パラメーターを介したグループ共有メモリーへの書き込み。
void square(float input, out float ans)
{
ans = input*input
}
groupshared float shared[THREAD_GROUP_LENGTH];
numthreads(THREAD_GROUP_LENGTH, 1, 1)]
void main(uint3 position : SV_DispatchThreadID)
{
square(position.x, shared[position.x])
}
また、誰かがこれらのようなスタイルのヒントを持っている場合は、投稿してください.