Questão Por que as pessoas usam GPUs para computação de alto desempenho em vez de um chip mais especializado?


Pelo que entendi, as pessoas começaram a usar GPUs para computação geral porque elas são uma fonte extra de poder de computação. E embora eles não sejam rápidos como CPU para cada operação, eles têm muitos núcleos, para que possam ser melhor adaptados para processamento paralelo do que uma CPU. Isso faz sentido se você já possui um computador que tenha uma GPU para processamento de gráficos, mas não precisa dos gráficos e gostaria de ter mais poder computacional. Mas também entendo que as pessoas compram GPUs especificamente para adicionar poder de computação, sem a intenção de usá-los para processar gráficos. Para mim, isso parece semelhante à seguinte analogia:

Eu preciso cortar minha grama, mas meu cortador de grama é fraquinho. Então eu removo a gaiola do ventilador que guardo no meu quarto e afio as lâminas. Eu gravo fita para o meu cortador, e acho que funciona razoavelmente bem. Anos depois, sou o encarregado de compras de um grande negócio de manutenção de gramados. Eu tenho um orçamento considerável para gastar em implementos de corte de grama. Em vez de comprar cortadores de grama, eu compro um monte de fãs de caixa. Mais uma vez, eles funcionam bem, mas eu tenho que pagar por peças extras (como a gaiola) que eu não vou acabar usando. (Para os propósitos desta analogia, devemos supor que os cortadores de grama e ventiladores de caixa custam aproximadamente o mesmo)

Então, por que não existe um mercado para um chip ou um dispositivo que tenha o poder de processamento de uma GPU, mas não a sobrecarga de gráficos? Eu posso pensar em algumas explicações possíveis. Qual deles, se houver, está correto?

  • Tal alternativa seria muito cara para se desenvolver quando a GPU já é uma boa opção (os cortadores de grama não existem, por que não usar este ventilador de caixa perfeitamente bom?).
  • O fato de 'G' representar gráficos significa apenas um uso pretendido, e realmente não significa que qualquer esforço seja feito para tornar o chip melhor adaptado ao processamento gráfico do que qualquer outro tipo de trabalho (cortadores de grama e ventiladores de caixa são a mesma coisa você vai direto ao ponto: nenhuma modificação é necessária para que uma funcione como a outra).
  • GPUs modernas carregam o mesmo nome de seus predecessores antigos, mas atualmente as de alta qualidade não são projetadas especificamente para processar gráficos (os modernos ventiladores de caixa são projetados para funcionar principalmente como cortadores de grama, mesmo que os antigos não sejam).
  • É fácil traduzir praticamente qualquer problema para a linguagem de processamento de gráficos (a grama pode ser cortada soprando o ar muito rapidamente).

EDITAR:

Minha pergunta foi respondida, mas com base em alguns dos comentários e respostas, sinto que devo esclarecer minha pergunta. Não estou perguntando por que todo mundo não compra seus próprios cálculos. Claramente isso seria muito caro na maior parte do tempo.

Eu simplesmente observei que parece haver uma demanda por dispositivos que podem executar rapidamente cálculos paralelos. Eu estava me perguntando por que parece que o dispositivo ideal é a Unidade de Processamento Gráfico, ao contrário de um dispositivo projetado para este fim.


104


origem


