O tutorial do subgrupo Vulkan menciona:
Se você especificar um tamanho de grupo de trabalho menor que o tamanho do subgrupo, será garantido que haverá invocações inativas no subgrupo.
Agora suponha que você tenha um maxComputeWorkGroupSize de 1024 e um subGroupSize de 64. Se quiser aplicar um filtro a uma imagem, provavelmente optaria por uma invocação 2D. Portanto, você acabaria com um tamanho de grupo de trabalho de 32, já que 32 * 32 * 1 = 1024. Agora o tamanho do seu grupo de trabalho é menor que o tamanho do seu subgrupo.
Portanto, minha pergunta é: seria preferível usar um tamanho de grupo de trabalho 1D de 64 (e extrair as respectivas coordenadas xey do agora "maior" GlobalInvocationID.x)?
maxComputeWorkGroupSize
é dimensional; nãosubGroupSize
é . O último é uma contagem fixa de invocações. Ele não se importa com a organização dessas invocações em um grupo de trabalho.A forma como um grupo de trabalho multidimensional é dividido em subgrupos é definida pela implementação. No seu caso, a implementação poderia colocar todas as invocações 32x2 no grupo de trabalho no mesmo subgrupo. Mas também poderia dividir por 2x32. Ou cada bloco 8x8. Ou alguma outra coisa.