Esse é um problema de alinhamento dos processadores virtuais (VP) com os processadores físicos (PP) da GPU. Como o número de PP geralmente é uma potência de 2, o uso de um número de VP diferente de uma potência de 2 leva a um desempenho ruim.
Você pode ver o mapeamento do VP no PP como uma pilha de fatias de tamanho do número de PP .
Digamos que você tenha 16 PP.
Você pode mapear 16 VP neles: 1 VP é mapeado em 1 PP.
Você pode mapear 32 VP neles: 2 fatias de 16 VP, 1 PP será responsável por 2 VP.
Etc. Durante a execução, cada PP executará o trabalho do 1º vice-presidente pelo qual ele é responsável e, em seguida, o trabalho do 2º vice-presidente etc.
Se você usar 17 VP, cada PP executará o trabalho do seu 1º PP e, em seguida, 1 PP será executar o trabalho do dia 17 eos outros não farão nada (detalhados abaixo).
Isso se deve ao paradigma SIMD (chamado vetor nos anos 70) usado pelas GPUs. Isso geralmente é chamado de paralelismo de dados: todos os PP fazem a mesma coisa ao mesmo tempo, mas com dados diferentes. Veja https://en.wikipedia.org/wiki/SIMD .
Mais precisamente, no exemplo com 17 VP, uma vez concluído o trabalho da 1ª fatia (por todos os PPs fazendo o trabalho de seu 1º VP), todos os PP farão o mesmo trabalho (2º VP), mas apenas um tem algum dados para trabalhar .
Nada a ver com a aprendizagem. Isso é apenas coisas de programação.