Porque eles estamos especializada para esse tipo de coisa; é basicamente o mesmo tipo de matemática. E a nVidia construiu e vendeu placas somente com GPU para as pessoas fazerem esse tipo de processamento massivamente paralelo de números. - Heptite
Tenha em mente que temos "unidades" especializadas adicionadas aos chips. AES é feito em hardware (eu acho) em CPUs. O AVX também é implementado no hardware. No entanto, onde você pára? O fabricante de chips não sabe o que você precisa e a maioria das pessoas não tem os recursos (tecnológicos ou financeiros) para ter seus próprios chips projetados para tarefas muito específicas. As placas gráficas são, como dito, um tipo de arquitetura especializada, que se presta bem a determinadas tarefas. Eles não são bons para tudo - mas para certas tarefas específicas e, portanto, usados ​​lá. - DetlevCM
Uma analogia mais precisa substituiria os ventiladores da caixa por colheitadeiras agrícolas de 100 metros de largura. - MooseBoys
Meu PC já tem um pronto para usar GPU, projetar e produzir um chip dedicado me devolveria alguns milhões. - PlasmaHH
Tente outra analogia. Suponha que temos ventiladores de caixa e temos rotores de helicóptero. Em nosso mundo hipotético, aplicações para ventiladores de caixa precisavam de fãs progressivamente maiores rodando em velocidades mais altas, até que terminamos com ventoinhas de 20m de lâmina de fibra de carbono, e a produção em massa tornou-as baratas. Então alguém percebeu que um ventilador de caixa de 20m é essencialmente apenas um rotor de helicóptero com uma gaiola em torno dele. É realmente semelhante. - Graham


Respostas:


É realmente uma combinação de todas as suas explicações. Mais barato e mais fácil, já existe e o design se afastou dos gráficos puros.


Uma GPU moderna pode ser vista como processadores de fluxo com algum hardware de gráficos adicional (e alguns aceleradores de função fixa, por exemplo, para codificação e descodificação de vídeo). GPGPU A programação atual usa APIs especificamente projetadas para esse propósito (OpenCL, Nvidia CUDA, AMD APP).

Na última década ou duas, as GPUs evoluíram de um pipeline de função fixa (praticamente apenas gráficos) para um pipeline programável (shaders permite escrever instruções personalizadas) para APIs mais modernas, como o OpenCL, que fornecem acesso direto aos núcleos do shader sem o pipeline de gráficos que o acompanha.

Os bits restantes dos gráficos são menores. Eles são uma parte tão pequena do custo do cartão que não é significativamente mais barato deixá-los de fora, e você incorre no custo de um projeto adicional. Portanto, isso geralmente não é feito - não há um equivalente orientado a computação da maioria das GPUs - exceto nas camadas mais altas, e elas são muito caras.

As GPUs de "jogos" normais são muito usadas porque as economias de escala e a relativa simplicidade as tornam baratas e fáceis de se começar. É um caminho bastante fácil de programação gráfica para acelerar outros programas com GPGPU. Também é fácil atualizar o hardware à medida que produtos mais novos e mais rápidos estão disponíveis, ao contrário das outras opções.


Basicamente, as escolhas se resumem a:

  • CPU de uso geral, ótima para ramificação e código sequencial
  • GPU normal de "jogos"
  • GPU orientada por computação, por ex. Nvidia Tesla e Instinto de Radeon Geralmente, elas não suportam a saída de gráficos, portanto, a GPU é um pouco imprópria. No entanto, eles usam núcleos de GPU semelhantes às GPUs normais e o código OpenCL / CUDA / APP é mais ou menos portável.
  • FPGAs, que usam um modelo de programação muito diferente e tendem a ser muito caros. É aqui que existe uma barreira significativa à entrada. Eles também não são necessariamente mais rápidos que uma GPU, dependendo da carga de trabalho.
  • ASICs, circuitos personalizados (hardware). Isso é muito caro e só vale a pena com escala extrema (estamos falando de muitos milhares de unidades, no mínimo), e onde você tem certeza de que o programa nunca precisará mudar. Eles raramente são viáveis ​​no mundo real. Você também terá que redesenhar e testar a coisa toda a cada vez que a tecnologia avança - você não pode simplesmente trocar em um novo processador como você pode com CPUs e GPUs.

108



