Confuso sobre a GPU ter centenas de processadores dentro dela

4

Eu comecei a aprender sobre o curso de programação paralela em Udacity e já estou meio confuso. Aqui neste segmento de vídeo: link

Dizem que a GPU média tem milhares de ALUs e centenas de processadores. Estou confuso com a parte "centenas de processadores". Por que existem tantos? Não deveria ser apenas um ...? A GPU representa a unidade do processador gráfico. Não é uma GPU como uma CPU, um processador com milhares de ALUs dentro, MAS inteiramente especializado para certas tarefas? Como esses "processadores" entram em ação?

Se eu estiver errado, então eu suponho que cada processador tem talvez cerca de 10 (porque 10 * cem CPUs = 1000s de ALUs) dentro da ALU? Existe um layout que eu possa ver para que eu possa verificar isso?

Obrigado.

    
por Arrow 16.06.2015 / 07:11

5 respostas

4

Um processador gráfico moderno é um dispositivo altamente complexo e pode ter milhares de núcleos de processamento. A Nvidia GTX 970 por exemplo tem 1664 núcleos. Esses núcleos são agrupados em lotes que funcionam juntos.

Para uma placa Nvidia, os núcleos são agrupados em lotes de 16 ou 32, dependendo da arquitetura subjacente ( Kepler ou Fermi) e cada núcleo naquele lote executaria a mesma tarefa.

A distinção entre um lote e um núcleo é importante porque, embora cada núcleo de um lote deva executar a mesma tarefa, seu conjunto de dados pode ser separado.

Sua unidade central de processamento é grande e tem apenas alguns núcleos, pois é um processador altamente generalizado, capaz de tomar decisões em larga escala e controlar o fluxo. A placa gráfica evita uma grande quantidade de controle e lógica de comutação em favor da capacidade de executar um grande número de tarefas em paralelo.

Se você insistir em ter uma foto para provar isso, a imagem abaixo (de GTX 660Ti Direta CU II TOP revisão ) mostra 5 áreas verdes que são muito semelhantes e conteriam várias centenas de núcleos cada para um total de 1344 núcleos ativos divididos entre o que parece ser 15 blocos funcionais:

Olhandodepertocadablocopareceter4conjuntosdelógicadecontrolenolado,sugerindoquecadaumdos15blocosmaioresquevocêpodevertem4unidadesSMX.

Issonosdá15*4blocosdeprocessamento(60)com32núcleoscadaparaumtotalcompletode1920núcleos,lotesdelesserãodesativadosporqueelesnãofuncionaramcorretamenteousimplesmenteparafacilitarsuaseparaçãoemdiferentesgruposdedesempenho.Issonosdariaonúmerocorretodenúcleosativos.

UmaboafontedeinformaçõessobreomapeamentodoslotesénoStackOverflow: link

    
por 16.06.2015 / 08:31
8

As CPUs são SISD , as GPUs são SIMD .

SISD é um acrônimo para Single Instruction, Single Data. As CPUs são boas na execução de operações sequenciais: pegue isso, faça isso, mova-o para lá, pegue outro, adicione os dois juntos, grave em um dispositivo, leia resposta e assim por diante. Eles executam principalmente operações simples que usam um ou dois valores e retornam um valor.

SIMD é Instrução Única, Dados Múltiplos: a mesma operação é executada em vários conjuntos de dados simultaneamente. Por exemplo, tome 128 valores X 1 -X 128 , obtenha 128 valores Y 1 -Y 128 , multiplique os correspondentes valores em pares e retornar 128 resultados. Um processador de SISD teria que executar 128 instruções (+ leituras / gravações de memória) porque ele só pode multiplicar dois números de uma só vez. O processador SIMD faz isso em poucas etapas ou talvez em apenas um, se apenas 128 números se encaixam em seu registro.

Os processadores SISD funcionam bem para a computação do dia-a-dia porque são mais sequenciais, mas há algumas tarefas que exigem o processamento de grandes quantidades de dados - por exemplo, processamento de gráficos, renderização de vídeo, quebra de senhas, bitcoins de mineração etc. paralelização massiva da computação, desde que todos os dados sejam processados da mesma maneira.

Ok, isso é pura teoria. No mundo real, as CPUs regulares oferecem algumas instruções SIMD ( SSE ), portanto, várias coisas de dados podem ser feitas de forma mais eficiente em uma CPU regular. Ao mesmo tempo, nem todas as ULAs nas GPUs precisam trabalhar na mesma coisa, porque elas estão agrupadas em lotes (consulte a resposta de Mokubai ). Portanto, as CPUs não são puramente SISD e as GPUs não são puramente SIMD.

Quando o uso da GPU para cálculos é benéfico? Quando seus cálculos são realmente, realmente maciçamente paralelizáveis. Você tem que considerar que escrever a entrada na memória da GPU leva tempo e a leitura dos resultados também leva algum tempo. Você pode obter o maior aumento de desempenho ao criar um pipeline de processamento que faz muitos cálculos antes de sair da GPU.

    
por 16.06.2015 / 11:50
2

Dados gráficos são ideais para processamento paralelo. Divida uma imagem de 1024x1024 pixels em blocos de 16x16 e deixe cada núcleo processar um bloco tão pequeno. Agrupe os resultados juntos e o resultado não será diferente de um processador processando esses blocos um por um.

A condição para isso funcionar é que os resultados de um núcleo não influenciarão os resultados dos outros núcleos e vice-versa. Algo como isso poderia funcionar para uma planilha do Excel, onde as células da coluna C somam os valores da coluna A + B. C1 = A1 + B1, C2 = A2 + B2, e as linhas 1 e 2 são independentes uma da outra.

Processamento de dados gráficos é uma tarefa altamente específica, e você pode projetar um processador especificamente para esse tipo de tarefa - que pode ser usado para outras tarefas também, como mineração de bitcoins. E aparentemente você pode tornar uma unidade de processamento mais eficiente usando muitos núcleos próximos uns dos outros em vez de usar um grande processador. Mais eficiente significa não apenas mais rápido, mas também tem a vantagem de que, se você precisar apenas de 20% dos núcleos de processamento, poderá encerrar o restante, que é energeticamente eficiente.

Aviso: o exemplo acima pode não estar tecnicamente correto. É mais para mostrar o princípio. O processamento de dados real será muito mais complexo, eu acho.

    
por 16.06.2015 / 09:30
1

resposta principal é que eles são mais simples, então você pode empinar um monte deles juntos, eles costumavam fazer uma tarefa e que estava colocando frags na tela. mas hoje em dia eles são mais gerais na natureza, muito parecidos com os cpus. a principal razão entre cpus e gpus é que a arquitetura cpu é baseada em x86 e a em gpu é baseada em AMD GCN ou NVIDIA CUDA

tente ler link link

    
por 16.06.2015 / 07:21
1

As CPUs têm 1,2,4,6,8 núcleos ou mais. O mesmo, os GPUs têm centenas deles para milhares. É por isso que uma placa de vídeo superior tem cerca de 80 vezes mais potência de processamento de float do que uma CPU quad-core.

A diferença é que eles são específicos do tipo e agrupados (veja a resposta acima). Tipo específico significa que eles foram projetados para fazer cálculos não gerais específicos. É extremamente difícil fazer um software padrão usar núcleos de GPU em vez de núcleos de CPU. Se um software pudesse ser tão bom, isso tornaria as CPUs inúteis. Infelizmente, apenas os muito específicos são capazes de se aproximar do verdadeiro poder de processamento de uma placa de vídeo. Algum software de processamento de hash pode fazer isso.

    
por 16.06.2015 / 11:01