Este es un problema de alineación de los procesadores virtuales (VP) en los procesadores físicos (PP) de la GPU. Dado que el número de PP es a menudo una potencia de 2, el uso de un número de VP diferente de una potencia de 2 conduce a un bajo rendimiento.
Puede ver el mapeo del VP en el PP como una pila de cortes del tamaño del número de PP .
Digamos que tienes 16 PP.
Puede asignar 16 VP en ellos: 1 VP se asigna a 1 PP.
Puede asignar 32 VP en ellos: 2 rebanadas de 16 VP, 1 PP será responsable de 2 VP.
Etc. Durante la ejecución, cada PP ejecutará el trabajo del 1er VP del que es responsable, luego el trabajo del 2do VP, etc.
Si usa 17 VP, cada PP ejecutará el trabajo de su 1er PP, luego 1 PP ejecutar el trabajo del 17 ylos otros no harán nada (se detalla a continuación).
Esto se debe al paradigma SIMD (llamado vector en los años 70) utilizado por las GPU. Esto a menudo se llama Paralelismo de datos: todos los PP hacen lo mismo al mismo tiempo pero con datos diferentes. Ver https://en.wikipedia.org/wiki/SIMD .
Más precisamente, en el ejemplo con 17 VP, una vez que el trabajo de la primera porción está hecho (por todos los PP que hacen el trabajo de su 1er VP), todos los PP harán el mismo trabajo (2do VP), pero solo uno tiene datos para trabajar .
Nada que ver con el aprendizaje. Esto es solo material de programación.