ASICs também fazem sentido quando a computação literalmente se paga (crypto mining) - ratchet freak
Na verdade, os FPGAs são geralmente piores que os da GPU. O problema é que os FPGAs são muito flexíveis; eles podem implementar várias operações diferentes. No entanto, o cálculo é geralmente uma forma de matemática, e na verdade o volume é apenas duas operações: adição e multiplicação (subtração e divisão são variantes do acima). As GPUs são muito, muito boas nessas duas operações, muito mais do que as FPGAs. - MSalters
Você precisa esclarecer mais sobre FPGAs. A ideia de que há um "passo a passo" é um pouco enganadora. Eles são mais um passo para os lados. - Yakk
Como exemplo do último, o Google tem suas próprias "unidades de processamento tensor" para aprendizado de máquina. Até que ponto eles são personalizados não são claros, mas são descritos como sendo ASICs. - mbrig
@MSalters Um dos principais pontos de venda de FPGAs sobre GPUs é o desempenho / Watt, que está se tornando mais importante à medida que os datacenters começam a atingir a parede de energia (os FPGAs geralmente são mais eficientes no consumo de energia). No que diz respeito à matemática, os FPGAs são comparáveis ​​aos GPUs na aritmética de ponto fixo e inteiro, e somente atraso na matemática de ponto flutuante. - wilcroft


Minha analogia favorita:

  • CPU: Um gênio Polímata. Pode fazer uma ou duas coisas de cada vez, mas essas coisas podem ser muito complexas.
  • GPU: Uma tonelada de trabalhadores pouco qualificados. Cada um deles não pode fazer grandes problemas, mas em massa você pode fazer muita coisa. Para sua pergunta, sim, há alguma sobrecarga de gráficos, mas eu acredito que é marginal.
  • ASIC / FPGA: Uma empresa. Você pode contratar uma tonelada de trabalhadores pouco qualificados ou um par de gênios, ou uma combinação de trabalhadores e gênios de baixa qualificação.

O que você usa depende da sensibilidade ao custo, do grau em que uma tarefa é paralelizável e de outros fatores. Devido à forma como o mercado se desenvolveu, as GPUs são a melhor escolha para a maioria das aplicações altamente paralelas e as CPUs são a melhor escolha quando a energia e o custo unitário são as principais preocupações.

Diretamente à sua pergunta: por que uma GPU sobre um ASIC / FPGA? Geralmente custo. Mesmo com os atuais preços da GPU inflados, ainda é (geralmente) mais barato usar uma GPU do que projetar uma ASIC para atender às suas necessidades. Como o @ user912264 aponta, existem tarefas específicas que podem ser úteis para ASICs / FPGAs. Se você tiver uma tarefa única e se beneficiar da escala, pode valer a pena projetar um ASIC / FPGA. Na verdade, você pode projetar / comprar / licenciar projetos de FPGA especificamente para essa finalidade. Isso é feito para alimentar os pixels em TVs de alta definição, por exemplo.


32



Comentários não são para responder de qualquer maneira, e isso parece uma resposta razoável para mim. - Raimund Krämer
@BobtheMogicMoose Mas pode ser muito mais rápido usar um FPGA personalizado projetado para análise genômica do que ter o código equivalente em uma GPU. Quando você paga aos cientistas para esperar pelos resultados, o FPGA mais rápido se paga muito rapidamente. - user912264
FPGAs estão ficando muito mais acessíveis para o desenvolvedor comum também - a Microsoft, por exemplo, tem um solução de IA em nuvem usando FPGAs (Projeto BrainWave). A AWS também tem algumas ofertas. Qualquer um pode alugar alguns FPGAs customizados para tarefas especializadas sem ter que construí-lo, o que não é viável para muitos casos de uso, mesmo alguns anos atrás. - brichins
Sim, eu acho que existem kits de FPGA que são comparáveis ​​a um arduino-framboesa-pi. Eu ainda acho que programar FPGAs é muito mais caro que arquiteturas mais desenvolvidas. - BobtheMagicMoose


Sua analogia é ruim. Na analogia, quando você está comprando equipamentos para um grande negócio de cuidados com o gramado, você assumir Há bons cortadores de grama disponíveis. Este não é o caso no mundo da computação - as GPUs são a melhor ferramenta prontamente disponível.

Os custos de P & D e os possíveis ganhos de desempenho de um chip especializado provavelmente são altos demais para justificar a criação de um.

