D3D11X_SHADER_CS_SIMD_WALK_ALGORITHM Enumeration

Defines how to walk the SIMDs across CUs.

Syntax

enum D3D11X_SHADER_CS_SIMD_WALK_ALGORITHM
{
    D3D11X_SHADER_CS_SIMD_WALK_ALGORITHM_DEFAULT = 0,
    D3D11X_SHADER_CS_SIMD_WALK_ALGORITHM_GLOBAL_BALANCED = 1,
    D3D11X_SHADER_CS_SIMD_WALK_ALGORITHM_GLOBAL_STRICT = 2,
    D3D11X_SHADER_CS_SIMD_WALK_ALGORITHM_PER_CU = 3
};  

Constants

Constant Description
D3D11X_SHADER_CS_SIMD_WALK_ALGORITHM_DEFAULT Default.
D3D11X_SHADER_CS_SIMD_WALK_ALGORITHM_GLOBAL_BALANCED Walk the SIMDs across CUs but maintaining a balanced distribution per CU. SIMD rotation happens across CUs. So if one threadgroup launches on CU(0) SIMDs(0,1,2), the next threadgroup will launch on CU(1) SIMDs(3,0,1). However, when the GPU gets all the way back to CU(0), it might adjust the first SIMD to use, to even out the load within the CU. This is best for ALU-heavy shaders.
D3D11X_SHADER_CS_SIMD_WALK_ALGORITHM_GLOBAL_STRICT Walk the SIMDs across CUs disregarding wave distribution within each CU. SIMD rotation happens across CUs, just like “GLOBAL_BALANCED”. But the GPU won’t adjust the SIMD used when coming back to the first CU. This is best for fetch-heavy shaders, because even distribution per SE becomes more important than even distribution per CU.
D3D11X_SHADER_CS_SIMD_WALK_ALGORITHM_PER_CU Walk SIMDs independently for each CU. SIMD rotation happens independently for each CU.

Remarks

For shaders with 4 waves per threadgroup, the distinction between balanced and strict, or per-CU vanishes.

Requirements

Header: Declared in d3d11_x.h.