Dito isso, estou ciente de que a Nvidia lançou algumas GPUs especificamente para computação de propósito geral - elas não tinham saídas de vídeo - um pouco como vender ventiladores de caixa com as gaiolas já removidas.


10





Claro, você pode usar chips especializados, seja para eficiência energética ou velocidade de cálculo. Deixe-me contar a história da mineração Bitcoin:

  • Bitcoin é novo, geeks meu com seus CPUs.
  • Bitcoin é um pouco novo, geeks inteligentes meus com suas GPUs.
  • Bitcoin é agora (meio) famoso, as pessoas compram FPGAs.
  • O Bitcoin agora é famoso (2013), até os novatos compram ASICs ("Application Specific Integrated Circuits") para minerar com eficiência.
  • Bloquear as recompensas cai (periodicamente), mesmo os antigos ASICs não são mais lucrativos.

Portanto, não há motivos para usar uma GPU em vez de uma "calculadora gigante" especializada. Quanto maiores os incentivos econômicos, mais o hardware fica especializado. No entanto, eles são muito difíceis de projetar e inviáveis ​​de fabricar se você não estiver produzindo milhares de uma só vez. Se não for viável criar chips, você pode comprar um dos Essa do Walmart mais próximo.

TL; DR Claro que você pode usar chips mais especializados.


9



"É claro que você pode usar chips mais especializados" - mas existem chips especializados para bitcoin (SHA-256), depois para litecoin (scryptin) e isso é muito bonito. Hardware de computação de alto desempenho para outros problemas não existe. (Ou seja, com desempenho maior do que as GPUs atuais de última geração) - Agent_L


O que você descreve em sua analogia é exatamente o que aconteceu. Assim como você pegou seu ventilador e apontou as lâminas para tentar usá-lo como cortador, um grupo de pesquisas percebeu: "Ei, nós temos uma unidade de processamento multi-core bem legal aqui, vamos tentar usá-la para cálculos de propósito geral!" ".

O resultado foi bom e a bola começou a rolar. A GPU passou de um dispositivo somente gráfico para suportar computação de propósito geral para ajudar nas situações mais exigentes.

Porque, de qualquer maneira, a operação mais exigente em computação que esperamos dos computadores são gráficos. É o suficiente para dar uma olhada nos avanços impressionantes de como os jogos parecem hoje em comparação com o que eles fizeram há alguns anos. Isso significa que muito esforço e dinheiro foram gastos no desenvolvimento das GPUs, e o fato de que elas também poderiam ser usadas para acelerar uma certa classe de computação de uso geral (ou seja, extremamente paralelas) apenas aumentaram sua popularidade.

Então, em conclusão, a primeira explicação que você oferece é a mais precisa:

  • Tal alternativa seria muito cara para desenvolver quando a GPU já é uma boa opção.

GPUs onde já estão lá, eles estão prontamente disponíveis para todos e eles funcionaram.


8



Eu tenho que discordar sobre "a operação mais exigente em termos computacionais" ser gráficos, dependendo, é claro, de exatamente quem "nós" é. Para usuários em geral, sim, mas na comunidade de ciência e engenharia, há muitas coisas mais exigentes que os gráficos. Afinal, gráficos aceitáveis ​​(como para jogos) podem ser feitos com uma única combinação de PC e GPU de gama média. Problemas significativos geralmente combinam centenas ou milhares dessas unidades para obter desempenho na faixa de petaflop - e então os problemas ainda podem levar dias ou semanas de tempo de computação. - jamesqf
A operação mais exigente em computação que eu espero do meu computador é tecnicamente gráficos, mas cálculos de estrutura de movimento não são o que a maioria das pessoas (ou projetistas de GPU) pensam quando ouvem a palavra "gráficos". - Mark


Especificamente, as GPUs não são "núcleos" no sentido de "paralelismo de tarefas". Na maior parte, está na forma de "paralelismo de dados". SIMD é "dados múltiplos de instrução única". O que isto significa é que você não faria isso:

for parallel i in range(0,1024): c[i] = a[i] * b[i]

Isso significa que você tem 1024 ponteiros de instruções, todos realizando tarefas separadas progredindo em taxas diferentes. SIMD ou "computação vetorial" executará instruções em todas as matrizes de uma só vez, mais assim:

c = a * b

Os "loops" estão nas instruções "*" e "=", e não fora das instruções. O acima faria isso para todos os 1024 elementos ao mesmo tempo, no ponteiro de instrução SAME para todos eles. É como ter três registros enormes para a, b e c. O código SIMD é extremamente restrito e só funciona bem para problemas que não são excessivamente "ramificados".

Em casos realistas, esses valores de SIMD não são tão grandes quanto 1024 itens. Imagine uma variável que é uma gangue de int32 unida. Você pode pensar em multiplicar e atribuir como uma instrução de máquina real.

int32_x64 c; int32_x64 b; int32_x64 a; c = b * a;

GPUs reais são mais complicadas que o SIMD, mas essa é a essência delas. É por isso que você não pode simplesmente lançar um algoritmo de CPU aleatório em uma GPU e esperar um aumento de velocidade. Quanto mais ramificação de instrução o algoritmo fizer, menos apropriado será para uma GPU.


5





As outras respostas aqui são muito boas. Vou jogar meus 2 centavos também.

Um motivo pelo qual as CPUs se tornaram tão difundidas é que elas são flexíveis. Você pode reprogramá-los para uma variedade infinita de tarefas. Hoje em dia é mais barato e mais rápido para as empresas que produzem produtos colocarem uma pequena CPU ou microcontrolador em algo e programar sua funcionalidade do que desenvolver circuitos personalizados para fazer a mesma tarefa.

Usando o mesmo dispositivo que os outros, você pode aproveitar as soluções conhecidas para problemas usando esse mesmo dispositivo (ou similar). E conforme a plataforma amadurece, suas soluções evoluem e se tornam muito maduras e otimizadas. As pessoas que codificam nesses dispositivos também ganham experiência e se tornam muito boas em seu ofício.

Se você fosse criar um novo tipo de dispositivo a partir do zero, alguma alternativa a uma GPU, levaria anos para que até mesmo os primeiros adotantes realmente aprendessem como usá-lo. Se você conecta um ASIC à sua CPU, como você otimiza a computação de descarregamento nesse dispositivo?

A comunidade de arquitetura de computadores tem agitado com essa ideia há vários anos (obviamente já foi popular antes, mas recentemente viu um renascimento). Esses 'aceleradores' (seus termos) possuem graus variados de reprogramabilidade. O problema é, quão estreitamente você define o escopo do problema que seu acelerador pode resolver? Eu até conversei com algumas pessoas que estavam trabalhando na criação de um acelerador usando circuitos analógicos com op-amps para calcular equações diferenciais. Ótima idéia, mas escopo extremamente estreito.

Depois que você tiver um acelerador de trabalho, as forças econômicas decidirão seu destino. A inércia do mercado é uma força incrível. Mesmo que algo seja uma ótima ideia, é economicamente viável refatorar suas soluções de trabalho para usar esse novo dispositivo? Talvez talvez não.

GPUs são realmente horríveis para certos tipos de problemas, então muitas pessoas / empresas estão trabalhando em outros tipos de dispositivos. Mas as GPUs já estão tão arraigadas que seus dispositivos se tornarão economicamente viáveis? Eu acho que vamos ver.

Edit: Expandindo minha resposta um pouco, agora que estou fora do ônibus.

Um estudo de caso preventivo é o projeto Intel Larrabee. Começou como um dispositivo de processamento paralelo que poderia fazer gráficos em software; não tinha hardware gráfico especializado. Falei com alguém que trabalhou no projeto, e uma das principais razões pelas quais disseram que ele falhou e foi cancelada (além de políticas internas horríveis) foi que eles simplesmente não conseguiam que o compilador produzisse um bom código para isso. Claro que produziu código de trabalho, mas se o ponto inteiro do seu produto é o desempenho máximo, é melhor você ter um compilador que produza um código ótimo. Isso me leva de volta ao meu comentário anterior sobre a falta de profundo conhecimento em hardware e software para que seu novo dispositivo seja um grande problema.

Alguns elementos do projeto Larrabee chegaram ao Xeon Phi / Intel MIC. Este produto realmente chegou ao mercado. Foi totalmente focado em paralelizar cálculos científicos e outros do tipo HPC. Parece que é uma falha comercial agora. Outra pessoa com quem conversei na Intel deixou implícito que eles simplesmente não eram competitivos em preço / desempenho com as GPUs.

As pessoas tentaram integrar a síntese lógica para FPGAs em compiladores, para que você possa gerar código automaticamente para seus aceleradores FPGA. Eles não funcionam tão bem assim.

Um lugar que parece ser solo realmente fértil para aceleradores, ou outras alternativas para GPUs, é a nuvem. A economia de escala que existe nessas grandes empresas, como Google, Amazon e Microsoft, faz com que investimentos em esquemas alternativos de computação valham a pena. Alguém já mencionou as unidades de processamento de tensores do Google. A Microsoft tem FPGAs e outras coisas em toda a infraestrutura do Bing e do Azure. Mesma história com a Amazon. Absolutamente faz sentido se a escala puder compensar seu investimento em tempo, dinheiro e engenharia de lágrimas.

Em resumo, a especialização está em desacordo com muitas outras coisas (economia, maturidade da plataforma, conhecimento de engenharia, etc.). A especialização pode melhorar significativamente seu desempenho, mas restringe o escopo ao qual seu dispositivo é aplicável. Minha resposta se concentrou em muitos dos aspectos negativos, mas a especialização também tem uma tonelada de benefícios. Absolutamente deveria ser perseguido e investigado, e como eu mencionei muitos grupos estão perseguindo isto bastante agressivamente.

Desculpe, edite novamente: acho que sua premissa inicial está errada. Eu acredito que foi menos um caso de procurar fontes extras de poder de computação, e mais um caso de pessoas reconhecendo uma oportunidade. A programação gráfica é muito pesada em álgebra linear, e a GPU foi projetada para executar eficientemente operações comuns como multiplicação de matriz, operações vetoriais, etc. Operações que também são muito comuns em computação científica.

O interesse pelas GPUs começou quando as pessoas reconheceram que as promessas feitas pelo projeto Intel / HP EPIC foram muito exageradas (final dos anos 90, início dos anos 2000). Não houve solução geral para a paralelização do compilador. Então, em vez de dizer "onde encontramos mais poder de processamento, oh, poderíamos tentar a GPU", acho que era mais "temos algo que é bom em cálculos paralelos, podemos torná-lo mais programável em geral". Muitas das pessoas envolvidas estavam na comunidade de computação científica, que já possuíam código Fortran paralelo que podiam ser executados em máquinas Cray ou Tera (o Tera MTA tinha 128 threads de hardware). Talvez tenha havido movimento de ambas as direções, mas só ouvi menções sobre as origens do GPGPU nessa direção.


5



Por "aceleradores" você está se referindo a hardware customizado ou supergrupos de nós de computação de baixa potência? Você pode elaborar fornecendo referência a algum hardware acelerador de exemplo. - manav m-n
Desculpe, achei que deixei isso claro do contexto. O Accelerator é apenas um termo genérico para um coprocessador ou cartão de descarregamento. O ponto flutuante estava originalmente em um coprocessador e não no processador principal, e teria sido considerado um acelerador. GPUs, DSPs, Xeon Phi, FPGAs quando estão em uma placa PCIe ou algo semelhante, a equação diferencial analógica que mencionei, existem dispositivos que auxiliam na virtualização, há pesquisas atuais em aceleradores de rede neural. Esses são todos exemplos de aceleradores. - NerdPirate